【发布时间】:2017-02-14 10:12:01
【问题描述】:
我在 Interview Bit 上解决一个时间复杂度问题,如下图所示。
这个问题的正确答案是 O(N)。但在我看来,答案应该是 O(NlogN)。由于第一个“for循环”的复杂度应该是O(logN),因为变量i在每次迭代中除以2,我研究过每当循环变量被乘以或除以2时,时间复杂度是O (logN)。现在,对于第二个“for循环”,复杂度应该是O(N),因此最终的复杂度应该是O(N*logN)。
谁能解释我错在哪里?
【问题讨论】:
-
请注意,O(NlogN) 实际上并不是错误,因为 O() 是一个上限。它的信息量比 O(N) 少。
-
你出错的地方是,当外部循环进入 O(log N) 次时,提供的想法可能是整个算法确实需要 O(? * log N),内部循环不会对于外循环的每次执行,对于某个常数 c,平均执行 cN 次。正如 IVlad 的回答所述,您需要计算得出几何级数。
标签: algorithm time-complexity big-o asymptotic-complexity