字符串HASH函數

百度,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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章