我感兴趣的算法,我应该使用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(N)查找,但O(日志(N))的比较排序列表
- 2. 大O符号 - O(n日志(N))对O(的log(n^2))
- 3. 时间复杂度O(N日志(log n)的)+ N O(L)
- 4. 难以合并排序为O(n日志n)
- 5. 证明最大(O(f(n)),O(g(n)))= O(max(f(n),g(n))
- 6. 堆性能低下。 O(n)而不是\t O(日志n)
- 7. O(nlog * n)和O(n)之间?
- 8. 堆栈排序O(N)
- 9. 证明O(max {f(n),g(n)} = O(f(n)+ g(n))
- 10. 为什么O(N日志N)构建二进制搜索树?
- 11. 为什么冒泡排序O(n^2)?
- 12. 是log(n!)= O((log(n))^ 2)?
- 13. 哪里可以找到O(n^2)和O(n)等的含义?
- 14. 时间复杂度 - O(n^2)到O(n log n)搜索
- 15. 计数no。 O(n)
- 16. 在渐近分析中,证明:O表示大O. O(f(n)+ g(n))= O(max {f(n),g(n)})
- 17. 为什么排序字符串O(n log n)?
- 18. 你如何看出O(log n)和O(n log n)之间的差异?
- 19. 在O(N)
- 20. 为什么两个O(N)方法被认为是O(N)?
- 21. 快速排序中位数在O(n log n)
- 22. 通用实用的排序算法比O(n log n)快吗?
- 23. 迭代快速排序与O(日志n)额外的空间(堆栈)
- 24. 在JavaScript中将O(n^3)更改为O(n^2)
- 25. 为什么TreeSet迭代O(n)而不是O(n * logn)?
- 26. 代码O(nlog(n))的T(n)如何?
- 27. 你可以在O(n)摊销复杂性中排序n个整数吗?
- 28. O(n)排序算法可能吗?
- 29. 复杂性理论中的O(lg(n))* O(lg(n))
- 30. 合并排序用C与O(N *登录[N])运行
你偶然得到了访问Google或其他检索算法引擎? – 2009-08-08 12:39:05
任何其他要求?复制整个数据集(N次读取),排序,写入整个数据集(N次写入)。似乎符合你目前的要求。除非我误解了你的'外部'的含义? – Thorarin 2009-08-08 12:42:39
@Thorarin有人建议数据太大以至于无法将它放在内存中。 – 2009-08-08 12:47:01