堆之二项堆
二项堆:不同度二项树的根结点从小到大链起来就是二项堆
二项树:
如图所示,4颗树分别为度为0,1,2,3的二项树
度为3的二项树:有一个根结点,(0,1,2)的二项树分别是它的叶子节点。
度为n的二项树:有一个根节点,(0,1...n-1)的二项树分别是它的叶子节点
同度二项树合并:
直接将根结点值较小的二项树挂到根结点较大的二项树的根结点下就行。
二项堆合并:
二项堆合并就是两个二项数链表合并,类似二进制相加。不同度的二项树直接串联,同度的二项树合并后再串联
举个例子:
现有两个二项堆(数字代表二项树度数):
a:1->4->5->7
b:2->3->4->5
合并后就是1->2->3->5->6->7
二项堆删除:
把待删除的二项树的叶子节点当作新的二项堆,将此二项堆和剔除掉此二项树的原二项堆合并即可。
二项堆相对于别的堆有什么好处?
单个节点插入的时间复杂度是O(1) ~O(logn)。均摊时间复杂度为O((2^n - 1)/2^(n-1)) = O(2);平均性能很优越。复杂度证明省略。
二项堆缺点:
查找复杂度o(logn)