浅谈布隆过滤器和HyperLogLog

本文介绍了布隆过滤器和HyperLogLog两种算法,重点讨论了它们在数据去重和基数统计上的应用。布隆过滤器在面对缓存穿透问题时能有效降低数据库压力,而HyperLogLog则是一种高效的空间节省的基数统计方法,适用于大型网站独立访问次数等场景。虽然布隆过滤器存在一定的误判率,但能确保不存在的数据不会被误判为存在,而HyperLogLog则提供了一种在牺牲一定精度的前提下,高效存储和计算大规模数据的方法。
摘要由CSDN通过智能技术生成

基数统计算法

基数可以认为是集合中去重后的数量,所以基数统计算法又称为 去重统计算法

要说标题中的两个算法,需要先来区分下 BitMap算法和 BitSet算法

1. BitMap和BitSet

BitMap算法

一切的基础: BitMap算法

《编程珠玑》中讲:

所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

Bit-map算法利用这种思想处理大量数据的排序、查询以及去重

一图胜千言

image-20210908104411685

稍微解释一下:

  1. 上图中,我们要表示 32 个数,就只需要 32 个 bit(4Bytes),首先我们开辟 4Byte 的空间,将这些空间的所有 bit 位都置为 0。
  2. 添加(10, 17,28) 这三个数到 BitMap 中,需要的操作就是在相应的位置上将0置为1即可

假设我们想对数据进行排序或者检索数据是否存在,就可以依次遍历这个数据结构,碰到位为 1 的情况,就当这个数据存在

小节: BitMap 的思想和原理是很多算法的基础。 核心点如下:

  1. 位图和整数之间的映射
  2. 如果数据量大,就不断扩充 Bit Array 即可
  3. 排序、去重、查找都好使, 省空间

大厂面试题: 一个10G的文件,里面全部是自然数,一行一个,乱序排列,对其排序。在32位机器上面完成,内存限制为 2G


BitSet

在bitset中就是使用着bitmap方式,将数据存储在long数组中,主要的操作就是位操作。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet修改另一个 BitSet的内容。 线程不安全。默认情况下,set 中所有位的初始值0,所以get的时候都是f

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值