【问题标题】:Time complexity for while loopwhile循环的时间复杂度
【发布时间】:2016-12-17 10:44:06
【问题描述】:

时间复杂度是多少

x = 1
while( x < SomeValue )
{
    x *= 2;
}

我相信它是 O(N),因为循环将继续进行固定次数的迭代。 我的假设正确吗?

【问题讨论】:

  • 我不介意犯错,但如果我错了,那么正确的答案是什么。
  • 如果是固定的迭代次数,是多少次?

标签: while-loop time-complexity


【解决方案1】:

循环将在 O(log n) 时间内执行。希望数学使推理更清楚。每次迭代都是常数时间。要找到相对于 SomeValue 的迭代次数,我们将其称为 t,您可以看到在 nth 次迭代之后, x 的值为 2ⁿ。循环结束一次x≥t。因此,要找到满足或超过 t 所需的迭代次数,请将 2ⁿ 插入 x 并求解 t。你得到 t=log₂(n)。因此,O(log n) 时间。

【讨论】:

    【解决方案2】:

    时间复杂度为 O(log(n)),因为 x 呈指数增长。

    【讨论】:

    • 除非SomeValue &lt;= 1,在这种情况下复杂度是O(1)。
    • @cybersam 您可以将该论点应用于任何大 O 符号。如果你指定n的值,你总是可以把它解成一个常数,从而把它变成O(1)。
    • 如果 SomeValue > 1,那么复杂度是O(log(SomeValue)),而不是O(1)。
    猜你喜欢
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多