计算时间复杂度的最简单方法是?

时间:2015-12-11 13:58:05

标签: algorithm performance time while-loop code-analysis

我觉得很容易计算出大多数问题的时间复杂度,但是我的教授给出了非常复杂的例子,我很难搞清楚它们。以下是他给我们的两件事,我无法深究:

示例1:

x = 0
j = n
while (j >= 1)
    for i = 1 to j do
        x += 1
    j *= 3/4
return x

例2:

x = 0
j = 3
while (j <= n)
    x += 1
    j *= j
return x

请注意,对于 x + = 1 j * = j 等操作,我们仅将其计为1个时间单位。 < / p>

如果你能告诉我如何计算这些例子的时间复杂度,我应该能够推断出我将如何为他提供的大部分内容做到这一点。谢谢!

1 个答案:

答案 0 :(得分:3)

数目:

1. O(j)
2. O(log log(n))

说明:

  1. 查看内循环。它在第一个条目中运行j次。现在,j=3j/4。所以,第二次,它运行3j/4次。第3次,9j/16,依此类推。操作总数将是:

    j + 3j / 4 + 9j / 16 + ...... = 4j

  2. 因此,复杂性将是O(4 * j)= O(j)。

    1. 只有一个循环。其控制器(j)的值增加为:

      3,9,81,6561,......

    2. 现在,它将达到特定数量n之前的迭代次数将是log log(n)。如果它每次增加3的倍数,例如:

      3, 9, 27, 81, 243...
      

      复杂性应为O(log n)。