題目:100億個整數,求最大的1萬個數,并說出算法的時間復雜度 算法:如果把100億個數全部讀入內存,需要100 0000 0000 * 4B 大約40G的內存,這顯然是不現實的。 我們可以在內存中維護一個大小為10000的最小堆,每次從文件讀一個數,與最小堆的堆頂元素比較,若比堆頂元素大, 則替換掉堆頂元素,然后調整堆。最后剩下的堆內元素即為最大的1萬個數,算法復雜度為O(NlogN) 實現:從文件讀數據有講究,如果每次只讀一個數,效率太低,可以維護一個輸入緩沖區,一次讀取一大塊數據到內存, 用完了又從文件接著讀,這樣效率高很多,緩沖區的大小也有講究,一般要設為4KB的整數倍,因為磁盤的塊大小一般 就是4KB維護一個大根堆
100億個數取出最大的10000個
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 前兩天面試3面學長問我的這個問題(想說TEG的3個面試學長都是好和藹,希望能完成最后一面,各方面原因造成我無比想去...
- 一、溫故而知新 1. 內存不夠怎么辦 內存簡單分配策略的問題地址空間不隔離內存使用效率低程序運行的地址不確定 關于...