常见hash算法35454.doc

上传人:marr****208 文档编号:157003599 上传时间:2020-12-20 格式:DOC 页数:9 大小:42.50KB
返回 下载 相关 举报
常见hash算法35454.doc_第1页
第1页 / 共9页
常见hash算法35454.doc_第2页
第2页 / 共9页
常见hash算法35454.doc_第3页
第3页 / 共9页
常见hash算法35454.doc_第4页
第4页 / 共9页
常见hash算法35454.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《常见hash算法35454.doc》由会员分享,可在线阅读,更多相关《常见hash算法35454.doc(9页珍藏版)》请在金锄头文库上搜索。

1、/* Hash算法大全* 推荐使用FNV1算法* algorithm None* author Goodzzp 2006-11-20* lastEdit Goodzzp 2006-11-20 * editDetail Create*/public class HashAlgorithms/* 加法hash* param key 字符串* param prime 一个质数* return hash结果*/public static int additiveHash(String key, int prime) int hash, i; for (hash = key.length(), i =

2、0; i key.length(); i+) hash += key.charAt(i); return (hash % prime);/* 旋转hash* param key 输入字符串* param prime 质数* return hash值*/public static int rotatingHash(String key, int prime) int hash, i; for (hash=key.length(), i=0; ikey.length(); +i) hash = (hash28)key.charAt(i); return (hash % prime);/ retur

3、n (hash (hash10) (hash20);/ 替代:/ 使用:hash = (hash (hash10) (hash20) & mask;/ 替代:hash %= prime;/* MASK值,随便找一个值,最好是质数*/static int M_MASK = 0x8765fed1;/* 一次一个hash* param key 输入字符串* return 输出hash值*/public static int oneByOneHash(String key) int hash, i; for (hash=0, i=0; ikey.length(); +i) hash += key.ch

4、arAt(i); hash += (hash 6); hash += (hash 11); hash += (hash 15);/ return (hash & M_MASK); return hash;/* Bernsteins hash* param key 输入字节数组* param level 初始hash常量* return 结果hash*/public static int bernstein(String key) int hash = 0; int i; for (i=0; ikey.length(); +i) hash = 33*hash + key.charAt(i); r

5、eturn hash;/ Pearsons Hash/ char pearson(charkey, ub4 len, char tab256)/ / char hash;/ ub4 i;/ for (hash=len, i=0; ilen; +i) / hash=tabhashkeyi;/ return (hash);/ / CRC Hashing,计算crc,具体代码见其他/ ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab256)/ / ub4 hash, i;/ for (hash=len, i=0; i 8) tab(hash & 0xff)

6、keyi;/ return (hash & mask);/ /* Universal Hashing*/public static int universal(charkey, int mask, int tab) int hash = key.length, i, len = key.length; for (i=0; i(len3; if (k&0x01) = 0) hash = tabi+0; if (k&0x02) = 0) hash = tabi+1; if (k&0x04) = 0) hash = tabi+2; if (k&0x08) = 0) hash = tabi+3; if

7、 (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; 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 M_SHIFT) & M_MASK; /* * 改进的32位FNV算法

8、1 * param data 数组 * return int值 */ public static int FNVHash1(byte data) final int p = 16777619; int hash = (int)2166136261L; for(byte b:data) hash = (hash b) * p; hash += hash 7; hash += hash 17; hash += hash 5; return hash; /* * 改进的32位FNV算法1 * param data 字符串 * return int值 */ public static int FNVH

9、ash1(String data) final int p = 16777619; int hash = (int)2166136261L; for(int i=0;idata.length();i+) hash = (hash data.charAt(i) * p; hash += hash 7; hash += hash 17; hash += hash 5; return hash; /* * Thomas Wang的算法,整数hash */ public static int intHash(int key) key += (key 10); key += (key 6); key +

10、= (key 16); return key; /* * RS算法hash * param str 字符串 */ public static int RSHash(String str) int b = 378551; int a = 63689; int hash = 0; for(int i = 0; i str.length(); i+) hash = hash * a + str.charAt(i); a = a * b; return (hash & 0x7FFFFFFF); /* End Of RS Hash Function */ /* * JS算法 */ public static int JSHash(String str) int hash = 1315423911; for(int i = 0; i str.le

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号