左偏树札记

用左偏树实现的优先队列,合并操作的时间复杂度为对数时间。关于左偏树为什么有此特点,我们还是要从左偏树的定义出发,此处我们对高度左偏树进行分析;

相关定义:

扩展二叉树:一棵扩展二叉树是一棵二叉树,其中所有空的子二叉树都被替换为一个方块节点(称为外部结点,而树中原来结点称为内部结点);扩展二叉树是为讲解左偏树定义而引人的概念,并非真的是有方块节点存在,只是从概念上而言的。

                                                                                                                                          0                                                    如果x是外部结点

shorstest(x):定义为从x到外部结点的最短路径长度。shorstest(x)= {

                                                                                                                                            1+min{ shorstest(LeftChild(x)),shorstest(RightChild(x))}          其他;

左偏树:是这样一棵二叉树,如果非空,那么公式:

                                                           shorstest(LeftChild(x)) >= shorstest(RightChild(x))

对于每个内部结点x都满足;

 

左偏树特性:

设r是一个具有n个结点(内部)的左偏树的根节点:

(a) n >= 2^shorstest(r) -1;

(b) 最右边从根到外部结点的路径是从跟到外部结点的最短路径。其长度shortstest(r)<=log2 (n+1);(以2为底);

注意其实,左偏树的合并就是沿着两棵待合并左偏树的(b)特性中的最短路径进行的,由于其长度有上限 logn 故合并这两棵树时的时间复杂度也就是O(log n),这样就保证了左偏树合并的高效性;

总而言之:左偏树的左偏特性使其最右边的从根到外部结点的路径长度上限为 log(n), 其实一棵具有n个结点的左偏树当它为满二叉树时,该路径长度达到上限,该上限即为n个结点的满二叉树的高度 k=log2(n+1);这样就保证了合并的高效性;

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值