我對一個主題感興趣,假設我們有8個文件,每個文件包含10億個整數,我們應該將這些文件合併成80億個整數文件,每個文件中的所有文件都進行排序。當然,如果我們做8次合併,任務很簡單,但是我的問題是,文件的重要排序是什麼,我們應該在哪個順序上進行組合?例如,在開始時,不是合併第一個和第二個文件,創建新的M文件並與第三個文件合併,也許有時候合併第二個和第三個文件,然後與第一個文件合併會更有利嗎?我想我的問題很清楚。合併過程中的文件排序問題?如果是這樣,我們如何選擇最優的?合併過程中的文件排序
0
A
回答
1
這可能是最佳做一個8路合併排序沒有中間文件。打開8個文件句柄,找到所有8個最小的整數,將其寫入輸出文件並讀取該文件中的下一個整數。您可能可以使用插入排序來管理8個源的8個元素的數組(持有文件句柄和讀取的最後一個值)。
就排序而言,如果您一次只能合併兩個文件,我可能會先合併最小的文件。簡化你的例子,你可以看到爲什麼。
假設您有3個文件,其中有1,2和100條記錄。
如果合併1 & 2與3所記錄的臨時文件,然後合併,與100,你已經閱讀106條記錄,並書面103
如果改爲合併1 & 100轉換成101個記錄的臨時文件,然後將其與2合併,您將讀取204條記錄並寫入103.
相關問題
- 1. 合併排序的文件與FIFO的
- 2. 合併排序中的合併部分
- 3. 多線程合併排序
- 4. 多線程合併排序
- 5. 讀取,合併和排序.csv文件
- 6. 有效合併排序文件
- 7. 合併排序中的基本條件
- 8. 合併排序的文件不知道文件名
- 9. 遞歸合併排序Java程序
- 10. 合併排序程序錯誤
- 11. 在Java中合併排序
- 12. 在Python中合併排序
- 13. 如何將合併排序轉換爲並行合併排序
- 14. Git從合併中排除文件
- 15. 合併排序java
- 16. 合併排序R
- 17. 並行合併排序
- 18. 錯誤的合併排序
- 19. 合併排序的數組
- 20. 合併排序的列表
- 21. 二元合併排序&天然合併排序
- 22. Ant:從合併的jar文件中排除文件
- 23. C++合併排序不會合並?
- 24. 合併列表和「合併」排序
- 25. 從合併進程中排除配置文件
- 26. 合併排序不排序數組
- 27. 罐推薦和排序(排序合併)
- 28. COBOL如何排序和合並兩個無序文件?
- 29. 多線程快速排序或合併排序
- 30. 合併排序中的參數傳遞