2015-10-14 46 views
0

我有30個gb文件,其中只有1至1000個數字是重複的。我想知道如何對文件進行排序,並且需要先將文件加載到內存中。如何對30gb文件進行排序重複有1至1000個數字

我已經通過其他的鏈接,但不同意排序多個文件塊並將其保存在臨時文件中。正如我相信在流程結束時,我將剩下兩個大文件(每個15 GB)進行排序。我無法加載每個合併和排序。

有什麼建議嗎?

+0

您是否需要使用合併排序?這可以通過計數排序在線性時間內完成。 – Blastfurnace

+0

@Blastfurnace,沒有這種使用合併排序的要求 –

回答

4

鑑於數值都在1..1000範圍內,您可以使用簡單版本Counting Sort來完成此操作。

  • 創建的counters[1000]陣列(1001如果陣列是從零開始 )全部初始化爲0。
  • 讀取文件,當您從文件增量counters[n]中讀取值n時。
  • 現在您知道每個值在輸入文件中出現的次數。
  • 循環通過counters,對於每個索引ncounters[n]副本n來輸出。例如,如果counters[100] == 5則編寫100以輸出5次。

您不需要將整個文件保存在內存中。您只需要計算每個值出現在文件中的次數。這是創建原始文件的排序版本的足夠信息。

+0

如果您確實需要對完整列表進行排序,這是最好的選擇。如果一個近似值會做,你可以取而代之,並在次線性時間內得到答案。 – Dave

+0

@Blastfurnace,當我必須讀取文件時出現問題 - 記住它的30GB –

+2

@AnilPurswani:您不需要將整個文件加載到內存中。只需按順序讀取文件,更新數量。然後你可以用排序值重寫文件。 – Blastfurnace

相關問題