多路平衡归并的实现原理


  采用多路归并技术可以减少归并次数,从而降低块读/写次数,加速排序速度。但一般路数的多少取决于内存的容量。此外,多路归并排序的快慢还取决于内部归并算法的快慢。

  设文件有n个记录,m个初始归并段,采用k路归并方法。k路归并的基本操作是,从k个归并段的第一个记录中选出最小记录,把他从输入缓冲区移入输出缓冲区。常见的方法是基于败者树的多路替代选择归并排序方法。

  在败者树中,每个叶节点存放各个归并段在归并过程中当前参加比较的记录,每个非叶节点表示的是其左、右子女节点中的败者,即在双亲节点记录下比赛中的败者,让胜者去参加更高一层的比赛。因此,败者树的根节点记录的是败者,还需要加一个节点来记录整个过程的胜者,以下图(源自百度)所示的败者树为例,实现5路归并排序。

  在上图的败者树中,b3和b4比赛,b3胜b4负,节点ls[4]的值为4,即败者b4的下标;b1和b2比赛,b1胜b2负,节点ls[1]的值为1。因为在败者树中根节点ls[1]里存储的是败者,所以用节点ls[0]来记录比赛中的胜者,即b3。

  在选出最小关键码之后,只要修改b3的值即可,将b3的值改为同一归并段中的下一个记录的关键码,然后对该节点向上的双亲节点所指的关键码进行比较,败者留在双亲节点,胜者继续向上,直至成为根节点的双亲。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM