【发布时间】:2011-07-03 12:31:49
【问题描述】:
考虑一个包含N 字的文件,每行一个字。该文件太大,因此无法一次在内存中读取整个文件。
我的回答:
把文件分成k chunks.所以每个chunk的大小x = N/k
一次将一个块读入内存并对其进行排序并写回文件。对所有k个块进行排序。
现在做一个k way merge。
分析总时间复杂度。我该怎么做?
对每个块进行排序的时间 = xlogx(假设我使用快速排序)
合并 k 个块的时间 = klogk(是吗??)
所以总时间复杂度=??
每周都在分析时间复杂度
【问题讨论】:
-
嗯,复杂性不是什么。您还应该考虑从磁盘读取比从内存慢。我也认为合并的时间是NlogN。所以总复杂度是 NlogN 但你应该考虑将数据从磁盘加载到内存需要多少(你做了超过 2N 次)。
-
快速说明是快速排序仍然是 O(n^2) 最差的时间,但仍然是 O(n log n) 平均时间。 Mergesort 的平均和最差时间是 O(n log n)
标签: time-complexity array-algorithms