知识大全 Hash算法大全(java实现)
Posted 知
篇首语:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hash算法大全(java实现)相关的知识,希望对你有一定的参考价值。
Hash算法大全(java实现) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Hash算法有很多很多种类 具体的可以参考之前我写的Hash算法的一些分析 本处给大家提供一个集合了很多使用的Hash算法的类 应该可以满足不少人的需要的 Java代码/*** Hash算法大全<br>* 推荐使用FNV 算法* @algorithm None* @author Goodzzp * @lastEdit Goodzzp * @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 = ; 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= ; i<key length(); ++i) hash = (hash<< )^(hash>> )^key charAt(i); return (hash % prime);// return (hash ^ (hash>> ) ^ (hash>> ));
// 替代 // 使用 hash = (hash ^ (hash>> ) ^ (hash>> )) & mask;// 替代 hash %= prime;
/*** MASK值 随便找一个值 最好是质数*/static int M_MASK = x fed ;/*** 一次一个hash* @param key 输入字符串* @return 输出hash值*/public static int oneByOneHash(String key) int hash i; for (hash= i= ; i<key length(); ++i) hash += key charAt(i); hash += (hash << ); hash ^= (hash >> ); hash += (hash << ); hash ^= (hash >> ); hash += (hash << );// return (hash & M_MASK); return hash;
/*** Bernstein s hash* @param key 输入字节数组* @param level 初始hash常量* @return 结果hash*/public static int bernstein(String key) int hash = ; int i; for (i= ; i<key length(); ++i) hash = *hash + key charAt(i); return hash;
////// Pearson s Hash// char pearson(char[]key ub len char tab[ ])// // char hash;// ub i;// for (hash=len i= ; i<len; ++i)// hash=tab[hash^key[i]];// return (hash);//
//// CRC Hashing 计算crc 具体代码见其他// ub crc(char *key ub len ub mask ub tab[ ])// // ub hash i;// for (hash=len i= ; i<len; ++i)// hash = (hash >> ) ^ tab[(hash & xff) ^ key[i]];// return (hash & mask);//
/*** Universal Hashing*/public static int universal(char[]key int mask int[] tab) int hash = key length i len = key length; for (i= ; i<(len<< ); i+= ) char k = key[i>> ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; if ((k& x ) == ) hash ^= tab[i+ ]; return (hash & mask);
/*** Zobrist Hashing*/public static int zobrist( char[] key int mask int[][] tab) int hash i; for (hash=key length i= ; i<key length; ++i) hash ^= tab[i][key[i]]; return (hash & mask);
// LOOKUP // 见Bob Jenkins( ) c文件
// 位FNV算法static int M_SHIFT = ;/*** 位的FNV算法* @param data 数组* @return int值*/ public static int FNVHash(byte[] data) int hash = (int) L; for(byte b : data) hash = (hash * ) ^ b; if (M_SHIFT == ) return hash; return (hash ^ (hash >> M_SHIFT)) & M_MASK; /** * 改进的 位FNV算法 * @param data 数组 * @return int值 */ public static int FNVHash (byte[] data) final int p = ; int hash = (int) L; for(byte b:data) hash = (hash ^ b) * p; hash += hash << ; hash ^= hash >> ; hash += hash << ; hash ^= hash >> ; hash += hash << ; return hash; /** * 改进的 位FNV算法 * @param data 字符串 * @return int值 */ public static int FNVHash (String data) final int p = ; int hash = (int) L; for(int i= ;i<data length();i++) hash = (hash ^ data charAt(i)) * p; hash += hash << ; hash ^= hash >> ; hash += hash << ; hash ^= hash >> ; hash += hash << ; return hash;
[NextPage]
/** * Thomas Wang的算法 整数hash */ public static int intHash(int key) key += ~(key << ); key ^= (key >>> ); key += (key << ); key ^= (key >>> ); key += ~(key << ); key ^= (key >>> ); return key; /** * RS算法hash * @param str 字符串 */ public static int RSHash(String str) int b = ; int a = ; int hash = ;
for(int i = ; i < str length(); i++) hash = hash * a + str charAt(i); a = a * b;
return (hash & x FFFFFFF); /* End Of RS Hash Function */
/** * JS算法 */ public static int JSHash(String str) int hash = ;
for(int i = ; i < str length(); i++) hash ^= ((hash << ) + str charAt(i) + (hash >> ));
return (hash & x FFFFFFF); /* End Of JS Hash Function */
/** * PJW算法 */ public static int PJWHash(String str) int BitsInUnsignedInt = ; int ThreeQuarters = (BitsInUnsignedInt * ) / ; int OneEighth = BitsInUnsignedInt / ; int HighBits = xFFFFFFFF << (BitsInUnsignedInt OneEighth); int hash = ; int test = ;
for(int i = ; i < str length();i++) hash = (hash << OneEighth) + str charAt(i);
if((test = hash & HighBits) != ) hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));
return (hash & x FFFFFFF); /* End Of P J Weinberger Hash Function */
/** * ELF算法 */ public static int ELFHash(String str) int hash = ; int x = ;
for(int i = ; i < str length(); i++) hash = (hash << ) + str charAt(i); if((x = (int)(hash & xF L)) != ) hash ^= (x >> ); hash &= ~x;
return (hash & x FFFFFFF); /* End Of ELF Hash Function */
/** * BKDR算法 */ public static int BKDRHash(String str) int seed = ; // etc int hash = ;
for(int i = ; i < str length(); i++) hash = (hash * seed) + str charAt(i);
return (hash & x FFFFFFF); /* End Of BKDR Hash Function */
/** * SDBM算法 */ public static int SDBMHash(String str) int hash = ;
for(int i = ; i < str length(); i++) hash = str charAt(i) + (hash << ) + (hash << ) hash;
return (hash & x FFFFFFF); /* End Of SDBM Hash Function */
/** * DJB算法 */ public static int DJBHash(String str) int hash = ;
for(int i = ; i < str length(); i++) hash = ((hash << ) + hash) + str charAt(i);
return (hash & x FFFFFFF); /* End Of DJB Hash Function */
/** * DEK算法 */ public static int DEKHash(String str) int hash = str length();
for(int i = ; i < str length(); i++) hash = ((hash << ) ^ (hash >> )) ^ str charAt(i);
return (hash & x FFFFFFF); /* End Of DEK Hash Function */
/** * AP算法 */ public static int APHash(String str) int hash = ;
for(int i = ; i < str length(); i++) hash ^= ((i & ) == ) ? ( (hash << ) ^ str charAt(i) ^ (hash >> )) : (~((hash << ) ^ str charAt(i) ^ (hash >> )));
// return (hash & x FFFFFFF); return hash; /* End Of AP Hash Function */
/** * JAVA自己带的算法 */ public static int java(String str) int h = ; int off = ; int len = str length(); for (int i = ; i < len; i++) h = * h + str charAt(off++); return h;
cha138/Article/program/Java/hx/201311/25947相关参考
Java实现通用组合算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java实现通用组合算法
JAVA凸包算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 源码一JarvisMarchja
最近在面试遇到很多排序算法问题总结一下 定义数组如下 [java] int[]array=newint[]; int[]array=newint[]; 首先是插入排序 [java]
HITS算法Java实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! HITS算法是重要的链接
JAVA垃圾回收算法摘要 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 垃圾收集的算法分析 j
Java通用权限控制算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一种常用的权限控制算法的
Java扫雷算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 建立一个雷区可以用一个一个的JB
Java代码 插入排序: packagerututilalgorithmsupport; importrututilalgorithmSortUtil; publicclassInse
Java的垃圾回收之算法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 引言 Java的堆是一
知识大全 Java技术进阶 基于Java的IDEA加密算法探讨
Java技术进阶基于Java的IDEA加密算法探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!