堆的变体:
- 二项堆
上篇博客中我讲了下数据结构二叉堆,而今天讲的二项堆与他最大的不同是它可以快速的合并成两个堆,通过一个特殊的树结构完成的。
下面列出了三种堆的时间复杂的比较。
次那个上面我们可以看出与二叉堆的差别在于找到最小元素和合并。
二叉堆查找最小元素的时间复杂度为O(1),而二项堆: O(lgn)
二叉堆合并花费:O(n),二项堆:O(lgn)
二项堆是二项树的集合。所以我们讲二项堆之前先来弄明白二项树。
1.二项树
如下图中所示,树B0是由一个结点构成的,Bk是由两棵Bk-1的树组成的,是通过连接他们的树根组成的。即其中一棵树的根变成另一棵树的最左边的孩子。
对于二项式的定义如下:
- 度数为0的二项树只包含一个结点
- 度数为k的二项树有一个根结点,根结点下有k个子女,每个子女分别是度数分别为
的二项树的根