字符串Hash函數(ELFhash)


     百度,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;
}

關鍵還是要在實際應用中才能更深刻的把這個算法理解。如果 感興趣,可以看我 ACM 字符串 標簽里的poj2503題解,這題可以用ELFhash函數來做。也不算很難吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM