Time complexity 对包含大量数据的文件进行排序

Time complexity 对包含大量数据的文件进行排序,time-complexity,array-algorithms,Time Complexity,Array Algorithms,假设一个文件包含N个单词,每行一个单词。该文件太大,无法在内存中一次性读取整个文件。 我的回答: 将文件分成k个块。因此每个块的大小x=N/k 一次将一个块读入内存,并对其进行排序,然后写回文件。对所有k个块进行排序。 现在执行k路合并。 分析总时间复杂度。我怎么做? 对每个块进行排序的时间=xlogx(假设我使用快速排序) 合并k块的时间=klogk(是吗??) 所以总时间复杂度=?? 分析时的Am周复杂度每个区块大小为N/k,区块数量为k 所以,总的时间复杂度是 读取N/k块

假设一个文件包含
N
个单词,每行一个单词。该文件太大,无法在内存中一次性读取整个文件。
我的回答: 将文件分成
k个块
。因此每个块的大小
x=N/k

一次将一个块读入内存,并对其进行排序,然后写回文件。对所有k个块进行排序。
现在执行
k路合并

分析总时间复杂度。我怎么做?
对每个块进行排序的时间=
xlogx
(假设我使用快速排序)
合并k块的时间=
klogk
(是吗??)
所以总时间复杂度=
??


分析时的Am周复杂度

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

所以,总的时间复杂度是

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

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

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


-Pavan.

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

所以,总的时间复杂度是

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

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

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


-帕万。

嗯,复杂性不是什么。您还应该考虑从磁盘读取比从内存读取慢。而且我认为合并的时间是NlogN。所以总的复杂性是NlogN,但是你应该考虑把数据从磁盘加载到内存需要花费多少(你正在做超过2N次)。快速注释是Quasr排序仍然是O(n ^ 2)最坏的时间,虽然仍然是O(n log n)的平均值。Mergesort的平均和最坏时间是O(n logn)。好吧,复杂性并不是什么。您还应该考虑从磁盘读取比从内存读取慢。而且我认为合并的时间是NlogN。所以总的复杂性是NlogN,但是你应该考虑把数据从磁盘加载到内存需要花费多少(你正在做超过2N次)。快速注释是Quasr排序仍然是O(n ^ 2)最坏的时间,虽然仍然是O(n log n)的平均值。Mergesort的平均和最差时间为O(n log n)