败者树

败者树:主要应用在外排序中,减少外排序内部排序的比较次数。在双亲节点记下刚进行完的这场比赛的败者,让胜者去参加更高一层的比赛,另外,根节点处加入一个节点来记录整个比赛的的赢者。便可以得到一棵败者树。败者树中的每个分支节点记录了比赛失败者而不是胜利者的索引。创建败者树,我们用数组ls记录参加比赛的选手,ls中元素的值表示当前选手的得分,比如ls{10,9,20,6,12},我们要选出得分最小的参加者为比赛的赢者。我们使用一个数组b记录当前孩子节点失败者的索引。使用b[0]存储最后赢者的索引。当数组b中某个参与者的得分改变时,我们只需要沿着从当前节点到根节点的路径修改败者树,而不必改变其他比赛的结果,重构过程如下:将新进入的节点与其父节点进行比赛,把败者的下标放在父节点中,而赢者再与上一级的父节点进行比较;比赛沿着到根节点的路径不断进行,直到节点b[1]处,把败者的索引放在节点b[1],把赢者的索引放在节点b[0]。如图:
#include<iostream>
using namespace std;

//调整函数
void adjust(int ls[], int b[],int n, int s)
{
	//沿着叶子节点b[s]到根节点ls[0]的路径进行调整。
	int t = (n + s) / 2;//当前调整节点的父节点,
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值