海量数据排序问题一一 100G 数据,只有 100M 内存,怎么排序?
生活随笔
收集整理的這篇文章主要介紹了
海量数据排序问题一一 100G 数据,只有 100M 内存,怎么排序?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
100G 數據,按照 100M 內存拆分,然后排序有序的數據,然后寫入到 file1,file2…file100。?
多路歸并
第一回合:?
從 file1,file2,file3……file100.取出第一個數。及最小的。所有的初始指針都是第一行。?
min1=min(min1=min(fil1,file2,file3…..file100);file2,file3…..file100);min1 寫入到大數據文件。大數據行數指針+1。min1對應的行數指針+1。
第二回合:
從file1,file2,file3……file100.取出第一個數。及最小的。所有的初始指針都是第一行。min2 = min(fil1,fil1,file2,file3…..file100);?min2寫入到大數據文件。大數據行數指針+1。min2寫入到大數據文件。大數據行數指針+1。min2 對應的行數指針+1。
多路歸并排序:
function mergeMultiArray($arr) {//初始化參賽 PK 的數據40foreach($arr as $key => $items){//初始化每個參賽的第一個元素$idx[$key] = 0;}$retArr = array();$retIdx = 0;while(false == empty($arr)){$min = null;//最小值$minKey = null;//最小值得代表隊編號foreach($arr as $key => $items){$tmpIdx = $idx[$key];//參賽代表對當前指針$tmpMin = $items[$tmpIdx];//參賽代表對的值$tmpKey = $key;//參賽代表對的編號if(null == $min || $tmpMin < $min){$min = $tmpMin;$minKey = $key;}}//寫入結果$retArr[$retIdx] = $min;$retIdx++;//或者隊伍的指針+1$idx[$minKey]++;//參賽代表隊,隊員已經用完了if($idx[$minKey] >= count($arr[$minKey])){unset($arr[$minKey]);}}return $retArr; } $ret = mergeMultiArray(array(array(1,10,100),array(2,30,70),array(4,6,9))); print_r($ret);?
總結
以上是生活随笔為你收集整理的海量数据排序问题一一 100G 数据,只有 100M 内存,怎么排序?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLCODE=-1585
- 下一篇: (深度剖析结构)模块化解释矢量控制