哈希碰撞率(hash collision)实测
样本数 | 1万 | 10万 | 100万 | 1000万 | 1亿 |
碰撞率1 | 0.00000002 | 0.00000033 | 0.00003769 | 0.00363519 | 0.29502696 |
碰撞率2 | 0.00000001 | 0.00000051 | 0.00003808 | 0.00364375 | 0.2949834 |
碰撞率3 | 0.00000001 | 0.0000005 | 0.00003818 | 0.00363753 | 0.29490623 |
测试代码如下:
import cn.hutool.core.codec.Base64;
import cn.hutool.core.math.MathUtil;
import cn.hutool.core.util.StrUtil;import java.math.BigDecimal;
import java.text.DecimalFormat;public class HashCollision {public static void main(String[] args) {test();test();test();}private static void test(){System.out.println("test");long nums = 100000000;long s = System.currentTimeMillis();BitMap bitMap = new BitMap();long collisionNum = 0;for (int i = 0; i < nums; i++) {String uid = getUID();int code = uid.hashCode();if (bitMap.put(code)) {collisionNum++;}if (i+1 == 10000 || i+1 == 100000 || i+1 == 1000000 || i+1 == 10000000 || i+1 == 100000000) {DecimalFormat df = new DecimalFormat();df.setMaximumFractionDigits(10);String rate = df.format(collisionNum / (0.0 + nums));
// System.out.println("collision rate "+(i+1)+" = " + rate);System.out.print(rate+"\t");}}System.out.println();long t = System.currentTimeMillis() - s;System.out.println("t = " + t);}public static String getUID() {long[] longs = new long[]{Double.doubleToLongBits(Math.random()),Double.doubleToLongBits(Math.random()),Double.doubleToLongBits(Math.random())};byte[] bytes = longArrayToByteArray(longs);String encode = Base64.encode(bytes);return encode;}public static byte[] longArrayToByteArray(long[] longs) {byte[] bytes = new byte[longs.length * 8];for (int i = 0; i < longs.length; i++) {for (int j = 0; j < 8; j++) {bytes[i * 8 + j] = (byte) (longs[i] >>> j);}}return bytes;}}
public class BitMap {byte[] data = new byte[0x20000000];public boolean put(int code) {int indexInArray=code >>> 8;byte byteInArray = data[indexInArray];int indexInByte = code & 7;int bitValue = byteInArray >>> indexInByte & 1;data[indexInArray] = (byte) (byteInArray | (1 << indexInByte));return bitValue == 1;}public void clear(){for (int i = 0; i < data.length; i++) {data[i]=0;}}public static void main(String[] args) {BitMap bitMap = new BitMap();int code="111".hashCode();boolean b = bitMap.put(code);System.out.println("b = " + b);b = bitMap.put(code);System.out.println("b = " + b);}
}
哈希碰撞率(hash collision)实测相关推荐
- 哈希碰撞(hash collision)
优秀的密码学课 https://classroom.udacity.com/courses/cs387/lessons/48683850/concepts/487362180923 # HW2-5 V ...
- 纸上谈兵: 哈希表 (hash table)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! HASH 哈希表(hash table)是从一个集合A到另一个集合B的映射(map ...
- Hash Collision DoS 攻击
Hash Collision DoS事件及影响 Hash Collision DoS能让受攻击的服务器变得巨慢无比. 这不是因为服务器的编码原因或是疏忽造成的,而是程序语言自身的问题,Hash Col ...
- 哈希(Hash)的详细介绍
1. Hash 的概念 ~~~~~~~ Hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的 输入 (又叫做预映射pre-image)通过散列算法变换成固定长度的 输出 ,该输出 ...
- 哈希(Hash)算法是一种单向密码体制(它是一个从明文到密文的不可逆的映射只有加密过程没有解密过程)
https://www.cnblogs.com/xiaojq/p/11109634.html 简单解释:哈希(Hash)算法,即散列函数.它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只 ...
- Java集合—哈希(hash)表
原文作者: 原文地址: 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方,说起来可能感觉有点复杂,我 ...
- 嵌套循环连接(Nested Loops), 合并联接(Merge), 哈希联接(Hash)的适用情况
1.嵌套循环连接(Nested Loops)适用范围 两个表, 一个叫外部表, 一个叫内部表. 如果外部输入非常小,而内部输入非常大并且已预先建立索引,那么嵌套循环联接将特别有效率. 关于连接时哪个表 ...
- 哈希(hash)理解
转载自https://www.cnblogs.com/mingaixin/p/4318837.html 一.什么是哈希?(一种更复杂的映射) Hash,一般翻译做"散列",也有直接 ...
- 解决哈希(hash)冲突的方法
解决哈希(hash)冲突的方法 当关键字值域远大于哈希表的长度,而且事先并不知道关键字的具体取值时.冲突就难免会发生.另外,当关键字的实际取值大于哈希表的长度时,而且表中已装满了记录,如果插入一个新记 ...
- 计算与数据结构篇 - 哈希算法 (Hash)
计算与数据结构篇 - 哈希算法 (Hash) 哈希算法的定义和原理非常简单,基本上一句话就可以概括了.将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之 ...
最新文章
- SSM开发 | 配合Mybatis,通过泛型实现 BaseService ,抽象增改删查方法
- selenium自学笔记---ecshop购买脚本 xpath定位元素(下拉框,单选框)
- 快速构建Windows 8风格应用13-SearchContract构建
- python数据结构与算法13_python 数据结构与算法 (13)
- python重载模块_Python 3.0中重载模块
- 实时音频编程(二):实践与技巧
- python由编译器将源程序转化为机器语言_python初识
- ubuntu server 18.04 和 20.04 安装 RabbitMQ
- jquery中css()与animate()
- 使用jdk1.8 新特性stream实现多级分类
- Linux常用命令大全 阶段性总结(二)
- Sql server2005 char/varchar/text和nchar/nvarchar/ntest的区别
- 前端花瓣飘落特效代码
- macbook配置java环境变量_Mac系统中如何配置JDK环境变量?Mac中JDK环境变量配置教程...
- 数学建模python实现基础编程练习4
- 半小时漫画中国史 -- 读书摘记
- PPAPI插件的全屏切换处理
- 如何再UOS/Ubuntu中创使用ufw设置防火墙
- 【学习笔记】信息系统项目监理“四控三管一协调”以及监理工作的分类和监理单位的作用
- ORA-12034: materialized view log on SCOTT.T_ROWID younger than last refresh