一个题目提高外排序效率的方法想到的

今天看了一个题目“提高外排序效率的方法”。

(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个。

 

证明方法比扫雪机的证明方法更加直观,今天想来,写下来,供大家看看。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值