C# HashHelpers.GetPrime中此行的用途是什么?
我在.NET的字典实现中挖掘,发现了一个我很好奇的函数:C# HashHelpers.GetPrime中此行的用途是什么?,c#,.net,dictionary,C#,.net,Dictionary,我在.NET的字典实现中挖掘,发现了一个我很好奇的函数:HashHelpers.GetPrime 它所做的大部分工作都非常简单,它寻找一个高于某个最小值的素数,并将其作为参数传递给它,显然是为了在类似哈希表的结构中用作多个存储桶。但有一个神秘的部分: if (HashHelpers.IsPrime(j) && (j - 1) % 101 != 0) { return j; } (j-1)%101!=0检查?i、 e.为什么我们显然不想拥有比101的倍数多1倍的桶数?作者
HashHelpers.GetPrime
它所做的大部分工作都非常简单,它寻找一个高于某个最小值的素数,并将其作为参数传递给它,显然是为了在类似哈希表的结构中用作多个存储桶。但有一个神秘的部分:
if (HashHelpers.IsPrime(j) && (j - 1) % 101 != 0)
{
return j;
}
(j-1)%101!=0
检查?i、 e.为什么我们显然不想拥有比101的倍数多1倍的桶数?作者解释得很好:
“InitHash”基本上是经典双哈希的一个实现
(见附件)
1) 唯一的“正确性”要求是“增量”用于
探针a。非零b。相对于桌子的大小来说是相对最好的
“hashSize”。(这是为了确保您能够探测数据库中的所有条目。)
“包装”和访问条目之前的表(已探测)
2) 因为
我们选择表大小作为素数,我们只需要确保
增量为0有趣的问题,但可能是特定于要求作者回答的问题。您是否对其进行了反编译或下载了源代码?在查看GetPrime的源代码时,您是否尝试查看原始源代码而不是反编译的源代码?有很多注释可以帮助您理解此代码;)谢谢以上两条评论。看起来101实际上是一个名为HashTable.HashPrime的常量。还是不知道它的意义是什么!谢谢,正如人们所建议的那样,看起来转到源代码而不是反编译版本是正确的做法!是的!我有过几次在参考资料中记录奇怪行为的经历。干得好,MSFT。。