【算法概论】分治算法:k路归并

 

首先了解两个概念,胜者树败者树

胜者树和败者树都是二叉排序树,是树形选择排序的一种变形。每个叶子节点相当于一位选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。胜者树的中间结点记录的是胜者的标号,败者树的中间结点记录败者的标号。因此,胜者树和败者树的根节点,就是最终的胜者或败者 —— 反映到一组数据中,可以是最大值或最小值。

胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。


胜者树

规定数小者胜。

b3 PK b4,b3胜b4负,内部结点ls[4]的值为3;

b3 PK b0,b3胜b0负,内部结点ls[2]的值为3;

b1 PK b2,b1胜b2负,内部结点ls[3]的值为1;

b3 PK b1,b3胜b1负,内部结点ls[1]的值为3。

如果我们将b3的值改为11,就需要对该胜者树进行重构,重构后的胜者树如下所示:

b3 PK b4,b3胜b4负,内部结点ls[4]的值为3;

b3 PK b0,b0胜b3负,内部结点ls[2]的值为0;

b1 PK b2,b1胜b2负,内部结点ls[3]的值为1;

b0 PK b1,b1胜b0负,内部结点ls[1]的值为1。

由上面的例子,可以很容易的理解:

胜者树的一个优点是,如果一个选手的值改变了,只需要沿着从该结点到根结点的路径修改这棵二叉树,而不必改变其他比赛的结果。

 

败者树:

败者树是胜者树的一种变体。在败者树中,

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值