什么叫winner tree

来源:百度知道 编辑:UC知道 时间:2024/06/15 08:40:39

这叫做赢者树,是竞赛树中的一个,还有一个输者树.

1.基本东西:
形象来说,外部节点表示选手捉对厮杀,内部节点表示比赛的胜者(败者)。定
义如下:对于n名选手,赢者树是一棵含n个外部节点,n-1个内部节点的完全二叉树
,其中每个内部节点记录了相应赛局的赢家(或输家)。
赢者树的一个优点在于即使一名选手得分改变了,也只需修改从它到根的那条路径
,而不必改变其他比赛结果。

2.抽象数据描述-WinnerTree
WinnerTree{
实例:
完全二叉树,每个节点表示相应比赛的赢者,外部节点表示选手;
操作:
Creat()---创建一个空的赢者树;
Initialize(a,n):对有n个选手a[1:n]的赢者树进行初始化;
Winner()---返回比赛的赢者;
Replay(i)---选手i变化时,重组赢者树;
};

3.类WinnerTree (202.38.64.10/~wurong/Ctree.rar)
n名选手的赢者树需要n-1个内部节点t[1:n-1]。选手(外部节点)用e[1:n]表示
。故t[i]为数组e的一个索引而且类型为int。t[i]给出了赢者树中节点i对应比赛的
赢者。为了实现ADT操作,必须能够确定外部节点e[i]的父节点t[p]。根据赢者树完
全二叉树的特点,最低层最左端的内部节点编号为2S,这里s=log2(n-1)因此最低层
内部节点数目为n-2S,那么相应的最低层的外部节点数目LowExt应该为这个数值的
2倍,那么倒数第二层的最左端外部节点号为LowExt+1,设offset=2S+1-1,可知对
于任何外部节点e[i],其父节点t[p]满足一下关系:

p== (i+offset)/2 i<=LowExt

(i-LowExt+n-1)/2 i>LowExt

类定义:私有成员包括:MaxSize(允许最大