[算法] 胜者树实现

胜者树实现

从空间复杂度上看,胜者树or败者树应该会占用更大的空间。在胜者树的内部节点存储的不是实际的数据,而是胜出的节点的索引,这点有点类似B+树。

下面简单实现一下胜者树。

public class SuccessTree{

  int [] data;

  int [] victoindex;

  public SuccessTree(int length){

    data = new int[length];  

    victorindex = new int[length];

  }

}

这里的关键是这棵胜者树如何组织,假设我们采用下面的方式来组织胜者树,是否是合理的呢?其中紫色节点为叶子节点,蓝色为内部判断节点。

我们假设零度节点个数,一度节点个数,二度节点个数分别为:$n_{0},n_{1},n_{2}$

则有

$n_{0}+n_{1}+n_{2}= 1+ 2*n_{2}+n_{1}$,即

$n_{0}= 1+ n_{2}$

假设组成的败者树是正确的,那么应该是没有一度节点的,所以总的节点个数是

$2*n_{2}+1$,也就是是奇数个,这样的满二叉树肯定是没有一度节点的

所以这样的组织方式可以接受!

 

 http://blog.csdn.net/sqx2011/article/details/8241734

[1] http://www.cnblogs.com/qianye/archive/2012/11/25/2787923.html

[2] http://blog.csdn.net/baisung/article/details/7671329

[3] http://blog.csdn.net/zzran/article/details/8273584

[4] http://shmilyaw-hotmail-com.iteye.com/blog/1776132

[5] http://blog.csdn.net/tiantangrenjian/article/details/6838491

[6] http://blog.csdn.net/whz_zb/article/details/7425152

转载于:https://www.cnblogs.com/deepblueme/p/4800355.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值