所以我正在阅读关于哈希表,哈希函数等的内容。我很想读懂维基百科关于“动态完美哈希”如何使用第二个哈希表作为数据结构来存储特定存储桶中的多个值。
然而,当我遇到如何选择通用散列函数来执行第二个散列表的散列时。任何人都可以解释这个通用哈希函数是如何根据存储在存储桶中的值确定的?我模糊地遵循维基百科的“通用哈希函数”页面中的推理和逻辑,但我很难对它有任何直觉。特别是,这些功能如何保证不发生冲突?或者至少,如果它们被处理掉并且如果检测到冲突就会产生新的,那么我们怎么知道这可以在实际的时间内完成呢?
瓢虫书的解释好吗?
答案 0 :(得分:4)
完美散列意味着即使在最坏的情况下,读取访问也需要持续时间。
对于插入密钥,没有最坏情况保证,时间范围仅为平均值(或可能是摊销)。
为了使插入足够快,第二级哈希表被选择为非常大的键数(k 2 ),足够大以使冲突变得不太可能。这不是问题w.r.t. size,因为第一级哈希均匀地分配密钥,因此平均二级哈希表仍然很小。
第二级表的哈希函数是从一组参数化哈希函数中随机选择的。
答案 1 :(得分:3)
看一些麻省理工学院的讲座怎么样? :)
MIT’s Introduction to Algorithms, Lectures 7 and 8: Hashing