随机算法通常因其简单而受欢迎,但用于产生预期概率保证的哈希函数往往过于复杂而不实用。在这里,我们调查了基于表格的简单哈希方案如何提供出乎意料的强保证的最新结果。
简单的表格哈希追溯到Zobrist(一种用于游戏玩法的新哈希方法。技术报告88,计算机科学系,威斯康星大学)。键被视为由c字符,我们有预先计算的字符表h1,……hc将字符映射到随机散列值。一个关键x= (x1,……xc)被散列到h1[x1]⊕h2[x2)……⊕hc[xc这个方案在缓存中的字符表非常快。虽然简单制表甚至不是四独立的,但它确实提供了许多通常通过更高的独立性获得的保证,例如,线性探测和布谷鸟哈希。
接下来,我们考虑扭曲的制表其中一个输入字符以简单的方式被“扭曲”。得到的散列函数具有强大的分布特性:chernoff风格的尾界和对最小散列的很小的偏差。这也产生了一个非常快的伪随机数生成器,这对于许多经典的随机算法和数据结构来说是非常好的。
最后,我们考虑双制表其中我们组成了两个简单的表格函数,将一个应用到另一个的输出,并表明这在Wegman和Carter的经典框架中产生了非常高的独立性。26事实上,w.h.p对于一组与所消耗空间成比例的给定大小,双制表法给出了完全随机的哈希。我们还提到了一些更详细的表格式,在给定的时间和空间中获得接近最优的独立性。
虽然这些制表方案都很容易实现和使用,但它们的分析却并非如此。
在随机算法和数据结构的设计中,一个有用的假设是完全随机的哈希函数是免费可用的,它可以在单位时间内计算出来。消除这种不现实的假设是大量工作的主题。要实现基于哈希的算法,必须选择一个具体的哈希函数。这个散列函数所做的空间、时间和随机选择会影响整体性能。因此,通用目标是提供有效的哈希函数构造,使重要的随机算法产生类似于假设完全随机哈希得到的概率保证。
为了充分理解这个程序的意义,我们注意到许多随机算法在实践中非常简单和流行,但它们往往是用过于简单的哈希函数实现的,没有必要的保证。这在随机测试中可能非常有效,增加了它们的受欢迎程度,但现实世界中充满了结构化数据,例如,由计算机生成的数据,这可能不利于哈希函数。这在参考文献中有说明。21展示了简单的常见输入如何使常用哈希函数的线性探测失败,解释了其在实践中感知到的不可靠性。当使用足够强的哈希函数时,问题就消失了。
在本文中,我们将对近年来Refs的研究结果进行综述。6,7,8,9,21,22,25展示了基于表格的简单现实的哈希方案是如何为许多流行的随机算法提供了出乎意料的强大保证的,例如,线性探测、布谷鸟哈希、最小独立性、树堆、平面分区、二选择幂、切诺夫式集中边界,甚至是高度独立性。该调查从用户的角度出发,解释了如何应用这些制表方案。虽然这些方案都很容易描述和使用,但分析表明它们的工作是有意义的。对于这一分析,读者可参考上述论文。读者也可以参考这些论文来了解以前工作的历史。
1.1.背景
通常哈希函数映射一个键域
没有发现记录