騰訊有這么一道校招題:只有2G內存的pc機,在一個存有10G個整數(shù)的文件,從中找到中位數(shù),寫一個算法。有好幾種解法,比如桶排序和基數(shù)排序,但是我查到有個利用堆來解決的方法,不太明白,原話是這么說的:先求第1G大,然后利用該元素求第2G大,然后利用第2G大,求第3G大...當然這樣的話雖不需排序,但是磁盤操作會比較多,具體還需要分析下與外排序的效率哪個的磁盤IO會比較多建立一個1g個整數(shù)的最大值堆,如果元素小于最大值則入堆,這樣可以得到第1g大的那個元素然后利用這個元素,重新建一次堆,這次入堆的條件還要加上大于這個第1g大的元素,這樣建完堆可以得到第2g大的那個??吹奈乙活^霧水不得其法,先求1G大都沒看明白是什么,是把10G的數(shù)據(jù)分成10份,然后把其中1G里的排序找出最大的意思么?希望大家能指點我下這個解決方法的思路,謝謝了。
關于10G 個整數(shù)找出中位數(shù),內存限制為 2G題目。
慕村225694
2018-11-14 13:22:32