海量資料排序演算法

2021-09-01 09:24:25 字數 685 閱讀 4638

題目:有100萬無序資料,要求從小到大排序。但是每次記憶體只能排序1萬條資料。

1.因為每次只能處理1萬條資料,所以要分組處理,我們將100萬資料分成100組

2.因為每組資料都是無序的,所以我們使用平均時間複雜度較好的演算法。

3.當我們分組排序完成後,我們要排序1萬條資料就會簡單很多了。我們一共要取1萬條資料,一共有100組,那麼每組取100條資料,一共1萬條資料進行堆排序。每次堆排序可以取到前100小的,一共要進行1萬次堆排序。

4.找出最小的100個數後,要分別從它們所屬的組中補充相應的數進來,然後再進行堆排序,再次取100個最小的數。

5.最後取完所有,完成100萬個數的排序。

因為我要取最小的,而且我排序的集合在發生改變

因為我們不知道各組之間資料的大小關係,只知道在當前組資料是有序的,而a組未取的資料依舊可能比b組最小的數大,所以每組取100個資料,我們乙個集合中堆排序後,能確定的100萬個資料的最小數只能確定1萬個,之後要補充數之後再次進行排序。

將取出來的數和它所屬的組標記封裝起來,再進行堆排序。

每組資料排序的時間複雜度是o(n/100*log n/100),那麼100組排序的時間複雜度為o(n*log n/100)。

一次堆排序時間複雜度o(n/100*lg n/100),一萬次堆排序的時間複雜度為o(100*n*lg n/100)。

整個的時間複雜度就是兩個相加。

海量資料排序

海量資料排序 2011 04 12 19 33 1億資料找出最大的1w個 1.分塊法 解法 a.採用分塊法,將1億資料分成100w一塊,共100塊。b.對每塊進行快速排序,分成兩堆,如果大堆大於1w個,則對大堆再次進行快速排序,直到小於等於1w停止 假設此時大堆有n個 此時對小堆進行排序,取最大的1...

海量資料排序

今天要給100億個數字排序,100億個 int 型數字放在檔案裡面大概有 37.2gb,非常大,記憶體一次裝不下了。那麼肯定是要拆分成小的檔案乙個乙個來處理,最終在合併成乙個排好序的大檔案。實現思路 1.把這個37gb的大檔案,用雜湊分成1000個小檔案,每個小檔案平均38mb左右 理想情況 把10...

對海量資料進行外排序的演算法

需求 一種資料報中包括int,string,long,double 四種型別的陣列,陣列長度均為4096.即4096行,每行有int,string,long,double四個資料 對1000個隨機產生的資料報,按int列進行排序。將int列最小的4096個資料及其對應的其他資料儲存到乙個新的資料報中...