通过对哈希表的学习,我们学习到了一种查找效率为 O ( 1 ) O(1) O(1)的数据结构,其精髓正是其哈希思想,采用映射的方法,将元素放在指定位置,查找时可以做到按址取值,大大减少了查找次数,提供了高效的数据访问。今天学习一种基于哈希的应用——位图(
bitset
)
为什么需要位图
看一看下面这道大厂的面试题
给40亿个不重复的⽆符号整数,没排过序。给⼀个⽆符号整数,如何快速判断⼀个数是否在这40亿个数中?
- 解题思路1:暴力遍历,时间复杂度 O ( N ) O(N) O(N),太慢,pass
- 解题思路2:排序+二分查找。时间复杂度消耗 O ( N ∗ l o g N ) + O ( l o g N ) O(N*logN) + O(logN) O(N∗logN)+O(logN)
思路二从时间复杂度上看是ok的,但是再深入分析会发现,40亿个无符号整数是多大呢?
1 G = 1024 M B = 1024 ∗ 1024 K B = 1024 ∗ 1024 ∗ 1024 B y t e 1G = 1024MB = 1024 * 1024 KB = 1024 * 1024 * 1024Byte 1G=1024MB