经典指数          
原因
1144
浏览数
0
收藏数
 

你现在有一个文件,文件中顺序存有N个记录,R1,R2,...,RN,这些记录不是有序的,但是你知道一个整数M,这些记录满足R1以及RM+1。 1,设计一个算法或编写一个程序,将文件中的记录排序为R1',R2',...,RN',算法或程序读取文件的次数为O(N),不限内存使用, 2,设计一个算法或编写一个程序,将文件中的记录排序为R1',R2',...,RN',算法或程序读写文件的次数为O(N),空间复杂度为O(1),亦即,你使用的内存大小和M,N均无关。

     举报   纠错  
 
切换
1 个答案

     第一个要求是读取文件次数为O(N),但是不限制内存的使用;第二个要求是读取文件次数为O(N),但是空间复杂度为O(1)。区别在于限不限制内存的使用。

如果不限制内存的使用,我们可以将文件中的内容全部读取到内存中,保存为数组,然后再对数组进行排序;如果限制内存的使用,我们可以采用外排序来解决这个问题,外排序一般会借助于文本文件。

  第一种方法:

将原文件中的记录顺序读取到内存中,以数组保存,然后以M为分隔将

数组看为两组,互相比较两组元素之后输出,最后输出剩下的元素。

 性能分析:

1. 时间复杂度是O(N),因为读取原文件N次,比较小于4N次,输出N次,

加在一起的数量级是N的一次方

2. 空间复杂度是N,因为将原文件中的记录事先读取到内存中,以数组

保存,这个辅助空间的长度是N

 第二种方法:

将原文件中的记录以M分隔,读取后保存到两个临时文件file_temp1.

txt

和file_temp2.

txt

中,然后将这两个临时文件中保存的数组看为两组,

分别从这两个临时文件中读取元素,比较后输出,最后读取并输出剩下

的元素。

 1. 时间复杂度是O(N),因为读取原文件N次,写临时文件N次,读取临时

 文件N次,比较小于6N次,输出N次,加在一起是N的一次方

2. 空间复杂度是1(与M,N均无关系)

 
切换
撰写答案