我被告知Hashtable
中的.NET
使用重新划分来减少/避免碰撞。
IE中。 “Rehasing的工作原理如下:假设我们有一组哈希不同的函数,H1 ... Hn,并且当从哈希表中插入或检索项目时,最初使用H1哈希函数。如果这导致碰撞,则尝试使用H2,然后再尝试Hn,以避免在Hashtable中发生碰撞。“
假设:我们有一个哈希表,其中n(其中n< Infinity)元素的渐近时间复杂度为o(1);我们(CLR)在应用一些散列函数(Hn-1散列函数,其中n> 1)时实现了这一点。
问题: 当我们寻找(检索)任何元素(如果使用不同的散列函数)时,有人可以解释一下CLR映射如何键入哈希码吗? CLR如何跟踪(如果是)任何活动对象(哈希表)的哈希函数?
提前致谢
答案 0 :(得分:5)
随机选择哈希函数称为Universal Hashing方法。 AFAIK每个初始化过程选择一次哈希函数,所以当在单个哈希表的范围内使用多个哈希函数时,这不是一个真实的情况。
编辑:更多详情
回到家里,打开“算法简介”T. Cormen预订并在 11.3.3 Universal Hashing 部分中找到以下内容:
通用散列背后的主要思想是选择散列函数 从一个精心设计的功能类随机 开始执行
您可以在Google图书网站here
上预览图书,以了解更多信息