最有用的两个
unsigned long long hash;
// hash使用unsigned long long,超过了unsigned long long就相当于取模
//常用1
1 SDBMHash
int SDBMHash(char *str)
{
hash = 0;
while (*str) hash = (*str++) + (hash << 6) + (hash << 16) - hash;
return hash;
}
//常用2
int BKDRHash(char *str)
{
int seed = 131;
int hash = 0;
while (*str) hash = hash * seed + (*str++);
return hash;
}
常见的8个
const int MAXN = 1000003;
//常用 1
1 SDBMHash
unsigned int SDBMHash(char *str)
{
unsigned int hash = 0;
while (*str)
{
// equivalent to: hash = 65599*hash + (*str++);
hash = (*str++) + (hash << 6) + (hash << 16) - hash;
}
return (hash & 0x7FFFFFFF)%MAXN;
}
2 RS Hash Function
unsigned int RSHash(char *str)
{
unsigned int b = 378551;
unsigned int a = 63689;
unsigned int hash = 0;
while (*str)
{
hash = hash * a + (*str++);
a *= b;
}
return (hash & 0x7FFFFFFF)%MAXN;
}
3 JS Hash Function
unsigned int JSHash(char *str)
{
unsigned int hash = 1315423911;
while (*str)
{
hash ^= ((hash << 5) + (*str++) + (hash >> 2));
}
return (hash & 0x7FFFFFFF)%MAXN;
}
4 P. J. Weinberger Hash Function
unsigned int PJWHash(char *str)
{
unsigned int BitsInUnignedInt = (unsigned int)(sizeof(unsigned int) * 8);
unsigned int ThreeQuarters = (unsigned int)((BitsInUnignedInt * 3) / 4);
unsigned int OneEighth = (unsigned int)(BitsInUnignedInt / 8);
unsigned int HighBits = (unsigned int)(0xFFFFFFFF) << (BitsInUnignedInt - OneEighth);
unsigned int hash = 0;
unsigned int test = 0;
while (*str)
{
hash = (hash << OneEighth) + (*str++);
if ((test = hash & HighBits) != 0)
{
hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits));
}
}
return (hash & 0x7FFFFFFF)%MAXN;
}
5 ELF Hash Function
unsigned int ELFHash(char *str)
{
unsigned int hash = 0;
unsigned int x = 0;
while (*str)
{
hash = (hash << 4) + (*str++);
if ((x = hash & 0xF0000000L) != 0)
{
hash ^= (x >> 24);
hash &= ~x;
}
}
return (hash & 0x7FFFFFFF)%MAXN;
}
//常用2
6 BKDR Hash Function
unsigned int BKDRHash(char *str)
{
unsigned int seed = 131; // 31 131 1313 13131 131313 etc..
unsigned int hash = 0;
while (*str)
{
hash = hash * seed + (*str++);
}
return (hash & 0x7FFFFFFF)%MAXN;
}
7 DJB Hash Function
unsigned int DJBHash(char *str)
{
unsigned int hash = 5381;
while (*str)
{
hash += (hash << 5) + (*str++);
}
return (hash & 0x7FFFFFFF)%MAXN;
}
8 AP Hash Function
unsigned int APHash(char *str)
{
unsigned int hash = 0;
int i;
for (i=0; *str; i++)
{
if ((i & 1) == 0)
{
hash ^= ((hash << 7) ^ (*str++) ^ (hash >> 3));
}
else
{
hash ^= (~((hash << 11) ^ (*str++) ^ (hash >> 5)));
}
}
return (hash & 0x7FFFFFFF)%MAXN;
}
分享到:
相关推荐
用C语言实现常用的字符串哈希函数,比如RSHash、JSHash、PJWHash、FNVHash等
实验设计优化字符串哈希函数 比较经典字符串哈希函数 采用斐波那契函数思想
几个经典的字符串哈希函数及测试.rar
dwHashType = 0时计算的哈希值用于确定字符串在哈希表中的位置; dwHashType = 1,dwHashType = 2时计算的哈希值用于验证字符串 返回值:字符串的哈希值 */ unsigned long HashString(char *lpszString, ...
hash字符串函数总结,挥泪大放送,绝对全面,各类总结。
用C++实现的完美哈希函数,打印C语言的32个关键字的哈希值,并且判断所输入的字符串是否为关键字
用三个哈希值处理字符串,解决其在矩阵中出现次数问题,利用了矩阵的旋转
本文实例讲述了C#计算字符串哈希值(MD5、SHA)的方法。分享给大家供大家参考。具体如下: 一、关于本文 本文中是一个类库,包括下面几个函数: ① 计算32位MD5码(大小写):Hash_MD5_32 ② 计算16位MD5码(大小写...
hsh是一个完全用Rust编写的简单的字符串哈希CLI,它支持多种哈希函数。 它主要依靠来执行哈希。 支持的哈希函数 (GOST R 34.11-9)(同时带有“测试参数”和CryptoPro ) Grøstl224 Grøstl256 Grøstl384 ...
利用三个哈希值,和矩阵的旋转解决字符串问题,已给定部分字符串,求其出现概率
一个使用多种常见哈希算法来哈希字符串、文件和网络资源的小小的工具
string-hash获取字符串的哈希值使用非加密哈希函数FNV-1a。 与Java的String#hashCode()类似。 安装$ npm install @ sindresorhus / string-hash用法const stringHash string-hash获取字符串的哈希值使用非加密...
加密解密字符串.exe huanyin下载
字符串Hash函数把一个任意长度的字符串映射成一个非负整数,并且其冲突概率几乎为 000。 取一固定值 PPP,把字符串看作 PPP 进制数,并分配一个大于 000 的数值,代表每种字符。一般来说,我们分配的数值都远小于P。...
各种好的、快速的哈希函数 固定大小的内存分配器('mempools') “C”中的类型安全模板:链表、向量、队列 单生产者单消费者无锁有界队列 多生产者、多消费者无锁有界队列 阻塞、有界、生产者-消费者队列 线程池...
Hash 函数 数据 1 数据 2 数据 3 数据 4 数据 1 得分 数据 2 得分 数据 3 得分 数据 4 得分 平均分其中数据 1 为 100000 个
6 字符串哈希算法:MD5 SHA1 RIPEMD160 SHA256 Tiger SHA512 Whirlpool CRC32 7 URI编码解码 8 Base64编码解码 里面包含pb的调用demo">1 以非图片方式在Datawindow中显示QR二维码 2 GBK和UTF 8编码相互转换 3 加密...
终端中哈希函数的动画。 视频: : 用法 只需对要散列的数据运行sha256.rb脚本。 # simple ruby sha256.rb abc # hash binary or hex data by using `0b` or `0x` prefixes ruby sha256.rb 0b01100001 ruby sha256....
6 字符串哈希算法:MD5 SHA1 RIPEMD160 SHA256 Tiger SHA512 Whirlpool CRC32 7 URI编码解码 8 Base64编码解码 里面包含pb的调用demo">1 以非图片方式在Datawindow中显示QR二维码 2 GBK和UTF 8编码相互转换 3 加密...