40 億個 QQ 號碼如何去重,bitmap去重


這是騰訊三面的題:鏈接 https://blog.csdn.net/dabaoshiwode/article/details/121571610

具體的題目如下:
文件中有40億個QQ號碼,請設計算法對QQ號碼去重,相同的QQ號碼僅保留一個,內存限制1G.

原題看鏈接,這里自己理解下bitmap是怎么做到的。前置知識bitmap

 

用hashmap去重的話,用int類型2*(2^31-1),負數也算上。

那么一個int類型32位,4個字節。

需要  40億*4/1024/1024/1024 ≈ 14.9G

這還是不考慮hash沖突最少的情況!

 

那么用bitmap的話,用1位表示1個qq號碼是否存在

那么8個位等於1個字節。

需要  40億/8/1024/1024/1024 ≈ 0.466G

只需要不到512MB就可以了!

 

 

 如上圖:是1個數組上存取了二進制的1個字節的信息。這1個字節的信息可以表示8個qq號碼是否存在。時間和空間復雜度都大大降低!

假如來了一個重復的qq號碼12

1、計算分組 12 / 8 = 1

2、計算分組下標 12 % 8 = 4

判斷第四位是1,說明12已經有了,|或操作下,自動去重。

 

同理用32位的int類型取代上述的8位byte,間隔32個數分組。

 

 

參考文章:

https://blog.csdn.net/dabaoshiwode/article/details/121571610

https://zhuanlan.zhihu.com/p/442732557

https://www.cnblogs.com/cjsblog/p/11613708.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM