cmph (C Minimal Perfect Hashing Library)个人理解及应用简介
来源:互联网 发布:linux可命令行以做什么 编辑:程序博客网 时间:2024/05/17 04:35
经我在作一个GTK手机输入法,大致的算法是用两个查找引擎,一级引擎是数字—拼音,而二级引擎是拼音—汉字,一级引擎是用树和链表,而二级引擎 是用的glib库哈西表来做得,但是我今天并不是想谈我所做得项目,我今天要说的是cpmh,首先还是先看一下这两个图片的对比吧:
Figure 1: (a) Perfect hash function. (b) Minimal perfect hash function.
第一附图是咱们用的普通的hash table,第二附是今天我所介绍的cmph,也就是Minimal Pfect Hash Functions的简称,用了这种方法查找,可以比普通的hash table占用更少的内存并切可以提高查找速度,相关资料http://cmph.sourceforge.net/。由于相关的资料非常常少,我目前只找到只有官方的这个资 料,所以学习起来还是比较费劲的,我现在想说一下我在应用过程中的大体流程:
第一:首先要建立一个.mph文件, 可以使用cmph里面的函数,具体见英文文档的example,我用的是命令,首先要有一个key的文件,用cmph -g 选项,可以自动创建一个.mph文件。例如有一个test的文件,那么会自动创建一个test.mph文件。
第二:创建的这个文件,把你的key值对应一个hash值,可以用cmph -v test 查看一下原test文件中的key对应的hash值。具体是怎么对应的,还是去查官方文档把,这里我也是不多说,但是结果就是上面的b图的效果。
第三:这时可以自己建一个数组A,数组的下标是你得到的每个key的hash值,而对应的结果可以是key对应的val值,比如:key : a b c,那么,他所对应的hash值可能是 a-》0;b-》1;c-》2;这样你可以写一个函数insert函数
insert{
int id = h(a);//去a对应的hash值
A[id]= val;//val是原本key所对应的那个东东,:)
}
这样大致的一个结构就建立起来了。
第四步:查找数据,就可以去数组中查找了
lookup {
int id = h(b);
return A[id];
}
这样就可以了,最后还是要说一点,就是手册中没有提到怎么编译带有cmph函数的程序,其实很简单,gcc test.c -o test `pkg-config --cflags --libs cmph`就可以了。
cmph官方文档中的例子里面还运用了很多cmph中的函数,可惜都没有介绍用法,只能大家看例子来猜测或者是看源码了。
- cmph (C Minimal Perfect Hashing Library)个人理解及应用简介
- Perfect hashing (And Minimal perfect hashing)
- 网页简介及个人理解
- Hibernate框架简介(个人总结及理解)
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- 幂等性 个人理解及应用
- Perfect Hashing(转载)
- Spark1.6新特性简介及个人的理解
- Spark1.6新特性简介及个人的理解
- C Runtime Library 理解
- Perfect Hashing VS. Bloom Filter
- 幂等性(等幂性) 个人理解及应用
- Mac OS X: 实用脚本程序(bash scripts)系列-6
- 问题
- Subvision SVN (svn的服务器端)安装教程2
- 直线的交点公式
- 几个数据库的JDBC
- cmph (C Minimal Perfect Hashing Library)个人理解及应用简介
- Javascript的Defer属性
- 歪论:中国为何谣言影响力大?
- C++程序设计之四书五经
- C++之模板和异常处理
- 分别用字符和ASCII码形式输出整数值65和66。这道题的答案是多少呢?
- Linux 手机进行探索:三星和沃达丰联合发布基于LiMo的社交智能手机。
- Mac OS X:在Windows里面使用命令行设置启动系统
- 计算机专业就业率最低: 正规军干不过游击队