字符串HASH函数

来源:互联网 发布:淘宝主图白底图要求 编辑:程序博客网 时间:2024/06/06 03:59
百度,google了很多关于这个函数的用法。都大同小异,都只是给出了代码,我觉得对我这个初学者来说有点难理解。所以,在这,我综合一下我搜到的知识,把它再加深下印象吧。

    ELFhash函数关键是要取得字符串对应的hash值。(别人的分析:它对于长字符串和短字符串都很有效,字符串中每个字符都有同样的作用,它巧妙地对字符的ASCII编码值进行计算,ELFhash函数对于能够比较均匀地把字符串分布在散列表中。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。)

    ELFhash():参考http://blog.chinaunix.net/uid-24683784-id-3061386.html

复制代码
int ELFhash(char *key){    unsigned long h=0;    unsigned long x=0;    while(*key)    {        h=(h<<4)+(*key++);  //h左移4位,当前字符ASCII存入h的低四位                if( (x=h & 0xF0000000L)!=0)        { //如果最高位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出          //因此要有如下处理          h^=(x>>24);          //清空28~31位          h&=~x;        }    }    return h % N;}
原创粉丝点击