二项式队列
1.对于Bk
根节点孩子的数量: k k k
节点的总数: 2 k 2^k 2k
深度为d的节点的数量为: C ( k , d ) C(k,d) C(k,d)
总的深度为: k + 1 k+1 k+1
构造Bk就是把两个Bk-1合并起来。
父节点比孩子要小。
2.n个节点用二项式树的组合表示:
将n写作二进制数,二进制为1的位,说明需要一棵Bk
比如13=1101,需要B0,B2,B3
3.FindMin
遍历根的所有孩子,找到最小的
4.Merge
两个森林Merge:从低位开始,对应位的Bk Merge,变为Bk+1
Bk的merge:比较两个根,将较小的作为根,较大的放在右边
5.DeleteMin
1.找到最小的根节点
2.删除该节点,产生了新的树
3.Merge k值相同的树
6.复杂度
FindMin | Merge | average/worst insert(1次) | DeleteMin |
---|---|---|---|
O(logN) | O(logN) | const/O(logN) | O(logN) |
ppt上说:N次插入的时间是O(N),又说一次插入的最坏时间是O(logN)
不懂啊