Hashtable- Rehashing

时间:2011-09-28 16:03:31

标签: c# hashtable universal-hashing

我被告知Hashtable中的.NET使用重新划分来减少/避免碰撞。

IE中。 “Rehasing的工作原理如下:假设我们有一组哈希不同的函数,H1 ... Hn,并且当从哈希表中插入或检索项目时,最初使用H1哈希函数。如果这导致碰撞,则尝试使用H2,然后再尝试Hn,以避免在Hashtable中发生碰撞。“

假设:我们有一个哈希表,其中n(其中n< Infinity)元素的渐近时间复杂度为o(1);我们(CLR)在应用一些散列函数(Hn-1散列函数,其中n> 1)时实现了这一点。

问题: 当我们寻找(检索)任何元素(如果使用不同的散列函数)时,有人可以解释一下CLR映射如何键入哈希码吗? CLR如何跟踪(如果是)任何活动对象(哈希表)的哈希函数?

提前致谢

1 个答案:

答案 0 :(得分:5)

随机选择哈希函数称为Universal Hashing方法。 AFAIK每个初始化过程选择一次哈希函数,所以当在单个哈希表的范围内使用多个哈希函数时,这不是一个真实的情况。

编辑:更多详情

回到家里,打开“算法简介”T. Cormen预订并在 11.3.3 Universal Hashing 部分中找到以下内容:

  

通用散列背后的主要思想是选择散列函数   从一个精心设计的功能类随机   开始执行

您可以在Google图书网站here

上预览图书,以了解更多信息

enter image description here