zoukankan      html  css  js  c++  java
  • 胜者树与败者树_简单最美的空间_百度空间胜者树与败者树_简单最美的空间_百度空间

    胜者树与败者树_简单最美的空间_百度空间

    胜者树与败者树

     胜者树与败者树是完全二叉树。就像是参加比赛一样,每个选手有不同的实力,两个选手PK,实力决定胜负,晋级下一轮,经过几轮之后,就能得到冠军。胜者树和败者树也是,

    每个叶子节点相当于一个选手,每个中间节点相当于一场比赛,每一层相当于一轮比赛。不同的是,胜者树的中间节点记录的是胜者的标号,但是败者树的中间节点记录的是败者的标号。

       胜者树与败者树的作用是什么呢?

       胜者树和败者树可以在log(n)的时间内找到最值,但是如果只是找最值,有点大材小用了,中间节点记录的标号就没有意义了。其意义在于,任何一个叶子节点的值改变后,利用中间节点的信息,还是能够快速的找到最值。在K路归并排序中经常用到。

     下面用图来表示。

    败者树:

          

      

            说明:

    3号 PK 4号--> 4号输了,3号晋级, 内部节点ls4的值变为4

    3号 PK 0 号--> 0号输了,3号晋级,内部节点ls2的值变为0

    1号 PK 2号-->1 号输了, 2号晋级,内部节点ls3的值变为1

    2号 PK 3号-->2 号输了,3号晋级,内部节点ls1的值变为2

    在 二叉树的根节点ls1上 又加了一个节点ls0,记录最后的胜者。

    当3号叶子节点的值由29变成14的时候:

    ‍(哈哈,图没画好,上传后竟然是这样的,说明百度的图像处理算法还是有问题啊,只是圆跟直线之间有个小缝隙,怎么出来一条直线?)

    3号与此时的根节点ls4记录的败者比较, 3号 PK 4号-->3号输了,4号晋级,这时,节点ls4的值变为3。。

    4号与此时的根节点ls2记录的败者比较, 4号 PK 0 号-->4号输了,0号晋级,这是,节点ls2的值变为4。

    0号与此时的根节点ls1记录的败者比较,0 号 PK 2 号 -->2号输了,0号晋级,这时,节点ls1的值变为2。 Ls0的值变为0。 

    胜者树:

     
    ‍‍



    同败者树,只是中间节点记录的是当前参加比赛的胜者的编号。

    当3号叶子节点的值由29变成14的时候:

    对于ls4节点,比较其两个儿子节点,3号 PK 4号-->4号胜出,ls4记录的值变为4号。

    对于ls2节点,比较其两个儿子节点记录的胜者,0号 PK 4号-->0号胜出,ls2记录的值变为0号。

    对于ls1节点,比较其两个儿子节点记录的胜者,0号 PK 2号-->0号胜出,ls1记录的值变为0号。

    所以,当改变某个叶子节点的值后,胜者树与败者树重构的方式不一样,败者树只是与该节点的根节点的记录有关,而胜者树与该节点的兄弟节点有关。还要有个计算计算出其兄弟节点。就浪费了这一点,其余也没什么。

    明白原理以后,算法很容易用程序写出来。

  • 相关阅读:
    Python 字符串(一)
    UVA 11552 四 Fewest Flops
    UVA 10534 三 Wavio Sequence
    UVA 1424 二 Salesmen
    UVA 11584 一 Partitioning by Palindromes
    CodeForces 549G Happy Line
    CodeForces 451C Predict Outcome of the Game
    CodeForces 567C Geometric Progression
    CodeForces 527B Error Correct System
    CodeForces 552C Vanya and Scales
  • 原文地址:https://www.cnblogs.com/lexus/p/3313694.html
Copyright © 2011-2022 走看看