排序 —— 最佳归并树

一、引入

初始记录经过 ”置换-选择“ 排序后,得到的是长度不等的初始归并段,此时需要进行归并排序。在外部排序的归并排序中,将当前的 p 组记录(每组含 k 个记录段)归并为存放到外存的 p 个有序记录的过程称为一趟归并,可见每个记录在每趟归并中需要两次 I/O操作(读写操作各一次),因此为了优化归并树的带权路径长度,减少归并次数,需要用到 “最佳归并树”


二、算法思想

参考哈夫曼树


三、算法过程

内存大小为750个记录,任意大小的两个归并段都可以进行归并。每归并一次,参与归并的每个记录都要读一次和写一次。其最佳归并树是什么?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 归并方案1:I/O次数 = 2*[(4*750*3)+2*750*2] = 24000

  • 归并方案2:I/O次数 = 2*[(2*750*5)+1*750*4+1*750*3+1*750*2+1*750*1] = 30000

  • 归并方案3:I/O次数 = 2*[(6*750*2)] = 18000

因此,选择归并方案3

猜你喜欢

转载自blog.csdn.net/starter_____/article/details/94458783