关于Hash的几种常用算法
来源:互联网 发布:黄光裕入狱知乎 编辑:程序博客网 时间:2024/06/16 23:54
1 RSHash
/* 【算法】RSHash(因Robert Sedgwicks在其《Algorithms in C》一书中展示而得名) * 【说明】63689和378551都是质数,之所以取这两个数,我想是因为抗碰撞小(散列分布均匀) * 【时间】祁俊辉->2017.5.17 * */public class RSHash {//RSHash算法static long RS_Hash(String str){int a=63689;int b=378551;long hash=0;for(int i=0;i<str.length();i++){hash=hash*a+str.charAt(i);//System.out.println(hash);a=a*b;//System.out.println(a);}return (hash & 0x7FFFFFFF);//32位//return (hash & 0x7FFFFFFFFFFFFFFFL);//64位}//主函数public static void main(String[] args) {System.out.println(Long.toBinaryString(RS_Hash("祁俊辉")));}}
2 BKDRHash
/* 【算法】BKDRHash(Java字符串类的Hash算法,累成因子取31) * 【说明】累成因子可以为31/131/1313/13131/131313... * 【时间】祁俊辉->2017.5.17 * */public class BKDRHash {//BKDRHash算法static long BKDR_Hash(String str){long seed=131;long hash=0;for(int i=0;i<str.length();i++){hash=hash*seed+str.charAt(i);//System.out.println(hash);}return (hash & 0x7FFFFFFF);//32位//return (hash & 0x7FFFFFFFFFFFFFFFL);//64位}//主函数public static void main(String[] args) {System.out.println(Long.toBinaryString(BKDR_Hash("祁俊辉")));}}
3 DJBHash
/* 【算法】DJBHash(目前公布最有效的Hash算法) * 【说明】俗称"Times33"算法 * 【时间】祁俊辉->2017.5.17 * */public class DJBHash {//DJBHash算法static long DJB_Hash(String str){long hash=5381;for(int i=0;i<str.length();i++){hash=((hash<<5)+hash)+str.charAt(i);//System.out.println(hash);}return (hash & 0x7FFFFFFF);//32位//return (hash & 0x7FFFFFFFFFFFFFFFL);//64位}//主函数public static void main(String[] args) {System.out.println(Long.toBinaryString(DJB_Hash("祁俊辉")));}}
4 JSHash
/* 【算法】JSHash(由Justin Sobel发明的一种hash算法) * 【说明】位操作 * 【时间】祁俊辉->2017.5.18 * */public class JSHash {//JSHash算法static long JS_Hash(String str){long hash=1315423911;for(int i=0;i<str.length();i++){hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));//System.out.println(hash);}return (hash & 0x7FFFFFFF);//32位//return (hash & 0x7FFFFFFFFFFFFFFFL);//64位}//主函数public static void main(String[] args) {System.out.println(Long.toBinaryString(JS_Hash("祁俊辉")));}}
5 SDBMHash
/* 【算法】SDBMHash * 【说明】与BKDRHash思想一致,只是数乘因子不同 * 【时间】祁俊辉->2017.5.18 * */public class SDBMHash {//SDBMHash算法static long SDBM_Hash(String str){long hash=0;for(int i=0;i<str.length();i++){hash=hash*65599+str.charAt(i);//hash=str.charAt(i)+(hash<<6)+(hash<<16)-hash;//System.out.println(hash);}return (hash & 0x7FFFFFFF);//32位//return (hash & 0x7FFFFFFFFFFFFFFFL);//64位}//主函数public static void main(String[] args) {System.out.println(Long.toBinaryString(SDBM_Hash("祁俊辉")));}}
阅读全文
0 0
- 关于Hash的几种常用算法
- 几种常用的hash算法
- 发现一种简单高效的Hash算法,比常用的几种算法效率高出一倍以上
- 几种hash算法
- 几种经典的Hash算法实现
- 几种经典的hash算法
- 几种经典的字符串hash算法
- 几种经典的hash算法
- 几种经典的hash算法
- 几种经典的hash算法
- 几种经典的hash算法
- 几种经典的hash算法
- Hash算法解决冲突的方法一般有以下几种常用的解决方法
- 常用的Hash算法
- 常用的hash算法
- 11种常用的hash算法
- 几种经典hash算法
- 几种常用的算法
- 371. Sum of Two Integers
- Unity/Animation -- 添加动画事件(Animation Events)
- 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
- 关于int main(int argc,char*argv[])的理解
- 【ThreadPool】Executor, ExecutorService 和 Executors 间的不同
- 关于Hash的几种常用算法
- 色彩选择器(colorPicker)
- MFC之旅——分析一个MFC程序运行脉络
- JSR 303
- C++/STL纲要
- 初试GreenDAO 3.2.3
- kafka socket架构 处理流程
- HTML学习---------认识html标签
- 分块打表