完美哈希函数(Perfect Hash Function)

原创 2007年08月05日 18:09:00
  
什么是完美哈希函数
 
完美哈希函数(Perfect Hash Function,简称PHF就是没有冲突的哈希函数,也就是,函数 H 将 N 个 KEY 值映射到 M 个整数上,这里 M>=N ,而且,对于任意的 KEY1 ,KEY2 ,H( KEY1 ) != H( KEY2 ) ,并且,如果 M = = N ,则 H 是最小完美哈希函数(Minimal Perfect Hash Function,简称MPHF
 
什么时候使用PHFMPHF
 
通常情况下,PHF或MPHF是针对静态集合的。也就是,在使用PHF或MPHF时,所有的 KEY 值是事先已知并且固定的。不过,这里有针对动态集合的一个算法(我没有仔细看,不敢肯定)。
 
使用PHFMPHF的一般流程
 
1.         (准备阶段)将已知的所有的 KEY 值传给PHF或MPHF生成算法,生成PHF或MPHF以及相应的数据;
2.         (使用阶段)调用已有的PHF或MPHF以及相应的数据快速计算哈希值并进行相应的操作。
其实在实际使用中我们只关心步骤2,但步骤1的生成算法却是PHF或MPHF的关键。
 
PHFMPHF生成程序库
 
gperf
GNU的完美哈希函数生成程序,可以生成PHF和MPHF,生成MPHF时和输入数据以及参数设置的关系比较大。使用的应该是比较简单的算法,生成的效率不高,当数据量大时,程序就没什么反应了。生成的结果是代码(里面包含有数据,直接组织在代码里),移植性非常好。很多编译器对保留字的处理都采用gperf来建立完美哈希函数。Windows版的可执行文件可以从这里下载,源代码可以从这里下载,一篇介绍论文在这里,说明书在这里,说明书中文翻译在这里
易用性:                            5
稳定性:                            5
移植性:                            5
效率(针对大数据量):     2
MPHF:                             2
 
CMPH
巴西的这个哥们Fabiano C. Botelho发了很多MPHF方面的论文。CMPH应该他和其他几个人开发的开源的生成MPHF的程序库。这里面封装了4个算法,而且设计了一个程序框架(搞不懂他们为什么要设计这样一个框架,用MPHF的人不会像他们做研究那样会一次使用那么多个算法的,而这样一个框架明显增加了使用的难度)。里面有几个算法是针对大数据量的,但简单试了试,发现并不像他们论文里宣称的那样高效,而且由于是一个框架,生成的MPHF并不能直接脱离他们的环境来使用。这里是他们在SourceForge上的链接。
易用性:                            3
稳定性:                            2
移植性:                            2
效率(针对大数据量):     2
MPHF:                             5
 
mph
又一个牛人写的生成MPHF的算法,注意了,他写这个纯粹是为了好玩,考!
简单试了试,可以直接生成代码,但不是很好用,针对大数据量效率也不行。
易用性:                            3
稳定性:                            3
移植性:                            4
效率(针对大数据量):     3
MPHF:                             5
 
无名
又又一个牛人写的生成MPHF的算法,比较好用,可以处理大数据量的集合,而且比较有特色的是关键字不仅仅可以是字符串,还可以是整数等。
易用性:                            5
稳定性:                            5
移植性:                            4
效率(针对大数据量):     5
MPHF:                             5
 
perfect_hash.py
以上都是用C/C++来实现的PHFMPHF生成程序考,这是一个用Python实现的MPHF生成程序。还是比较好用的,遗憾的是对大数据量效率不行。
易用性:                            5
稳定性:                            5
移植性:                            4
效率(针对大数据量):     3
MPHF:                             5
 
PHFMPHF生成算法
我一贯坚持的是拿来主义(只要不存在法律和道德风险),所以对PHFMPHF的生成算法我只是浅尝辄止,不敢在这里唧唧歪歪。下面给出一些链接,想研究这些算法好好看这些论文吧。论文按大概时间顺序排列,最新的在最前面。
A Practical Minimal Perfect Hashing Method
An Approach for Minimal Perfect Hash Functions for Very Large Databases
A New algorithm for constructing minimal perfect hash functions
A optimal algorithm to generating minimal perfect hash functions
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Perfect Hashing VS. Bloom Filter

Perfect Hashing VS. Bloom Filter在Network Applications of Bloom Filters: A Survey一文中,作者提到了一种基于Perfect...

对《算法导论》完全散列(perfect hashing)的分析

完全散列将关键字通过一级散列函数h1和二级散列函数h2后映射到二级散列中,其中,关键字个数等于桶数(n=m),二级散列的大小N(T[i])为关键字个数的平方,用以保证完全O(n)的存储空间,以及O(1...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

HBase总结(十八)Hbase rowkey设计一

hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。 1.ro...

HBase RowKey的设计原则

HBase是三维有序存储的,三维指的是:RowKey(行健)、column key(columnFamily和qualifier)、TimeStamp(时间戳),通过这三个维度我们可以对HBase中的...

MSDN 错误,不能使用解决办法

今天用MSDN查个东西,居然显示如下页面:    File Association Windows has the following information about this Protocol....

HBase学习之五:HBase的RowKey设计原则

HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定...

大数据性能调优之HBase的RowKey设计

1 概述 HBase是一个分布式的、面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式。 既然HBase是...

大数据解决方案核心的核心 —— Map技术

大数据处理利器 专利算法 对于c++程序来说 map的使用无处不在。影响程序性能的瓶颈也往往是map的性能。尤其在大数据情况下,以及业务关联紧密而无法实现数据分发和并行处理的情况。map的性能就成了最...
  • pww71
  • pww71
  • 2014-05-06 11:51
  • 10246

转一篇Systemverilog的一个牛人总结

Systemverilog 数据类型 l       合并数组和非合并数组 1)合并数组: 存储方式是连续的,中间没有闲置空间。 例如,32bit的寄存器,可以看成是4个8bit的数据,或者也可以看...

systemverilog数据类型

systemverilog兼容一些c中的数据类型,也增加了一些特有的数据x
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)