哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。

哈希函数用途广泛,这个程序给出了绝大多数常用的哈希函数。源程序来自:哈希算法_百度百科。

程序员可以根据自己的需要取用这些代码。

需要注意的是,有可能string类的方法已经发生变化。实际使用以下程序的时候,写成str.charAt(i)编译通过不了,改为str.at(i)则编译通过。

另外,这个代码并不是优化的代码,对字符串处理没有使用字符指针,处理效率低。

源程序如下:

class GeneralHashFunctionLibrary
{/*RSHash*/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.charAt(i);a = a * b;}return hash;}/*JSHash*/public long JSHash(String str){long hash = 1315423911;for(int i = 0; i < str.length(); i++)hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));return hash;}/*PJWHash*/public 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.charAt(i);if((test = hash & HighBits) != 0)hash = ((hash ^ (test >> ThreeQuarters)) & (~HighBits));}return hash;}/*ELFHash*/public long ELFHash(String str){long hash = 0;long x = 0;for(int i = 0; i < str.length(); i++){hash = (hash << 4) + str.charAt(i);if(( x = hash & 0xF0000000L) != 0)hash ^= ( x >> 24);hash &= ~x;}return hash;}/*BKDRHash*/public long BKDRHash(String str){long seed = 131;//31131131313131131313etc..long hash = 0;for(int i = 0; i < str.length(); i++)hash = (hash * seed) + str.charAt(i);return hash;}/*SDBMHash*/public long SDBMHash(String str){long hash = 0;for(int i = 0; i < str.length(); i++)hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;return hash;}/*DJBHash*/public long DJBHash(String str){long hash = 5381;for(int i = 0; i < str.length(); i++)hash = ((hash << 5) + hash) + str.charAt(i);return hash;}/*DEKHash*/public long DEKHash(String str){long hash = str.length();for(int i = 0; i < str.length(); i++)hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i);return hash;}/*BPHash*/public long BPHash(String str){long hash=0;for(int i = 0;i < str.length(); i++)hash = hash << 7 ^ str.charAt(i);return hash;}/*FNVHash*/public long FNVHash(String str){long fnv_prime = 0x811C9DC5;long hash = 0;for(int i = 0; i < str.length(); i++) {hash *= fnv_prime;hash ^= str.charAt(i);}return hash;}/*APHash*/long APHash(String str){long hash = 0xAAAAAAAA;for(int i = 0; i < str.length(); i++){if((i & 1) == 0)hash ^=((hash << 7) ^ str.charAt(i) ^ (hash >> 3));elsehash ^= (~((hash << 11) ^ str.charAt(i) ^ (hash >> 5)));}return hash;}
}

转载于:https://www.cnblogs.com/tigerisland/p/7564728.html

B00013 字符串哈希函数相关推荐

  1. 字符串哈希函数算法的PHP 实现

    恩...或许还有朋友不清楚字符串的哈希函数到底有什么用,这个用处呢,就是将字符串转换成数字,同时让所得数字尽量平均的分布在容器中,换句话说就是让字符串得到相同数字这种情况尽可能少的出现.当然咯...容 ...

  2. 字符串哈希函数(String Hash Functions)

    哈希函数举例 http://www.cse.yorku.ca/~oz/hash.html Node.js使用的哈希函数 https://www.npmjs.org/package/string-has ...

  3. 高级数据结构与算法 | 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

    文章目录 哈希 哈希函数 常见的哈希函数 字符串哈希函数 哈希冲突 闭散列的解决方法 开散列的解决方法 负载因子以及增容 对于闭散列 对于开散列结构 具体实现 哈希表(闭散列) 插入 查找 删除 完整 ...

  4. 常用哈希函数的比较及其实现

    基本概念 所谓完美哈希函数.就是指没有冲突的哈希函数.即对随意的 key1 != key2 有h(key1) != h(key2). 设定义域为X,值域为Y, n=|X|,m=|Y|.那么肯定有m&g ...

  5. 实操案例:字符串哈希表操作

    有考C语言可信编程认证的同事经常会问到,C语言库没有字符串哈希表操作,那考试遇到了怎么办.虽然历次考试的题目中没有必须要用到C语言哈希表的题目(至少我都能用常规C做出来),但是还需要防患未然,这里给出 ...

  6. mysql 字符串的hash函数_【转载】字符串Hash函数比较

    常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...

  7. 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶

    文章目录 哈希 哈希(散列)函数 常见的哈希函数 字符串哈希函数 哈希冲突 闭散列(开放地址法) 开散列(链地址法/拉链法) 负载因子以及增容 对于闭散列 对于开散列结构 具体实现 哈希表(闭散列) ...

  8. AcWing 841. 字符串哈希

    题目描述 分析: 字符串 hash 小试牛刀 我们在之前模拟散列时,设置的哈希函数为将一个元素(element, e)输入哈希函数中,输出是一个整数,而那时的 e e e 为一个有范围的整数.现在我们 ...

  9. ELFhash - 优秀的字符串哈希算法

    原 ELFhash - 优秀的字符串哈希算法 分类:算法杂论算法精讲数据结构 (1424)  (2) 1.字符串哈希: 我们先从字符串哈希说起 在很多的情况下,我们有可能会获得大量的字符串,每个字符串 ...

最新文章

  1. ArXiv 2020 年 Top10 论文 | 智源社区AI周刊#054
  2. MATLAB使用方法和程序设计,实验1 MATLAB使用方法和程序设计
  3. 记阿里的一次壮烈牺牲
  4. mysql5.7.12 64位解压版_mysql 5.7 64位 解压版安装
  5. 某网session覆盖导致重置密码漏洞
  6. springMVC 相对于 Structs 的优势
  7. c/c++ 编程试题
  8. 吕述望 计算机网络专家,特稿: 中科院吕述望教授:互联网名不符实
  9. 高级网络配置:Bond网络接口、Team网络接口和网桥
  10. 怎么进行软件需求分析
  11. 第二阶段冲刺——个人总结07
  12. C语言RSA大数运算库,[转载]RSA大数运算库  c++实现
  13. 中望cad文字显示问号怎么办_CAD文件打开后有很多问号怎么办
  14. 【经典面试题】实现平方根函数sqrt
  15. 竞争情报的网络信息源
  16. 漂亮的CSS背景颜色
  17. nodejs stream 经典解析
  18. BUUCTF misc 专题(83)从娃娃抓起
  19. Linux 下配置JDK 并运行springboot项目进行访问 Tomcat的安装
  20. python 动图处理_python图像处理-gif动图

热门文章

  1. python 导入自己写的类_python中自己的类不能被导入
  2. 2013_chengdu_onsite
  3. Go语言爬虫项目将结果写入MySql数据库
  4. python3安装教程配置配置阿里云
  5. Qt中的QByteArray和自定义结构体之间的相互转换
  6. 23. 合并K个排序链表
  7. jQuery学习笔记(二)—— 操作DOM元素
  8. mysql 两列互换
  9. Objective-C语言的动态性
  10. getBoundingClientRect说明