我正在研究以下算法:
输入程序:“n”输入包含数字的文件,并假设每个输入文件都已排序。
输出到程序:单个输出文件,以排序方式包含所有元素
例如:
n = 4
file1 = [1,5,6,9]
file2 = [2,8,10,15]
file3 = [3,7,9,11]
file4 = [2,4,6,8]
输出= [1,2,2,3,4,5,6,6,7,8,8,9,9,10,11,15]
我的方法:读取每个文件的第一个元素,找到它们中的最小元素并将其写入输出文件。 然而,这是非常缓慢的,并且有一组约束条件:
内存:程序需要可扩展,文件大小可以扩展到1.4GB,因此在内存中读取整个文件并不是首选
文件数量:文件数量可能增长到很多,这进一步导致性能下降。
我使用C编程语言来做这件事,所以请相应地提出建议,我不能改变我的语言。
答案 0 :(得分:1)
如果文件已经排序,请使用合并排序版本,这需要时间O(n)来合并已排序的集合。取前两个列表并合并它们并继续,直到没有文件为止。
这应该花费时间等于O(nm),其中n是文件的大小,m是文件的数量。
希望这有帮助!