1. 斐波那契堆的摊还分析中 extract-min 是 O(log n) 摊还、decrease-key 是 O(1) 摊还,势函数 Φ=t+2m 如何支撑这两个界?
说明斐波那契堆的摊还分析,解释为什么 extract-min 是 O(log n) 摊还、decrease-key 是 O(1) 摊还,并说明势函数 Φ=t+2m 如何支撑这两个界?
- 斐波那契堆的树根链表与懒惰删除
- 势函数 Φ=t+2m 的定义
- extract-min 与 decrease-key 的摊还分析
斐波那契堆由若干最小堆序树组成,用势函数 Φ=t+2m 分析,其中 t 是根树数量,m 是标记节点数。extract-min 时需要取出最小根、把它的孩子加入根链表,然后合并相同度数的树(consolidation)。consolidation 使根数 t 从约 D 降到 O(log n),其中 D 为最大度数(由斐波那契数列导出 D=O(log n)),实际代价 O(t) + O(D),而势减小约 t,摊还后为 O(log n)。decrease-key 时若节点键值变小使父节点失去最小堆序,则把该节点从父节点剪断并加入根链表,进行级联剪切;若父节点已标记则递归剪切。每次 cut 只改变一个节点,实际代价 O(1),势增量为 O(1)(t 加 1,m 减 1),故摊还 O(1)。
势函数同时衡量根树数和标记数:extract-min 通过大量合并减小 t,用偿债来支付 O(log n) 的合并代价;decrease-key 通过级联剪切保持 t 与 m 的界,使每次操作摊还 O(1)。标记机制保证每个节点失去一个孩子后必须再失去一个孩子才会被剪断,从而维持 D=O(log n) 的度数上界。