败者树

败者树

多路平衡归并带来的问题

外部排序时间开销=读写外存的时间+内部排序所需时间+内部归并所需 时间

[归并趟数S=lceil log_kr ceil ,归并路数k增加,归并趟数S减少,读写磁盘总次数减少 ]

使用k路平衡归并策略,选出一个最小元素需要对比关键字(k-1)次, 导致内部归并所需时间增加

8路平衡归并,从八个归并段中选出一个最小元素需要对比关键字7次

可用“败者树”进行优化

什么是“败者树”

败者树的构造

败者树——可视为一棵完全二叉树(多了一个头头)。k个叶节点分别是当前参加比较的元素,非叶子结点用来记忆左右子树中的”失败者“,而让优胜者往上继续进行比较,一直到根节点。

败者树的使用

败者树在多路平衡归并中的应用

对于k路归并,第一次构造败者树需要对比关键字k-1次

有了败者树,选出最小元素,只需要对比关键字

[lceil log_2k ceil 次 ]

败者树的实现思路

知识回顾

原文地址:https://www.cnblogs.com/jev-0987/p/13322219.html