【发布时间】:2017-07-11 16:41:09
【问题描述】:
我正在尝试创建一个函数,该函数根据我希望值在哈希表中的位置生成哈希键。
我的哈希函数是(a + b * (key) ) % c = hash value。我在 SO 上看到了 similar question,我尝试用 d 替换 b * (key) 并只是这样做:
private int ReverseModulus(int a, int b, int c, int hashValue)
{
if(hashValue >= c)
return -1;
if(a < hashValue)
return (hashValue - a) / b;
return (c + hashValue - a) / b;
}
但似乎大多数时候hashValue != Hash(ReverseModulus(a,b,c, hashValue))。
我想知道这种方法是错误的还是只是代码中的错误。
【问题讨论】:
-
哈希在设计上是一种方式。
-
我知道键和哈希值之间没有一对一的关系,但我只想从产生所需哈希值的无数键中获取一个。例如,您可以通过从 0 开始迭代直到获得正确的哈希值来强制它。
-
@Servy 好吧,只要您将线性同余生成器称为哈希......
-
@Servy 不正确。有很多可逆的哈希值。哈希必须专门设计为一种方式。