文章目录
基数统计算法
基数可以认为是集合中去重后的数量,所以基数统计算法又称为 去重统计算法
要说标题中的两个算法,需要先来区分下 BitMap算法和 BitSet算法
1. BitMap和BitSet
BitMap算法
一切的基础: BitMap
算法
《编程珠玑》中讲:
所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
Bit-map算法利用这种思想处理大量数据的排序、查询以及去重
一图胜千言
稍微解释一下:
- 上图中,我们要表示 32 个数,就只需要 32 个 bit(4Bytes),首先我们开辟 4Byte 的空间,将这些空间的所有 bit 位都置为 0。
- 添加(10, 17,28) 这三个数到 BitMap 中,需要的操作就是在相应的位置上将0置为1即可
假设我们想对数据进行排序或者检索数据是否存在,就可以依次遍历这个数据结构,碰到位为 1 的情况,就当这个数据存在
小节: BitMap
的思想和原理是很多算法的基础。 核心点如下:
- 位图和整数之间的映射
- 如果数据量大,就不断扩充
Bit Array
即可 - 排序、去重、查找都好使, 省空间
大厂面试题: 一个10G的文件,里面全部是自然数,一行一个,乱序排列,对其排序。在32位机器上面完成,内存限制为 2G。
BitSet
在bitset中就是使用着bitmap方式,将数据存储在long数组中,主要的操作就是位操作。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet修改另一个 BitSet的内容。 线程不安全。默认情况下,set 中所有位的初始值0,所以get的时候都是f