【问题标题】:Promote a node after already lost 2 or more children在已经丢失 2 个或更多子节点后提升节点
【发布时间】:2013-08-16 16:59:13
【问题描述】:

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

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

【问题讨论】:

  • 你还坚持摊销分析证明呢?

标签: algorithm math data-structures priority-queue fibonacci-heap


【解决方案1】:

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

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

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多