在已丢失2个或多个子节点之后升级节点



在Fibonacci堆的decrease-key操作中,如果允许在切割节点并将其融合到根列表(提升节点)之前丢失s > 1子级,这会改变整体运行时复杂性吗?我认为复杂性没有变化,因为潜力的变化是一样的。但我不确定我是否是对的。

摊销分析如何证明这一点?

更改斐波那契堆中节点可能丢失的子级数确实会影响运行时,但我怀疑,如果你小心处理,你仍然会得到相同的渐近运行时。

如果允许每个节点在升级回根节点之前丢失多个子节点,那么潜在函数将保持不变,这是正确的。然而,潜在函数并不是斐波那契堆效率的来源。我们执行级联切割(在减少键期间将多个节点提升回根级别)的原因是为了确保具有n阶的树中有多个在n中呈指数级的节点。这样,当执行出列min操作并将树合并在一起,使得每个阶最多有一棵树时,存储所有节点所需的树的总数是节点数量的对数。标准标记方案确保n阶的每棵树至少具有Θ(φn)节点,其中φ是黄金比率(约1.618…)

如果在将节点提升回根之前,允许从每棵树中删除更多节点,我的怀疑是,如果将丢失子节点的数量限制在某个常数,则仍然应该获得相同的渐近时间界限,但可能具有更高的常数因子(因为每棵树包含的节点更少,因此需要更多的树)。如果你想要一个确切的值,那么写下数学公式看看每个树中节点数量的递归关系可能是值得的。

希望这能有所帮助!

最新更新