啊啊啊啊好久没打leecode了,数据结构慢慢地开始不记得了...(k恐怖!!!)
今天学习了一个数据结构——位图。
位图:
位图是用来解决大数据去重的问题的。那说到去重,脑子里第一反应就是散列表,但是散列表最大的问题是所占用的空间非常大,如果像是解决网页爬虫中的URL去重功能,一个URL的长度平均是64字节,那所需要的内存也就相当大了。怎么解决这个空间问题呢?这里有一种比较特殊的散列表——位图。
位图的原理是用数组下标来定位数据。举个例子:有一千万个整数,范围在1到一亿之间,如何快速查找某个整数是否在这1千万个整数中呢?
按照位图的思想,需要申请一个一亿长度的bitmap,每个bit位上分别对应1—1亿的整数,这一千万个整数的存在形式对应bitmap中的bit位上的1。当我们查询某个整数是否存在在这1千万个整数中时,只需要把对应的bit取出来,为1,说明1千万个整数中包含这个整数,相反,就不包含这个整数。
有个比较生动形象的介绍,这里安利给大家:
https://mp.weixin.qq.com/s/xxauNrJY9HlVNvLrL5j2hg
用代码实现bitmap:
public class BitMap {
private char[] bytes;
private int nbits;
public BitMap(int nbits)
{