版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多膛爐焙燒工安全知識測試考核試卷含答案
- 茶葉加工工風險評估測試考核試卷含答案
- 熱壓延工發(fā)展趨勢競賽考核試卷含答案
- 鍋爐輔機檢修工7S考核試卷含答案
- 液晶顯示器件彩膜制造工安全培訓(xùn)模擬考核試卷含答案
- 礦井泵工崗前班組評比考核試卷含答案
- 導(dǎo)獵員崗前創(chuàng)新意識考核試卷含答案
- 卸車指揮工崗前實操評優(yōu)考核試卷含答案
- 超重型汽車列車掛車工崗前設(shè)備維護考核試卷含答案
- 道路貨運站務(wù)員安全專項測試考核試卷含答案
- 全科醫(yī)生基層實踐個人總結(jié)
- 批生產(chǎn)記錄的培訓(xùn)
- 靜脈輸液工具的合理選擇患者篇課件
- 真空冷凍干燥機操作手冊
- MOOC 電子線路設(shè)計、測試與實驗(一)-華中科技大學(xué) 中國大學(xué)慕課答案
- 醫(yī)學(xué)裝備管理與使用理論考核試題及答案
- 夾膠玻璃檢驗報告
- 黑龍江省哈爾濱市2023-2024學(xué)年高一上學(xué)期學(xué)業(yè)質(zhì)量檢測化學(xué)試卷(含答案解析)
- 佳能EOS2000D攝影機使用手冊
- 九宮格數(shù)獨(入門級-30題)
- 醫(yī)院產(chǎn)科培訓(xùn)課件:《妊娠期宮頸疾病的診治策略》
評論
0/150
提交評論