@最近被问到怎么在很多数据(如20亿)中实现快速查找,没有答上来…
@假设是用unordered_map来实现,查找效率为O(N),假设元素为int类型,则需要20亿*4Bytes,这显然太占资源
@后来了解到bitmap,也就是所谓的位图,用一两bit表示该数是否出现过,例如int为8字节,32位,则可存进0-31的数,则20亿数需要20亿/32Bytes,这样便大大节约了资源
@实现代码如下,主要实现其添加、删除与查找,通过位运算实现:
1.如实现查找功能,则通过int_/32可知该数应该属于第几组,通过int_%32可知该数在该组的下标树,通过与1<<location则可知查找的该位置是否为1判断该数是否存在
2.添加与删除功能原理类似,不再赘述…
class my_bitmap {
public:
my_bitmap(){
memset