二项树与二项堆
来源:互联网 发布:access2007数据库引擎 编辑:程序博客网 时间:2024/05/22 07:03
二项树
二项树Bk是一种递归定义的有序树。二项树B0只包含一个结点。二项树Bk由两个子树Bk-1连接而成:其中一棵树的根是另一棵树的根的最左孩子。
二项树Bk具有以下性质:1)共有2的k次方个结点
2)树的高度为k
3)在深度i处恰有k的i组合个结点,其中i=0,1,...,k
4)根的度数为k,它大于任何其他结点的度数,并且,如果对根的子女从左到右编号为k-1,k-2,...,0,子女i是子树Bi的根
二项堆
二项堆H由一组二项树构成,但需要满足下面两个性质:
1)H中的每个二项树遵循最小堆的性质:结点的关键字大于等于其父结点的关键字。
2)对于任意非负整数k,在H中至多有一棵二项树的根具有度数k。
二项堆常见操作:
插入:
往二项堆中插入一个元素,先创建一个只包含要插入元素的二项堆,再将此堆与原来的二项堆合并,实际上相当于把要插入的元素(B0二项树)丢到堆中,然后看堆中是否有其它B0二项树,如果有就将两颗B0二项树合并成一棵B1二项树,然后再看是否有其它的B1二项树,如果有则将其与新生成的B1二项树合并成B2二项树,以此类推。
查找最小关键字:
由于二项堆中的每个二项树都是最小堆,所以只需遍历所有二项树的根节点,时间复杂度为O(log2n)
减小或增大关键字的值:
如果增大关键字的值,只需不断与子节点比较,如果比子节点大则交换,直到叶节点为止。
如果减小关键字的值,只需不断与父节点比较,如果比父节点小则交换,直到根为止。
删除一个关键字(任何一个,不仅是根):
删除的原理非常简单,把关键字减小,让它到达根节点,然后删除最小值即可。下图展示了如何删除最小值1:上图中,关键字1是二项树B4的根,删除1后,变成了4棵二项树:B0、B1、B2、B3,把这4棵树作为一个新堆,然后与原来的堆剩下的二项树合并。
0 0
- 二项树与二项堆
- 半路算法之二项树与二项堆
- 《算法导论》笔记 第19章 19.1 二项树与二项堆
- 与
- 与
- “” 与 “”
- ##与#
- >> 与 > >
- :与::
- &与&&
- && 与 &
- [[与((
- >>与>>>
- *与++
- *与++
- ++与++
- ->与 .
- :与::
- JSP EL表达式详细介绍
- iOS UI10_tableView的编辑
- ajax传输json到后台
- QT正则表达式
- redhat JDK-1.8安装
- 二项树与二项堆
- SQL 截取某字段第一个特殊字符(#为示例)前的所有字符,若字段里没有特殊字符(#号)则取全部字段
- refresh的停车场 (栈+队列)
- PHP_PHP开发框架-codeigniter
- 使用XIB拖出来的UIButton,selected状态下,button出现多余背景颜色
- listview+EditText 实现过滤搜索listview中的内容
- iOS textfield浅析
- 贪心法
- Java线程中断理解(interrupte)