牛客網常見算法思路 (十一)大數據處理

有用麻煩點個贊哦

解題關鍵
1、分而治之,通過hash將大任務分流到機器
2、常用的hashMap或bitMap
難點:通訊、時間、空間的估算
這類型的題目適合面試不適合筆試

案例一
請對10億個ipv4地址進行排序,每個ip只會出現一次
ipv4約等於42億
普通方法
ip地址轉化無符號整數,排序後再轉化爲ip地址
一個ip地址大約4字節,10億個整數約4G
更優解
1、申請一個長度爲2^32的bit類型數組,每個位置只可表示1或0,共128m
2、因爲長爲2^32,所以bitmap可以表示任何一個32位無符號數,當對應的數出現時,bitmap對應位置塗黑,重複10億次
3、從0位置開始遍歷,把ip地址還原

案例二
請對10億個數進行排序
思想
年齡必定在0-200之間,計數排序即可

案例三
一個包含20億個32位整數的大文件,在其中找到出現次數最多的數,但是內存限制只有2G
思想
hashmap記錄所有數出現的次數
key->4字節->整型->具體某一個數
value->4字節->整型->這種數出現的次數
一條記錄8字節,記錄條數爲2億是,大約1.6G內存,20億時內存可能不足(如果出現20億個數都不一樣)
因此要先用hash函數分流成16個小文件
因爲同一個文件不會被分流到不同的部分,全部處理完成後,得到16個文件中各自的第一名再比較出第一名

案例四
32位無符號整數的範圍0-4294967295。現在有一個正好包含40億個無符號整數的文件,所以在整個範圍中必然有沒出現過的數,可以使用最多10M的內存,只用找到一個沒出現的數,如何尋找
思想
hashmap記錄,需要16G內存
bitmap記錄,需要500M
首先0-232-1範圍分成64個區間,單個區間232/64
總範圍42億,但數一共爲40億,所以必然有區間計數不滿
找到一個沒滿的區間用bitmap檢索一邊即可

案例五
搜索詞彙量是百億的搜索公司,設計出每天最熱詞100的可行辦法
思想
還是先hash分流(具體機器和麪試官溝通得出),甚至還可以分流後再分流
處理每一個小文件,得到每個小文件中的詞頻統計,利用小根堆選出top100
小文件的top100彙總外排序或小根堆求出每臺機器的top100,再求出最後的top100

案例六
工程師常使用服務器集羣來設計和實現數據緩存,以下是常見的策略。1、無論是添加、查詢還是刪除,都先將數據的id通過哈希函數轉換成一個hash值,記爲key。2、如果目前有機器N臺,則計算key%N的值,這個值就是該數據所屬的機器編號,無論是添加、刪除、還是查詢,都只在這臺機器上進行。請分析這種緩存策略可能帶來的問題,並提出改進方案
思考
如果增加/刪除機器,數據遷移的代價很大
一致性哈希算法(建議詳細瞭解)
數據id hash計算後結果0-2^32,假設收尾相連成環
假設機器問n個,均勻分佈在環上,數據id映射在環上一點,向前走遇到第一臺機器的節點,就存儲在當前機器節點上,增加刪除節點時只需要移動變動節點附近的數據即可。

有用麻煩點個贊哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章