轉自:http://netsmell.com/post/how-sort-10-billion-data.html?ref=myread 海量數據處理/外部歸並排序 - 分治.cppp 今天要給100億個數字排序,100億個 int 型數字放在文件里面大概有 37.2GB,非常大,內存 ...
首先一點,對於海量數據處理,思路基本上是確定的,必須分塊處理,然后再合並起來。 對於每一塊必須找出 個最大的數,因為第一塊中 個最大數中的最小的,可能比第二塊中 最大數中的最大的還要大。 分塊處理,再合並。也就是Google MapReduce 的基本思想。Google有很多的服務器,每個服務器又有很多的CPU,因此, 億個數分成 塊,每個服務器處理一塊, 億個數分成 塊,每個CPU處理一塊。然 ...
2014-03-02 15:58 2 13785 推薦指數:
轉自:http://netsmell.com/post/how-sort-10-billion-data.html?ref=myread 海量數據處理/外部歸並排序 - 分治.cppp 今天要給100億個數字排序,100億個 int 型數字放在文件里面大概有 37.2GB,非常大,內存 ...
一個較好的方法:先拿出10000個建立小根堆,對於剩下的元素,如果大於堆頂元素的值,刪除堆頂元素,再進行插入操作,否則直接跳過,這樣知道所有元素遍歷完,堆中的10000個就是最大的10000個。時間復雜度: m + (n-1)logm = O(nlogm) 優化的方法:可以把所有10億個數據分組 ...
最小堆 最小堆是一種完全二叉樹,特點是根節點比兩個子節點都小(或者根節點比子節點都大) 過程 先找10000個數構建最小堆 依次遍歷10億個數,如果比最小堆的最小值大,則替換這個最小值,並重新構建最小堆 最后輸入10000個值 時間復雜度 構建最小堆的復雜度為 logn ...
,並調整結構使之仍然是一個最小堆,這樣,遍歷完后,堆中的10000個數就是所需的最大的10000個。建堆時間復 ...
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/jj12345jj198999/article/details/17169559 ...
采用小頂堆 ...
1. 算法如下:根據快速排序划分的思想 (1) 遞歸對所有數據分成[a,b)b(b,d]兩個區間,(b,d]區間內的數都是大於[a,b)區間內的數 (2) 對(b,d]重復(1)操作,直到最右邊的區間個數小於100個。注意[a,b)區間不用划分 (3) 返回上一個區間,並返回此區間的數字 ...
...