我正在学习《算法导论》中的f堆,并且“减小关键字(decrease-key)”操作确实让我困惑-为什么需要“级联砍枝”?
如果去掉此操作:
- make-heap(),insert(),minimum()和union()的成本显然保持不变
- extract-min()仍然是O(D(n)),因为在O(n(H))的“合并(consolidate)”操作中,大多数根树的成本可以在它们被添加到根列表时支付,剩余成本为O(D(n))
- decrease-key():显然是O(1)
至于D(n),尽管我无法精确解释,但我认为它仍然是O(lgn),因为没有“级联砍枝”,一个节点可能稍后才会移动到根列表中,任何隐藏在其父节点下面的节点都不会影响效率。至少,这不会使情况更糟。
很抱歉我的英语不好:(
有人能帮忙吗? 谢谢