2009-08-08 65 views
1

我感兴趣的算法,我应该使用O(N log N)读取,满足int对外排序的要求和O(N)为O整数的外部排序(N日志N)的读取和O(N)写道:

+4

你偶然得到了访问Google或其他检索算法引擎? – 2009-08-08 12:39:05

+0

任何其他要求?复制整个数据集(N次读取),排序,写入整个数据集(N次写入)。似乎符合你目前的要求。除非我误解了你的'外部'的含义? – Thorarin 2009-08-08 12:42:39

+0

@Thorarin有人建议数据太大以至于无法将它放在内存中。 – 2009-08-08 12:47:01

回答

4

如果该类型排序(其中数据不能全部放入到核心在一次)的算法后的时候,我的解决方案来自于“革命”,当高端机器具有非常初期内存比大多数现代计算器少。我还没有制定出大O属性,但我认为这将是O(n)读取,O(n日志n)排序阶段(取决于所选的排序方法)和O(n)写入。

比方说,你的数据集有一个百万个元素,你只可以在内存中同时满足10万人。以下是我要做的:

  • 在第一个100,000中读取,对它们进行排序并将其重新写入排序列表。
  • 为每组100,000个做这个。
  • 对10个组运行合并操作。

换句话说,一旦你的10个组在组内排序,从每个组抓取第一个条目。

然后写该最低那些10的(这是最低的整个百万的)输出到输出文件,并读出从在其位置该组的下一个。

然后就继续选择最低的10,写出来,并从同一组替换它。通过这种方式,最终的输出是整个一百万个条目的排序列表。

+0

很好的答案,但那可能是他的老师可以告诉他的那种事呢?如果他在这里发表问题,我认为他会期待代码。只是给我的意见,这仍然是一个很好的答案。 – toto 2009-08-15 04:57:11

+0

可能,但自从算法被要求(即使是在C++中),并且它被标记为家庭作业,我并不热衷于为他们完成工作。从长远来看,它会让提问者更好地学习如何学习,而不仅仅是给出答案。 – paxdiablo 2009-08-15 08:54:11

2

尝试此页:Sorting Algorithms。除了展示几种算法的漂亮动画之外,它还解释了它们如何工作以及它们的复杂性。

相关问题