我觉得很容易计算出大多数问题的时间复杂度,但是我的教授给出了非常复杂的例子,我很难搞清楚它们。以下是他给我们的两件事,我无法深究:
示例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>
如果你能告诉我如何计算这些例子的时间复杂度,我应该能够推断出我将如何为他提供的大部分内容做到这一点。谢谢!
答案 0 :(得分:3)
数目:
1. O(j)
2. O(log log(n))
说明:
查看内循环。它在第一个条目中运行j
次。现在,j=3j/4
。所以,第二次,它运行3j/4
次。第3次,9j/16
,依此类推。操作总数将是:
j + 3j / 4 + 9j / 16 + ...... = 4j
因此,复杂性将是O(4 * j)= O(j)。
只有一个循环。其控制器(j)的值增加为:
3,9,81,6561,......
现在,它将达到特定数量n
之前的迭代次数将是log log(n)。如果它每次增加3的倍数,例如:
3, 9, 27, 81, 243...
复杂性应为O(log n)。