常見hash算法_第1頁
常見hash算法_第2頁
常見hash算法_第3頁
常見hash算法_第4頁
常見hash算法_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/* Hash算法大全<br>* 推薦使用FNV1算法* algorithm None* author Goodzzp 2006-11-20* lastEdit Goodzzp 2006-11-20 * editDetail Create*/public class HashAlgorithms/* 加法hash* param key 字符串* param prime 一個質(zhì)數(shù)* return hash結(jié)果*/public static int additiveHash(String key, int prime)   int hash, i; 

2、60; for (hash = key.length(), i = 0; i < key.length(); i+)    hash += key.charAt(i);   return (hash % prime);/* 旋轉(zhuǎn)hash* param key 輸入字符串* param prime 質(zhì)數(shù)* return hash值*/public static int rotatingHash(String key, int prime)   int hash, i;   for (hash=key.

3、length(), i=0; i<key.length(); +i)     hash = (hash<<4)(hash>>28)key.charAt(i);   return (hash % prime);/   return (hash (hash>>10) (hash>>20);/ 替代:/ 使用:hash = (hash (hash>>10) (hash>>20) & mask;/ 替代:hash %= prime;/*

4、MASK值,隨便找一個值,最好是質(zhì)數(shù)*/static int M_MASK = 0x8765fed1;/* 一次一個hash* param key 輸入字符串* return 輸出hash值*/public static int oneByOneHash(String key)   int   hash, i;   for (hash=0, i=0; i<key.length(); +i)        hash += key.charAt(i);  

5、;   hash += (hash << 10);     hash = (hash >> 6);      hash += (hash << 3);   hash = (hash >> 11);   hash += (hash << 15);/   return (hash & M_MASK);   return hash;/* Bernstein

6、's hash* param key 輸入字節(jié)數(shù)組* param level 初始hash常量* return 結(jié)果hash*/public static int bernstein(String key)   int hash = 0;   int i;   for (i=0; i<key.length(); +i) hash = 33*hash + key.charAt(i);   return hash;/ Pearson's Hash/ char pearson(charkey, ub

7、4 len, char tab256)/ /   char hash;/   ub4 i;/   for (hash=len, i=0; i<len; +i) /     hash=tabhashkeyi;/   return (hash);/ / CRC Hashing,計算crc,具體代碼見其他/ ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab256)/ /   ub4 hash, i;/ &

8、#160; for (hash=len, i=0; i<len; +i)/     hash = (hash >> 8) tab(hash & 0xff) keyi;/   return (hash & mask);/ /* Universal Hashing*/public static int universal(charkey, int mask, int tab)   int hash = key.length, i, len = key.length; 

9、0; for (i=0; i<(len<<3); i+=8)        char k = keyi>>3;     if (k&0x01) = 0) hash = tabi+0;     if (k&0x02) = 0) hash = tabi+1;     if (k&0x04) = 0) hash = tabi+2;   &#

10、160; if (k&0x08) = 0) hash = tabi+3;     if (k&0x10) = 0) hash = tabi+4;     if (k&0x20) = 0) hash = tabi+5;     if (k&0x40) = 0) hash = tabi+6;     if (k&0x80) = 0) hash = tabi+7;    &

11、#160; return (hash & mask);/* Zobrist Hashing*/ public static int zobrist( char key,int mask, int tab)   int hash, i;   for (hash=key.length, i=0; i<key.length; +i)     hash = tabikeyi;   return (hash & mask);/ LOOKUP3 / 見Bob Jenkins(3).c文

12、件/ 32位FNV算法static int M_SHIFT = 0;/* 32位的FNV算法* param data 數(shù)組* return int值*/    public static int FNVHash(byte data)            int hash = (int)2166136261L;        for(byte b : data)   

13、         hash = (hash * 16777619) b;        if (M_SHIFT = 0)            return hash;        return (hash (hash >> M_SHIFT) &

14、M_MASK;        /*     * 改進的32位FNV算法1     * param data 數(shù)組     * return int值     */    public static int FNVHash1(byte data)         

15、0;  final int p = 16777619;        int hash = (int)2166136261L;        for(byte b:data)            hash = (hash b) * p;        hash +=

16、hash << 13;        hash = hash >> 7;        hash += hash << 3;        hash = hash >> 17;        hash += hash << 5;  

17、0;     return hash;        /*     * 改進的32位FNV算法1     * param data 字符串     * return int值     */    public static int FNVHash1(String data)   

18、         final int p = 16777619;        int hash = (int)2166136261L;        for(int i=0;i<data.length();i+)            hash = (hash data.

19、charAt(i) * p;        hash += hash << 13;        hash = hash >> 7;        hash += hash << 3;        hash = hash >> 17;   

20、     hash += hash << 5;        return hash;        /*     * Thomas Wang的算法,整數(shù)hash     */     public static int intHash(int key)     &#

21、160;    key += (key << 15);      key = (key >>> 10);      key += (key << 3);      key = (key >>> 6);      key += (key << 11);    

22、  key = (key >>> 16);      return key;        /*     * RS算法hash     * param str 字符串     */    public static int RSHash(String str)     &

23、#160;      int b    = 378551;        int a    = 63689;        int hash = 0;       for(int i = 0; i < str.length(); i+)    

24、             hash = hash * a + str.charAt(i);          a    = a * b;              return (hash & 0x7FFFFFFF);  

25、      /* End Of RS Hash Function */    /*     * JS算法     */    public static int JSHash(String str)           int hash = 1315423911;     

26、60; for(int i = 0; i < str.length(); i+)                 hash = (hash << 5) + str.charAt(i) + (hash >> 2);              return (hash & 0x7FFFFFFF)

27、;        /* End Of JS Hash Function */    /*     * PJW算法     */    public static int PJWHash(String str)            int BitsInUnsignedInt = 32; &

28、#160;      int ThreeQuarters     = (BitsInUnsignedInt * 3) / 4;        int OneEighth         = BitsInUnsignedInt / 8;        int HighBits &#

29、160;        = 0xFFFFFFFF << (BitsInUnsignedInt - OneEighth);        int hash              = 0;        int test  &#

30、160;           = 0;       for(int i = 0; i < str.length();i+)                 hash = (hash << OneEighth) + str.charAt(i);  

31、60;       if(test = hash & HighBits) != 0)                       hash = ( hash (test >> ThreeQuarters) & (HighBits);      

32、;                  return (hash & 0x7FFFFFFF);        /* End Of P. J. Weinberger Hash Function */    /*     * ELF算法     */  &#

33、160; public static int ELFHash(String str)            int hash = 0;        int x    = 0;       for(int i = 0; i < str.length(); i+)      

34、           hash = (hash << 4) + str.charAt(i);          if(x = (int)(hash & 0xF0000000L) != 0)                  

35、60;    hash = (x >> 24);             hash &= x;                        return (hash & 0x7FFFFFFF); &#

36、160;      /* End Of ELF Hash Function */    /*     * BKDR算法     */    public static int BKDRHash(String str)            int seed = 131; / 31 131 1313 13131 1313

37、13 etc.        int hash = 0;       for(int i = 0; i < str.length(); i+)                 hash = (hash * seed) + str.charAt(i);     &#

38、160;        return (hash & 0x7FFFFFFF);        /* End Of BKDR Hash Function */    /*     * SDBM算法     */    public static int SDBMHash(String str)    &

39、#160;       int hash = 0;       for(int i = 0; i < str.length(); i+)                 hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash; &#

40、160;            return (hash & 0x7FFFFFFF);        /* End Of SDBM Hash Function */    /*     * DJB算法     */    public static int DJBHash(String st

41、r)           int hash = 5381;       for(int i = 0; i < str.length(); i+)                 hash = (hash << 5) + hash) + str.charAt(i); 

42、60;            return (hash & 0x7FFFFFFF);        /* End Of DJB Hash Function */    /*     * DEK算法     */    public static int DEKHash(String str)

43、            int hash = str.length();       for(int i = 0; i < str.length(); i+)                 hash = (hash << 5) (hash >> 27) st

44、r.charAt(i);              return (hash & 0x7FFFFFFF);        /* End Of DEK Hash Function */    /*     * AP算法     */    public static int APHash(String str)            int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論