再收集几个Hash函数的实现 - AlbertLi的专栏 - CSDNBlog
来源:互联网 发布:linux开放端口命令 编辑:程序博客网 时间:2024/06/12 08:17
// 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);
}
// JS Hash Function
unsigned int JSHash(char* str)
{
unsigned int hash = 1315423911;
while (*str)
{
hash ^= ((hash << 5) + (*str++) + (hash >> 2));
}
return (hash & 0x7FFFFFFF);
}
// 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);
}
// 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);
}
// 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);
}
// SDBM Hash Function
unsigned int SDBMHash(char* str)
{
unsigned int hash = 0;
while (*str)
{
hash = (*str++) + (hash << 6) + (hash << 16) - hash;
}
return (hash & 0x7FFFFFFF);
}
// DJB Hash Function
unsigned int DJBHash(char* str)
{
unsigned int hash = 5381;
while (*str)
{
hash += (hash << 5) + (*str++);
}
return (hash & 0x7FFFFFFF);
}
// 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);
}
本文转自
http://blog.csdn.net/AlbertLi/archive/2008/04/22/2313386.aspx
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);
}
// JS Hash Function
unsigned int JSHash(char* str)
{
unsigned int hash = 1315423911;
while (*str)
{
hash ^= ((hash << 5) + (*str++) + (hash >> 2));
}
return (hash & 0x7FFFFFFF);
}
// 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);
}
// 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);
}
// 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);
}
// SDBM Hash Function
unsigned int SDBMHash(char* str)
{
unsigned int hash = 0;
while (*str)
{
hash = (*str++) + (hash << 6) + (hash << 16) - hash;
}
return (hash & 0x7FFFFFFF);
}
// DJB Hash Function
unsigned int DJBHash(char* str)
{
unsigned int hash = 5381;
while (*str)
{
hash += (hash << 5) + (*str++);
}
return (hash & 0x7FFFFFFF);
}
// 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);
}
本文转自
http://blog.csdn.net/AlbertLi/archive/2008/04/22/2313386.aspx
- 再收集几个Hash函数的实现 - AlbertLi的专栏 - CSDNBlog
- 字符串hash算法比较 - AlbertLi的专栏 - CSDNBlog
- 再收集几个Hash函数的实现
- sscanf函数的高级用法 - khler的专栏 - CSDNBlog
- access_flags - raphaelxia的专栏 - CSDNBlog
- 框架 - Pascal的专栏 - CSDNBlog
- 函数调用堆栈变化分析 - quanming1119的专栏 - CSDNBlog
- DELPHI enablecontrols,disablecontrols函数 - 王伟权的专栏 - CSDNBlog
- C++中函数指针详解 - 冷秋魂的专栏 - CSDNBlog
- IBM Java Jvm GC实现内幕 - SnowFalcon的专栏 - CSDNBlog
- 利用匿名管道实现远程CMD - ToBeroOTer的专栏 - CSDNBlog
- 什么是COM组件 - liming0658的专栏 - CSDNBlog
- SQLServer2000数据类型 - jiangxianfu的专栏 - CSDNBlog
- 什么是vml - chenyq2008的专栏 - CSDNBlog
- java Date总结 - pengyajie的专栏 - CSDNBlog
- 解析“extern” - keen的专栏 - CSDNBlog
- Android快速入门 - jesun的专栏 - CSDNBlog
- CString 操作指南 - pinping1314的专栏 - CSDNBlog
- 简单数据加密算法
- 地震了?
- log4j配置说明
- 日常用语--打电话(整理)
- uclinux2.6(bf561)内核中的current_thread_info
- 再收集几个Hash函数的实现 - AlbertLi的专栏 - CSDNBlog
- 揭秘深圳炒房者:部分人贷款炒房月供二三十万
- 地震了。。。。。。。。。
- 找软件的注册码
- uclinux2.6(bf561)内核中的paging_init
- 谷歌联合金山推出"谷歌金山词霸"
- 防范应对QQ木马策略
- 启动时出现提示0xc00000ba错误的程序解决办法
- svn trunk/branches/tag