我感興趣的算法,我應該使用O(N log N)
讀取,滿足int
對外排序的要求和O(N)
寫爲O整數的外部排序(N日誌N)的讀取和O(N)寫道:
1
A
回答
4
如果該類型排序(其中數據不能全部放入到核心在一次)的算法後的時候,我的解決方案來自於「革命」,當高端機器具有非常初期內存比大多數現代計算器少。我還沒有制定出大O屬性,但我認爲這將是O(n)讀取,O(n日誌n)排序階段(取決於所選的排序方法)和O(n)寫入。
比方說,你的數據集有一個百萬個元素,你只可以在內存中同時滿足10萬人。以下是我要做的:
- 在第一個100,000中讀取,對它們進行排序並將其重新寫入排序列表。
- 爲每組100,000個做這個。
- 對10個組運行合併操作。
換句話說,一旦你的10個組在組內排序,從每個組抓取第一個條目。
然後寫該最低那些10的(這是最低的整個百萬的)輸出到輸出文件,並讀出從在其位置該組的下一個。
然後就繼續選擇最低的10,寫出來,並從同一組替換它。通過這種方式,最終的輸出是整個一百萬個條目的排序列表。
2
嘗試此頁:Sorting Algorithms。除了展示幾種算法的漂亮動畫之外,它還解釋了它們如何工作以及它們的複雜性。
3
退房external merge sort算法。
相關問題
- 1. 大O複雜度O(n日誌n)與O(n日誌m)
- 2. O(N)查找,但O(日誌(N))的比較排序列表
- 3. 大O符號 - O(n日誌(N))對O(的log(n^2))
- 4. 大O N^2(日誌N)
- 5. 時間複雜度O(N日誌(log n)的)+ N O(L)
- 6. 難以合併排序爲O(n日誌n)
- 7. O(log_2(n))= O(log_10(n))?
- 8. 證明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 9. 堆性能低下。 O(n)而不是\t O(日誌n)
- 10. O(nlog * n)和O(n)之間?
- 11. Big O - O(N^2)or O(N^2 + 1)?
- 12. 堆棧排序O(N)
- 13. 證明O(max {f(n),g(n)} = O(f(n)+ g(n))
- 14. 爲什麼O(N日誌N)構建二進制搜索樹?
- 15. 爲什麼插入排序的最佳情況是O(n)&not O(n^2)?
- 16. f(n)= N的大O! + 2^N
- 17. 大O符號 - 爲什麼是O(n^2/4)= O(N^2)
- 18. 爲O(n^log n)的碰撞檢測
- 19. 算法與O(N /日誌(n))的複雜性
- 20. O(nlogn)+ O(n),O(nlogn)和O(nlogn + n)之間的關係是什麼?
- 21. 爲什麼冒泡排序O(n^2)?
- 22. 查找爲O(n)
- 23. 是log(n!)= O((log(n))^ 2)?
- 24. 證明5^n = o(n!)
- 25. 證明lg(n!)= O(n!)
- 26. 哪裏可以找到O(n^2)和O(n)等的含義?
- 27. 計數no。 O(n)
- 28. 時間複雜度 - O(n^2)到O(n log n)搜索
- 29. 在漸近分析中,證明:O表示大O. O(f(n)+ g(n))= O(max {f(n),g(n)})
- 30. 顯示n^2不是O(n * log(n))?
你偶然得到了訪問Google或其他檢索算法引擎? – 2009-08-08 12:39:05
任何其他要求?複製整個數據集(N次讀取),排序,寫入整個數據集(N次寫入)。似乎符合你目前的要求。除非我誤解了你的'外部'的含義? – Thorarin 2009-08-08 12:42:39
@Thorarin有人建議數據太大以至於無法將它放在內存中。 – 2009-08-08 12:47:01