【问题标题】:sorting a file containing huge amount of data对包含大量数据的文件进行排序
【发布时间】: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


【解决方案1】:

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

因此,总时间复杂度为

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

所以,应该是 IO Time + O(Nlogk)

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

-帕万。

【讨论】:

    猜你喜欢
    • 2017-05-05
    • 2021-02-11
    • 2011-02-20
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多