Hash算法有很多很多种类。
/**
* 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 一个质数
* @return hash结果
*/
public static int additiveHash(String key, int prime)
{
int hash, i;
for (hash = key.length(), i = 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; 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;
/**
* 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; i<key.length(); ++i)
{
hash += key.charAt(i);
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
// return (hash & M_MASK);
return hash;
}
/**
* Bernstein's hash
* @param key 输入字节数组
* @param level 初始hash常量
* @return 结果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(char[]key, ub4 len, char tab[256])
// {
// char hash;
// ub4 i;
// for (hash=len, i=0; i<len; ++i)
// hash=tab[hash^key[i]];
// return (hash);
// }
//// CRC Hashing,计算crc,具体代码见其他
// ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab[256])
// {
// ub4 hash, i;
// for (hash=len, i=0; i<len; ++i)
详细解决方案
Hash算法解决思路
热度:1427 发布时间:2013-02-26 00:00:00.0
相关解决方案
- 寻求MD5 HASH 解密算法
- .net 中的hasttable 和 数据结构算法里面的hash 排序 、hash 查找是不是同一个概念?解决方案
- hash 地图 存成<string,string>这样占空间吗
- 惯用的php代码,hash,split,unset
- hash map插入数据的有关问题
- hash join概念解决办法
- hash map有关问题
- 惯用的php代码,hash,split,unset
- SQL 揭示介绍 hash/merge/concat union
- Redis主要的五种数据结构及其操作,写了三种String,Hash,List
- hash id转换为key
- 4917: Hash Killer IV
- webpack中 hash contenthash chunkhash之间的区别
- 两个多项式的和——hash
- P5149 会议座位(逆序对 离散化 hash 归并排序)
- hash,kmp题组所有题解
- 2022.2.11(hash)
- 为何nested loop要求小表驱动,hash join又为何要求小表hashed?
- Dalvik VM Hash - implementation
- Dalvik VM Hash - how to use
- Dalvik vm Hash interface
- Ruby字元串、條件、循環、數組、Hash、類基本操作筆記
- Redis扫盲(hash/zset)
- Hash+折半枚举 51Nod1440 序列分解
- KMP+hash hdu3746 Cyclic Nacklace
- hash+dp打印路径 Codeforces615C Running Track
- hash codeforces567C Geometric Progression
- hash hdu1247 Hat’s Words
- permit过滤由任意键值组成的嵌套 Hash
- Hash Join 一定是选择小表作为驱动表吗