Hash

来源:互联网 发布:淘宝模特拍摄 下载 编辑:程序博客网 时间:2024/05/23 20:15

Hash根据我的理解就是将一串字符或一串数字经过hash函数的处理后

得以储存下来使得后面的查找方便又快捷,是一种用空间换时间的方式。

常用的hash函数:可以将key值或它的取余(通常用质数),如果实现知

道数据的格式的话可以进行分析,还有平方求和法和折叠法。

如果是字符串的话可以使用BKDRHash函数

unsigned int do_hash(char a[]){            unsigned int seed=131;            unsigned int hash=0;            int t=0;            for(char i=a[t];i!='\0';i=a[t]){                        hash=hash*seed+i;                        t++;            }            return hash%mod;}

如果是全排列可以用康托展开 : http://blog.csdn.net/zhongkeli/article/details/6966805

当然,大多数的Hash函数都会造成不可避免的冲突,即do_hash(a)=do_hash(b);这时可以

用开放地址法和拉链法避免冲突所带来的影响。

开放地址法: http://blog.csdn.net/w_fenghui/article/details/2010387

拉链法类似于图的邻接链表,在同一hash[ ]下开多个单位格储存冲突,查找则是一一查找。

 

 

1 0