败者树多路排序

定义:

败者树是一个完全二叉树,非叶子节点记录失败者。那么相对于胜者树,具有访存小的优势。胜者树胜者拿走后,整条通路(从叶子到根)所有记录的胜者信息失效,那么新加入节点需要从叶子一直遍历到根,有可能每次都要写入(更新新的胜者)。而败者树,新加入的节点可以利用整条路径的败者信息。

败者树构建

Alt text

构建过程:
① 初始四个数组,1,2,3,4,内部节点为-1;构建完全后,内部节点记录数组编号。
② 数组4中元素18与父节点比较,父节点为-1,更新为4,退出;等待后面元素更新父节点。
③ 数组3中元素11与父节点记录的败者4(数组4中元素18)比较,记录败者4,胜者3上浮,更新,遇到-1停止上浮,退出。
④ 数组2中元素6与父节点比较,父节点为-1,更新为2,退出;等等后面元素更新父节点。
⑤ 数组1中元素7与父节点记录的败者2(数组2中元素6)比较,记录败者1,胜者2上浮与父节点记录的3比较。
⑥ 数组2(6)与数组3(11)比较,记录败者3,将最终胜者2单独记录。
⑦ 至此,败者树构建完毕。

败者树排序

这里写图片描述

规定:小于等于为胜利者。
① 胜者为数组1,拿掉5以后,数组1弹出一个元素。
② 数组1中新元素12与父节点比较(即数组2中元素6比较),记录败者1,胜者2上浮,与数组3比较,取得胜利。
③ 胜者为数组2,拿掉6以后,数组2弹出一个元素。
④ 数组2中新元素9与父节点比较(即数据1中元素12比较),记录败者1,胜者2上浮,与数组3比较,取得胜利。
⑤ 胜者为数组2,拿掉9以后,数组2弹出一个元素。
⑥ 数组2中新元素12与与父节点比较(即数组1中元素12比较),记录败者1,胜者2上浮,与数组3比较,失败。
⑦ 胜者为数组3,拿掉11以后,数组3弹出一个元素。
⑧ 数组3中新元素15与父节点比较后(即数组4中元素18比较),记录败者4,胜者3上浮,与数组2比较,失败。
⑨ 胜者为数组2.

代码实现
#ifndef _LOS
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值