有一个问题询问从最小堆中取出最小元素是否为o(logn)时间,我认为它是错误的,因为它需要恒定时间,因为最小元素在顶部。但答案是正确的,教师的解释是,常数时间也是O(logn),这是一个措辞问题。我很困惑。那么在实践中,我们是否将常量时间视为O(logn)的运行时间?
答案 0 :(得分:1)
O(1)确实是O(log n)。但是,O(log n)的所有内容都不是O(1)。 O是一个上限,所以你总是可以使用一个增长更快的函数。
这样想:
答案 1 :(得分:0)
事实证明,O符号只是问题的上限。恒定时间可以放在任何O符号中,因为上限没有限制,甚至可能一直到n!。大O符号不是theta。
答案 2 :(得分:0)
从最小堆中获取最小元素是一个O(log n)操作,因为它包含两个步骤:
如果你只想获得最小项而不删除它,那么操作确实是O(1)。但是,只要你想修改堆(并删除第一个项目当然是合格的),它就是一个O(log n)操作。
Nitpickers note : 我理解插入到最小堆中的论点是,平均,是一个O(1)操作。虽然在某些情况下可能是这样,但最坏的情况仍然是O(log n)。 (尝试以相反的顺序将值插入堆中。每次插入都是O(log n)。)