今天看了一个题目“提高外排序效率的方法”。
(1)通过置换-选择方法减少初始归并段的个数,可以降低一半。
例如:若一组排序码K1>K2>...Kn,缓冲区可容纳M个排序码,如果用内排序,则可以产生n/M个归并段。
若采用置换-选择方法,可以产生n/2M个归并段。
(2)通过败者数进行多路归并减少归并趟数,即降低归并树高度。
(3)利用缓存提高IO和CPU的并行性
特别想提一下其中置换-选择方法中,如果缓冲可容纳M个排序码,则可以得到2M的归并段,书中给出了扫雪机的一个类比证明,其实可以这样看:
由于在置换-选择中,当提取一个排序码ki1(第i段提取的第一个关键词)时,将会从文件中读取一个ki2,如果ki2<ki1(低于ki1这个门槛值),则ki2放在下一个归并段中,否则放在当前归并段中,因此可以看做两者概率均为1/2,则第i段可以选拔出的记录期望是:
1 + 1/2 + 1/4 + 1/8 +... = 1/(1-1/2) = 2
如果有M个段(缓冲可容纳M个排序码,因此可以看做是M个段),则最终可以选拔出的记录数为2*M个。
证明方法比扫雪机的证明方法更加直观,今天想来,写下来,供大家看看。