布谷鸟哈希算法:原理、分析与实验对比
1. 哈希函数与通用哈希族
在哈希算法中,对于集合 (U = {0, \ldots, p - 1}) 和范围 (R = {0, \ldots, r - 1})(其中 (p) 为素数),存在一个标准的 ((2, k)) - 通用哈希族。对于每一组 (0 \leq a_0, a_1, \ldots, a_{k - 1} < p) 的选择,该族包含函数 (h(x) = ((\sum_{l = 0}^{k - 1} a_l x^l) \bmod p) \bmod r)。
通常假设来自 (U) 的键能放入一个机器字中,即 (U = {0, 1}^w)。对于长键,可以通过从 ((O(1), 2)) - 通用哈希族中为键的每个字选择一个随机函数,将键映射为各个函数值的按位异或,从而将长键映射为短键。这样选择的函数可以将集合 (S) 单射地映射到 ({0, 1}^{2 \log n + O(1)}),有效将全域大小缩减至 (O(n^2))。
Siegel 的研究表明,对于任意常数 (\epsilon > 0),若全域大小为 (n^{O(1)}),则存在一个 ((O(1), O(\log n))) - 通用哈希族,其评估时间为常数,使用空间和初始化时间为 (O(n^{\epsilon})),不过评估时间的常数因子较高。
在哈希表中,会预留一个特殊值 (\perp \in U) 来表示空单元格。对于双重哈希,还会使用另一个特殊值来表示已删除的键。
2. 布谷鸟哈希算法
布谷鸟哈希是一种对静态字典进行动态化处理的算法。它使用两个长度为 (r) 的哈希表 (T_1) 和 (T_2),以及两个哈希函数 (
布谷鸟哈希算法原理、对比与应用建议
超级会员免费看
订阅专栏 解锁全文
869

被折叠的 条评论
为什么被折叠?



