Hash 通用散列整数

Hash 通用散列整数,hash,universal,Hash,Universal,这是我在这里的第一个线程,我想问你们几个关于整数的通用散列的问题。 通用哈希算法应使用以下内容: equation = ((a*x+b)mod p) mod m a=random number from 1 to p-1 b=random number from 0 to p-1 x= the Key p= a prime number >=m m=the size of the array 我知道我要散列的数字在1-2969之间。 但是我不明白如何使用这个方程来尽可能地减少

这是我在这里的第一个线程,我想问你们几个关于整数的通用散列的问题。 通用哈希算法应使用以下内容:

equation =
((a*x+b)mod p) mod m

a=random number from 1 to p-1

b=random number from 0 to p-1

x= the Key 

p= a prime number >=m

m=the size of the array
我知道我要散列的数字在1-2969之间。 但是我不明白如何使用这个方程来尽可能地减少碰撞。 当时a和b是随机的,我对此无能为力。 我的问题是如何选择素数如果我有多个选择,我可以使用的素数范围是2到4999。 我试图选择第一个符合函数要求的可用函数,但有时它可能返回负数。我在谷歌和Stackoverflow上搜索过,但我不知道我没有做错什么

我用C语言编写代码。而且,我只能使用通用哈希


谢谢您的时间。

您是如何得到p的素数的?基本上,我要问的是你是否信任他们,因为
x
,和
p-1
看起来他们可能最容易错误地变得消极。你应该生成一整串,然后对于任何负数,打印出a、b、x、p和m来检查哪个值似乎是问题所在。素数是从教授给出的数组中选取的。数组包括从2到4999的所有素数。我生成a和b,所以它们是正数。x总是正数。好的,
((a*x+b)%p)%m
将始终为正,因为
{a,x,b,p,m}
也包含所有正整数。要么这些变量中的一个得到了错误的值,要么你的数学实现不正确。你能发布你的C代码以便我们更好地检查错误吗。我不太熟悉使用整数进行通用哈希的理论(以我的经验,整数可以按其本身进行哈希),但我可以说,您发布的过程永远不会有所有正参数为负。如果您发布代码,我将尝试找出发生了什么。我解决了它,我必须确保p不等于m,因为生成的数字发生了冲突,所以我只需找到从最大值开始的下一个更高的素数整数我必须散列。谢谢你的时间。你是如何得到p的素数值的?基本上,我要问的是你是否信任它们,因为
x
,和
p-1
看起来它们可能最容易错误地变成负值。你应该生成一整组,然后为任何负值打印出a、b、x、p和m以进行检查哪个值似乎是问题所在。素数是从教授给出的数组中挑选出来的。数组包括从2到4999的所有素数。我生成a和b,所以它们都是正数。X总是正的。好吧,
((a*X+b)%p)%m
总是正的,因为
{a,X,b,p,m}
也包含所有正整数。要么这些变量中的一个得到了错误的值,要么你的数学实现不正确。你能发布你的C代码以便我们更好地检查错误吗。我不太熟悉使用整数进行通用哈希的理论(以我的经验,整数可以按其本身进行哈希),但我可以说,您发布的过程永远不会有所有正参数为负。如果您发布代码,我将尝试找出发生了什么。我解决了它,我必须确保p不等于m,因为生成的数字发生了冲突,所以我只需找到从最大值开始的下一个更高的素数我得散列了。谢谢你抽出时间。