【发布时间】:2014-07-25 00:41:25
【问题描述】:
我正在阅读an algorithm to get the Next Greater Element for each element of an array。
该网站声称他们的代码在O(n) 时间运行,但我无法理解它。
从左到右完整遍历数组本身将花费O(n),除此之外,当我们遍历列表时,每个索引处可以有多个推送/弹出操作。
虽然推送/弹出操作需要恒定的时间,但如果每个索引元素平均调用 m 次,我们将有 O(m) 作为每个索引的推送/弹出操作的成本,导致 @ 987654326@ 作为总成本,现在由于推送/弹出操作的总数应该大约(或可能完全)等于n,我们可以说mn 大约(或可能完全)等于@987654329 @ 暗示 m 是一个常数。
我的理由对吗?
我自己的推理仍然没有适当的清晰度,除了验证/无效我的理由之外,有人可以提供更好的解释吗?
【问题讨论】:
-
解释(格式不佳)在原帖的底部。 每个元素可能的“多个”推送/弹出可能具有与 N 无关的顶端固定常数。“最坏的情况发生在所有元素按降序排序时。如果元素按降序排序,那么每个元素最多被处理 4 次。”
标签: c algorithm stack asymptotic-complexity