二项树与二项堆

二项树

二项树Bk是一种递归定义的有序树。二项树B0只包含一个结点。二项树Bk由两个子树Bk-1连接而成:其中一棵树的根是另一棵树的根的最左孩子。

二项树

二项树Bk具有以下性质:

1)共有2的k次方个结点

2)树的高度为k

3)在深度i处恰有k的i组合个结点,其中i=0,1,...,k

4)根的度数为k,它大于任何其他结点的度数,并且,如果对根的子女从左到右编号为k-1k-2,...0,子女i是子树Bi的根


二项堆

二项堆H由一组二项树构成,但需要满足下面两个性质:

1H中的每个二项树遵循最小堆的性质:结点的关键字大于等于其父结点的关键字。

2)对于任意非负整数k,在H中至多有一棵二项树的根具有度数k

二项堆

二项堆常见操作:
插入:
往二项堆中插入一个元素,先创建一个只包含要插入元素的二项堆,再将此堆与原来的二项堆合并,实际上相当于把要插入的元素( B0 二项树)丢到堆中,然后看堆中是否有其它B0二项树,如果有就将两颗B0二项树合并成一棵B1二项树,然后再看是否有其它的B1二项树,如果有则将其与新生成的B1二项树合并成B2二项树,以此类推。
查找最小关键字:
由于二项堆中的每个二项树都是最小堆,所以只需遍历所有二项树的根节点,时间复杂度为O(log 2 n)
减小或增大关键字的值:
如果增大关键字的值,只需不断与子节点比较,如果比子节点大则交换,直到叶节点为止。
如果减小关键字的值,只需不断与父节点比较,如果比父节点小则交换,直到根为止。
删除一个关键字(任何一个,不仅是根):
删除的原理非常简单, 把关键字减小,让它到达根节点 ,然后删除最小值即可。下图展示了如何删除最小值1:

上图中,关键字1是二项树B4的根,删除1后,变成了4棵二项树:B0、B1、B2、B3,把这4棵树作为一个新堆,然后与原来的堆剩下的二项树合并。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值