您的位置:首页 > 其它

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

2013-09-10 23:48 85 查看
胜者树与败者树_简单最美的空间_百度空间

胜者树与败者树

胜者树与败者树是完全二叉树。就像是参加比赛一样,每个选手有不同的实力,两个选手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号。

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: