BKDRHash 算法java实现

原创 2015年11月17日 17:56:20

背景:
BKDRHash算法是字符串hash算法。是一种简单快捷的hash算法。java的继承Object类的提供的hashCode()函数也是采用这种hash算法。下面使用100000个不同字符串产生的冲突数,大概在0~3波动,使用100百万不同的字符串,冲突数大概110+范围波动。

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class BKDRHash {
public static int seed = 31;

public static int getHashCode(String str){
    int hash = 0;
    for(int i = 0;i!= str.length();++i)
    {
        hash =  seed * hash + str.charAt(i);
    }
    return hash;
}

public static void main(String[] args) {
      int length = 100000;
      String str1="http://blog.csdn.net/bojie5744";
      System.out.println("str1 :"+str1.hashCode()+" system");
      System.out.println("str1 :"+getHashCode(str1)+" custom");

      Map<String,String> map = new HashMap<String,String>();
      for(int i=0;i!=length;++i){
         String str = UUID.randomUUID().toString();
         map.put(getHashCode(str)+"", str);
      }
      System.out.println("冲突数为: "+(length-map.size()));
    }

}

10万和100万不同字符串结果如下2个图所示。
这里写图片描述这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

哈希表之bkdrhash算法解析及扩展

BKDRHASH是一种字符哈希算法 由一个字符串(比如:ad)得到其哈希值,为了减少碰撞,应该使该字符串中每个字符都参与哈希值计算,使其符合雪崩效应,也就是说即使改变字符串中的一个字节,也会对最终的哈...
  • wanglx2012
  • wanglx2012
  • 2014年10月24日 14:31
  • 8027

系统学习hash算法(哈希算法)

本篇文章仅仅是关于hash一个开始。在学习了
  • sangyongjia
  • sangyongjia
  • 2014年07月06日 12:41
  • 17339

经典hash算法比较和C语言实现

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

哈希表之bkdrhash算法解析及扩展

转自:http://www.it165.net/pro/html/201410/24949.html BKDRHASH是一种字符哈希算法,像BKDRHash,APHash,DJBHash,JSHas...
  • xu20082100226
  • xu20082100226
  • 2016年09月24日 15:52
  • 351

哈希表之bkdrhash算法解析及扩展

原帖:http://www.it165.net/pro/html/201410/24949.html   BKDRHASH是一种字符哈希算法,像BKDRHash,APHash,DJBHash,JSHa...
  • I_am_a_winer
  • I_am_a_winer
  • 2015年03月12日 11:52
  • 537

哈希表之bkdrhash算法解析及扩展

哈希表之bkdrhash算法解析及扩展
  • XNDXFSZX
  • XNDXFSZX
  • 2016年01月26日 15:21
  • 604

字符串Hash (BKDRHash)

Problem: Task: 现在有一个简单的学生管理系统, 要求实现以下几个功能: 1.向名单内添加学生; 2.删除名单内的某个学生; 3.查询某学生是否存在; Input:   ...
  • MeJustOny
  • MeJustOny
  • 2016年11月06日 18:08
  • 224

希表之bkdrhash算法解析及扩展

原文地址 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] BKDRHash计算公式的推导系数的推导 a      取2的幂b...
  • u010270148
  • u010270148
  • 2017年01月07日 10:45
  • 197

hdu4821 String 字符串hash(bkdrhash)

题意:给定m,l,一个字符串str。 我们定义一个子串为"recoverable”串 当 1、长度为 M*L 2、把这个好串分成M段,每段长度为L,且每段各不相同。 求“recoverab...
  • u011645923
  • u011645923
  • 2015年01月30日 18:35
  • 643

poj2503 Babelfish BKDRhash+链式hash

题目链接 题意:给定字符串以及对应的字符串,再给字符串找到对应的字符串,不存在输出"eh"。 思路:造模板。 /***************************************...
  • u011645923
  • u011645923
  • 2015年04月12日 20:36
  • 398
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BKDRHash 算法java实现
举报原因:
原因补充:

(最多只允许输入30个字)