哈希表-重新哈希
我听说 .NET
中的 Hashtable
使用重新哈希来减少/避免冲突。
IE。 “重新哈希的工作原理如下:假设我们有一组不同的哈希函数 H1 ... Hn,当从哈希表中插入或检索项目时,最初使用 H1 哈希函数。如果这导致冲突,则会尝试 H2 并向前直至 Hn 以避免哈希表中的冲突。”
假设:我们有一个包含 n(其中 n < Infinity)元素的哈希表,其中渐近时间复杂度为 o(1);我们(CLR)在应用一些哈希函数(Hn-1哈希函数,其中n>1)时实现了这一点。
问题: 有人可以解释一下当我们查找(检索)任何元素时(如果使用不同的哈希函数),CLR 如何将 Key 映射到哈希代码? CLR 如何跟踪(如果它)任何活动对象(哈希表)的哈希函数?
提前致谢
I have been told that Hashtable
in .NET
uses rehashing in order to reduce/avoid collision.
Ie. “Rehasing works as follows: assume we have a set of hash different functions, H1 ... Hn, and when inserting or retrieving an item from the hash table, initially the H1 hash function is used. If this leads to a collision, H2 is tried instead and onwards up to Hn to avoid collision in Hashtable.”
Assumption: We have a hashtable with n (where n < Infinity) element where asymptotic time complexity is o(1); we (CLR) have achieved this while applying some hashing function ( Hn-1 hash function where n>1).
Question:
Can someone explain me how CLR map Key to the hash code when we seek (retrieve) any element (if different hashing functions are used)? How CLR track (if it) the hashing function of any live object (hash table)?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
随机选择哈希函数称为通用哈希方法。据我所知,每个初始化过程都会选择一次哈希函数,因此当在单个哈希表的范围内使用多个哈希函数时,这不是真实情况。
编辑:更多细节
刚回到家,打开T. Cormen的“算法简介”一书,在11.3.3通用散列部分找到以下内容:
您可以通过在 Google 图书网站上预览该书来阅读更多内容 此处
Random selection of a hash function is know as Universal Hashing approach. AFAIK the hash function selected once per some initialization process so this is not a real case when in scope of a single hash table were used multiple hash functions.
EDIT: More details
Just back at home, opened "Introduction to algorithms" T. Cormen book and found following in the section 11.3.3 Universal Hashing:
You can read more by previewing the book at the Google Books site here