Fredman构造法构造完备哈希

        在刘璟的《计算机算法引论——设计与分析》一书中介绍了几种完备哈希(PHF)构造技术,里面提到了Fredman构造法。这本书是零几年写的比较早,光看书中介绍不太容易理解这一构造法的具体流程,搜了一下网上居然极少有这一方法的介绍,看了很多数据结构与算法的书也很少有。在这里先介绍原理与构造方法,再拿一个例子过一遍操作。

原理:

        Fredman通过构造法证明了:对任意的关键字集合S⊆U|S|=n,至多取m=3n(m≤3n,α=n/m>0.33),一定可以在形如    

h(x)=((kx) mod N) mod n (N=|U|)    

Hash函数中找到SPHF相关的论文应该是这一篇Storing asparse table with O(1) worst case access time


构造方法:

已知:实际关键词集合S⊆U|S|=n,且|U|=N为素数。

1.      对此S,先构造函数

        h'(x)=((kx) mod N) mod n

        用枚举法选择k值,使的

        其中,bi=|Si|(i=0,1,,n-1)Si={x|xS, h'(x)=i}Si是被h'映射为i的关键字集合。

        已经证明,满足条件的k值一定存在。


2.      对于每个Si(i=0,1,,n-1)选择适当的ki,构造函数hi(x)=((kix)mod N) mod Ci

其中,Ci=1+bi(bi-1),使的hi:Si[0..Ci-1]为单一映射函数(无冲突)。由于这时的集合Si较小,Ci值也不大,因此ki一定存在,且不难求。

3.      ,定义函数h: U[0..m-1],使对于任意XS

h(x)=C0+C1+C2++Ci-1+((kix) mod N) mod Ci

其中,i=h'(x)=((kx) mod N) mod n

函数h(x)就是SU的一个PHF

该方法时间代价为(n·N),空间代价为5n+C

例子:


哈希表总共17格,关键字存放如下




猜你喜欢

转载自blog.csdn.net/XiaoPANGXia/article/details/80764836