100億個數(shù)取出最大的10000個

題目:100億個整數(shù),求最大的1萬個數(shù),并說出算法的時間復雜度  算法:如果把100億個數(shù)全部讀入內(nèi)存,需要100 0000 0000 * 4B 大約40G的內(nèi)存,這顯然是不現(xiàn)實的?! ∥覀兛梢栽趦?nèi)存中維護一個大小為10000的最小堆,每次從文件讀一個數(shù),與最小堆的堆頂元素比較,若比堆頂元素大,  則替換掉堆頂元素,然后調(diào)整堆。最后剩下的堆內(nèi)元素即為最大的1萬個數(shù),算法復雜度為O(NlogN)  實現(xiàn):從文件讀數(shù)據(jù)有講究,如果每次只讀一個數(shù),效率太低,可以維護一個輸入緩沖區(qū),一次讀取一大塊數(shù)據(jù)到內(nèi)存,  用完了又從文件接著讀,這樣效率高很多,緩沖區(qū)的大小也有講究,一般要設為4KB的整數(shù)倍,因為磁盤的塊大小一般  就是4KB維護一個大根堆

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容