Murmur哈希算法是一种非加密hash算法,适用于哈希查找。

  • 优点是时间和空间消耗较少,可检索一个元素是否在集合中
  • 缺点是误识别率和删除困难

bloomFilter原理

​ 元素被加入集合时,选择k个哈希函数,对元素进行散列,映射到一个位数组中的k个点,并将其置为1。

查找时,只判断这个元素经过哈希的k个点是否为1,如果等于1,不一定包含该元素,不等于1,一定不包含元素。只会产生两个结果:可能存在或者一定不存在。

BloomFilter实现和使用注意事项

使用时,需要考虑数据量n和误判率fpp

实现时,需要考虑hash函数的选择和bit数组大小,常见的是选取一个hash函数,输入k个参数产生映射点。

murmur3应用-BloomFilter

参数取值

假设BloomFilter中元素总bit数量为m(即bit array大小),插入的元素个数为n,hash函数的个数为k,误判率为p

如果最小化误判率,则k的取值:
k = m n ∗ l n 2 k = \frac {m}{n} *ln2 k=nm​∗ln2
而p的取值又和m,n有如下关系:
m = − n ∗ l n p ( l n 2 ) 2 m = -\frac {n*lnp}{(ln2)^2} m=−(ln2)2n∗lnp​

将m的计算公式带入上式,可得给定n和p,k的取值应为:
k = − l n p l n 2 k=-\frac{lnp}{ln2} k=−ln2lnp​

应用

murmur3_32的实现

#define ROT32(x, y) ((x << y) | (x >> (32 - y)))// c1,c2,n是三个特别的常量,用大量测试数据测出来的
uint32_t murmur3_32(uint8_t *key, uint32_t len, uint32_t seed) {const uint32_t c1 = 0xcc9e2d51;const uint32_t c2 = 0x1b873593;const uint32_t r1 = 15;const uint32_t r2 = 13;const uint32_t m = 5;const uint32_t n = 0xe6546b64;uint32_t hash = seed;const int nblocks = len / 4;printf("nblocks= %d\n", nblocks);const uint32_t *blocks = (const uint32_t *) key;printf("blocks = %d\n", blocks);int i;uint32_t k;for (i = 0; i < nblocks; i++) {printf("i= %d\n", i);k = blocks[i];k *= c1;k = ROT32(k, r1);k *= c2;hash ^= k;hash = ROT32(hash, r2) * m + n;}const uint8_t *tail = (const uint8_t *) (key + nblocks * 4);printf("tail = %d\n", tail);uint32_t k1 = 0;switch (len & 3) {case 3:k1 ^= tail[2] << 16;case 2:k1 ^= tail[1] << 8;case 1:k1 ^= tail[0];k1 *= c1;k1 = ROT32(k1, r1);k1 *= c2;hash ^= k1;}hash ^= len;hash ^= (hash >> 16);hash *= 0x85ebca6b;hash ^= (hash >> 13);hash *= 0xc2b2ae35;hash ^= (hash >> 16);return hash;
}

参考链接

https://llimllib.github.io/bloomfilter-tutorial/(BloomFilter教程,可加深理解)

http://oserror.com/backend/bloomfilter/(对BloomFilter的原理和优化讲的很详细的一篇技术博客)

https://blog.csdn.net/thinkmo/article/details/26833565

bloomFilter和哈希函数murmur3相关推荐

  1. 她破解哈希函数算法:坚持10年做一件事一定能做成

    今年9月7日,2019未来科学大奖揭晓,这项设立4年的大奖迎来首位女性得主--密码学家王小云.在信息时代,金融服务.网络安全等背后都离不开密码系统的"护航".在大众眼中,密码带着神 ...

  2. 不同表结构数据迁移_数据结构:哈希 哈希函数 哈希表

    写在前面 希望你们看了能够有所收获,同时觉得不错的朋友可以点赞和关注下我,以后还会有更多精选文章分享给大家!大家可以关注一下java提升专栏 java提升​zhuanlan.zhihu.com 什么是 ...

  3. Hash+哈希+哈希函数

    Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数.哈希函数是一个 ...

  4. mysql 自定义哈希函数_C++ STL无序容器自定义哈希函数和比较规则(超级详细)...

    前面在讲解 unordered_map.unordered_multimap.unordered_set 以及 unordered_multiset 这 4 种无序关联式容器(哈希容器)时,遗留过一个 ...

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

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

  6. 哈希函数的原理及应用

    哈希(Hash)函数又称为散列函数.杂凑函数.它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程. 哈希函数可以将满足要求的任意长度的输入经过变换后得到固定长度的输出.这 ...

  7. 认识哈希函数(散列函数)

    哈希函数(散列函数),哈希函数的输入域可以是非常大的范围,比如任意一个字符串,但是输出域是固定的范围,假设为S,并具有如下性质: 1.典型的哈希函数都有无限的输入值域 2.当给哈希函数传入相同的输入值 ...

  8. 现代密码学5.4--对哈希函数的攻击

    现代密码学5.4--对哈希函数的攻击 生日攻击 生日问题 博主正在学习INTRODUCTION TO MODERN CRYPTOGRAPHY (Second Edition) --Jonathan K ...

  9. 现代密码学5.1--哈希函数定义

    现代密码学5.1--哈希函数定义 密码学的假设 抗碰撞哈希函数定义 与数据结构中定义的哈希函数的不同 哈希函数的密钥 安全性:抗碰撞哈希函数>抗二次原像/抗目标碰撞哈希函数>抗原像哈希函数 ...

最新文章

  1. IntelliJ IDEA 2021.1正式发布!快来看看又有哪些神仙功能加入!
  2. LVS nat 是否需要借助iptables 的snat实现负载均衡
  3. 问题解决-Failed to resolve: com.android.support.constraint:constraint-layout:1.0.0-alpha7
  4. 【Windows 逆向】使用 CE 工具挖掘关键数据内存真实地址 ( 完整流程演示 | 查找临时内存地址 | 查找真实指针地址 )
  5. Spring boot部署工程
  6. 【Transformer】CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows
  7. 联想王传东回应“宁愿放弃5G也不选华为”言论:纯属谣言
  8. php $r,PHP
  9. 第2篇:Flowable启动
  10. 通信原理实践(一)——音频信号处理
  11. [Python] L1-056 猜数字-PAT团体程序设计天梯赛GPLT
  12. Away3D 的实体收集器流程2
  13. python查看数据库存在表_python sqlite3查看数据库所有表(table)
  14. zufeoj_1257: 神风堂人数 VIJOS-P1041
  15. idea 修改hosts
  16. 用java程序实现记单词_GitHub - whypro/Hello-Word: 用 JAVA(J2SE) 实现的一个背单词程序,可自由选择词库。...
  17. 精通Flink项目优化(一.资源配置调优)
  18. 计算机中央控制单元是由什么组成,电子控制单元由什么组成
  19. 25-javaweb接入支付宝支付接口
  20. java动物识别_java编写的专家系统(人工智能)动物识别

热门文章

  1. 【算法千题案例】每日LeetCode打卡——92.最短补全词
  2. 什么情况下应该选用远心镜头
  3. 数据可视化之旅:常用图表对比
  4. http 状态码以及http请求、响应
  5. SCTF2021 pwn Christmas Song 出题思路+预期解
  6. mysql中dateformat用法,MySQL date_format()函数
  7. 基于Mapbox实现地图的样式配置
  8. Win10系统QQ无法登陆,代码00001
  9. cat /etc/sysconfig/network-scripts/ifcfg-ens33
  10. 高位字节与低位字节简单介绍