败者树

败者树

外部排序时间开销 = 读写外存的时间 + 内部排序所需时间 + 内部归并所需时间
归并趟数S = [logkr]向上取整,归并路数k增加,归并趟数S减少,读写磁盘总次数减少

使用k路平衡归并策略,选出一个最小元素需要对比关键字(k-1)次,导致内部归并所需时间增加
eg:8路平衡归并,从八个归并段中选出一个最小元素需要对比关键字7次
可用“败者树”进行优化!

什么是败者树?

一、败者树的构造

失败者留在这一回合,胜利者进入下一回合比拼
最后只有一个冠军在所有比拼中获胜
若有8位参赛者,则构造败者树需要7次比拼
假如冠军弃赛,基于已经构建好的败者树,选出新的胜者只需进行3场比赛

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

每个叶子结点对应一个归并段
分支结点记录失败者来自哪个归并段
根节点记录冠军来自哪个归并段
对于k路归并,第一次构造败者树需要对比关键字k-1次
有了败者树,选出最小元素,只需对比关键字[log2k]向上取整次

二、败者树的实现思路

k路归并的败者树只需要定义一个长度位k的数组即可
叶子结点是“虚拟的”

三、败者树解决的问题

使用多路平衡归并可减少归并趟数,但是用老土方法从k个归并段选出一个最小/最大元素需要对比关键字k-1次构造败者树可以使关键字对比次数减少到[log2k]向上取整。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

和安韩Pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值