【发布时间】:2012-02-13 03:56:59
【问题描述】:
斐波那契堆是否可能包含不是二叉树的树?如果是这样,这将如何发生?可以举个例子吗?
【问题讨论】:
标签: data-structures tree heap fibonacci-heap
斐波那契堆是否可能包含不是二叉树的树?如果是这样,这将如何发生?可以举个例子吗?
【问题讨论】:
标签: data-structures tree heap fibonacci-heap
是的,这可能发生。直观地说,原因是在斐波那契堆中,减少键操作可以通过从较大的树中切割子树来工作,从而导致两棵树(可能)不是二叉树。这与二项式堆不同,在二项式堆中,reduce-key 的工作原理是从其键一直减少到根的节点进行冒泡操作。
看一个具体的例子,让我们在一个斐波那契堆中插入五个元素,比如 1、3、5、7 和 9。这就是堆
1 - 3 - 5 - 7 - 9
现在,让我们做一个 dequeue-min,它提取 1。我们现在尝试将所有剩余的元素压缩在一起,合并树如下:
3
/|
5 7
|
9
现在,假设我们对 9 的键进行减键操作,将键减为 6。为此,我们从其父节点中切出 9 并将其合并到顶部的树列表中,从而产生
3 - 6
/|
5 7
现在根为 3 的树只包含 3 个元素,所以它不再是二叉树了。
希望这会有所帮助!
【讨论】: