各种经典hash算法
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
class HashLib
{
public:
long RSHash(string str)
{
int b = 378551;
int a = 63689;
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash = hash * a + str.c_str()[i];
a = a * b;
}
return hash;
}
long JSHash(string str)
{
long hash = 1315423911;
for(int i = 0; i < str.length(); i++)
{
hash ^= ((hash << 5) + str.c_str()[i] + (hash >> 2));
}
return hash;
}
long PJWHash(string str)
{
long BitsInUnsignedInt = (long)(4 * 8);
long ThreeQuarters = (long)((BitsInUnsignedInt * 3) / 4);
long OneEighth = (long)(BitsInUnsignedInt / 8);
long HighBits = (long)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);
long hash = 0;
long test = 0;
for(int i = 0; i < str.length(); i++)
{
hash = (hash << OneEighth) + str.c_str()[i];
if((test = hash & HighBits) != 0)
{
hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));
}
}
return hash;
}
long ELFHash(string str)
{
long hash = 0;
long x = 0;
for(int i = 0; i < str.length(); i++)
{
hash = (hash << 4) + str.c_str()[i];
if((x = hash & 0xF0000000L) != 0)
{
hash ^= (x >> 24);
}
hash &= ~x;
}
return hash;
}
long BKDRHash(string str)
{
long seed = 131; // 31 131 1313 13131 131313 etc..
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash = (hash * seed) + str.c_str()[i];
}
return hash;
}
long SDBMHash(string str)
{
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash = str.c_str()[i] + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
long DJBHash(string str)
{
long hash = 5381;
for(int i = 0; i < str.length(); i++)
{
hash = ((hash << 5) + hash) + str.c_str()[i];
}
return hash;
}
long DEKHash(string str)
{
long hash = str.length();
for(int i = 0; i < str.length(); i++)
{
hash = ((hash << 5) ^ (hash >> 27)) ^ str.c_str()[i];
}
return hash;
}
long BPHash(string str)
{
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash = hash << 7 ^ str.c_str()[i];
}
return hash;
}
long FNVHash(string str)
{
long fnv_prime = 0x811C9DC5;
long hash = 0;
for(int i = 0; i < str.length(); i++)
{
hash *= fnv_prime;
hash ^= str.c_str()[i];
}
return hash;
}
long APHash(string str)
{
long hash = 0xAAAAAAAA;
for(int i = 0; i < str.length(); i++)
{
if ((i & 1) == 0)
{
hash ^= ((hash << 7) ^ str.c_str()[i] ^ (hash >> 3));
}
else
{
hash ^= (~((hash << 11) ^ str.c_str()[i] ^ (hash >> 5)));
}
}
return hash;
}
};
int main(int argc, char **argv)
{
string a = "h";
HashLib hashlib;
stringstream tmp;
for(int i = 0; i < 10 ; i++)
{
cout << "----------------------"<< endl;
tmp << i;
a = tmp.str();
cout << a << endl;
cout << hashlib.JSHash(a) << endl;
cout << hashlib.RSHash(a) << endl;
cout << hashlib.PJWHash(a) << endl;
cout << hashlib.ELFHash(a) << endl;
cout << hashlib.BKDRHash(a) << endl;
cout << hashlib.SDBMHash(a) << endl;
cout << hashlib.DEKHash(a) << endl;
cout << hashlib.BPHash(a) << endl;
cout << hashlib.FNVHash(a) << endl;
cout << hashlib.APHash(a) << endl;
}
return 2;
}
分享到:
相关推荐
MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...
6. 测试:编写测试用例覆盖各种输入情况,包括边缘和异常情况,确保算法的正确性和鲁棒性。 这个项目提供的C语言源码可以作为学习和理解哈希算法的实例,帮助开发者深入理解这些算法的工作原理,并能够在自己的项目...
Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!
python版本的各种hash算法
在计算机科学中,哈希(Hash)算法是一种用于将任意长度的数据映射为固定长度输出的函数。这种输出通常称为哈希值或消息摘要。在Java编程语言中,实现哈希算法可以方便地用于数据验证、查找表以及密码存储等多种用途...
在IT领域,Hash算法是一种广泛应用于数据验证、存储和比较的技术。它将任意长度的数据转换成固定长度的输出,通常称为Hash值或指纹。在这个压缩包中,我们重点关注的是图像的相似度Hash算法,特别是平均哈希算法(a...
Java实现GeoHash算法是一种在IT领域中用于地理位置数据存储和检索的技术。GeoHash将经纬度坐标转换为字符串,使得地理位置可以被高效地索引和查询。这种算法利用了空间分割和编码策略,使得相邻的位置在编码后具有...
### 经典Hash算法概述与实现 #### 一、引言 哈希算法在计算机科学领域扮演着极其重要的角色,特别是在数据检索、信息安全以及数据完整性校验等方面。它能够将任意长度的数据转换成一个固定长度的哈希值,这一过程在...
一个hash算法的工具类,里面包含了一些常用的hash算法
GeoHash算法是一种基于地理坐标的分布式空间索引技术,它通过将地球表面的经纬度坐标转化为可比较的字符串,使得我们可以高效地进行地理位置的搜索、范围查询以及邻居查找等操作。这种算法尤其适用于大数据和分布式...
"Hash算法MD5实验报告材料" 本实验报告主要介绍了Hash算法MD5的实验报告,旨在通过实际编程来了解MD5算法的加密和解密过程,并加深对Hash算法的认识。 一、Hash算法的定义 Hash算法是一种将输入数据转换为固定...
### Hash算法相关介绍 在计算机科学领域,哈希(Hash)是一种将任意长度的数据映射为固定长度数据的技术。哈希算法广泛应用于多种场景中,包括但不限于数据完整性验证、密码存储、快速查找等。本文主要介绍了几种...
Geohash算法实现,经纬度到geohash编码的实现
哈希(Hash)算法在计算机科学中扮演着重要的角色,特别是在数据存储、文件校验、信息安全等领域。本文将深入探讨哈希算法的原理,并提供一个简单的C语言实现示例。 哈希算法,又称为散列函数,是一种将任意长度的...
### Hash算法大全 #### 一、引言 Hash算法是一种将任意长度的数据转换为固定长度输出的方法,这种输出通常称为Hash值或Hash码。在计算机科学领域,Hash算法被广泛应用于数据查找、密码存储以及数据完整性校验等多...
《深入理解各种Hash算法与hashCodeUtil》 在计算机科学中,Hash算法扮演着至关重要的角色。它们是一种将任意长度的数据转换为固定长度输出的函数,通常用于数据索引、快速查找、消息摘要等场景。本篇文章将深入探讨...
Universal Hashing 是一种通用的 Hash 算法,它可以用于各种类型的数据。Universal Hashing 算法的实现代码如下: ```java public static int universal(String key) { // 实现 Universal Hashing 算法的代码 } ```...