排序包含大量数据的文件

时间:2011-07-03 12:31:50

标签: time-complexity array-algorithms

考虑一个包含N个单词的文件,每行一个单词。文件太大,所以整个内存一次都无法在内存中读取。
我的答案: 将文件分为k chunks。每个块的大小x = N/k
一次将一个块读入内存并对其进行排序并写回文件。排除所有k个块。
现在做一个k way merge
分析总时间复杂度。我该怎么做?
排序每个块的时间= xlogx(假设我使用快速排序)
合并k块的时间= klogk(是吗?)
总时间复杂度= ??
每周分析时间复杂度

1 个答案:

答案 0 :(得分:1)

每个块的大小为N / k,块的数量为k。

因此,总时间复杂度为

读取N / k块+对每个块进行排序,即O(N / k klogk)+合并那些k块的每个[部分] O(Nk)+文件写入。

因此,它将是IO Time + O(Nlogk)

我也在学习这些东西......所以如果有人能分析并纠正我,如果我错了,那就太棒了。

-Pavan。