如果我们在循环中有以下语句,
n = n / 3
n = n-1
n = n-2
我想知道我们是否有上述陈述他们的数量级是多少,然后如何写出他们的大O符号?
我在Google上搜索了这些陈述,但我没有得到任何好结果。如果您有任何链接,请咨询我。
答案 0 :(得分:3)
我们假设所有循环都是这样的:
n = <initial value>;
while (n >= 1) {
<insert statement here>;
}
所有这些循环的空间复杂度为O(1)
。
为什么呢?因为执行时这些循环占用的RAM和磁盘空间都不依赖于n
的值。
n = n / 3
很明显,在k
- 循环迭代k ≥ 1
,结果值n'
将变为n' = n / 3^k
。
所以要找到k
,我们要解决这个等式:
1 = n / 3^k =>
3^k = n =>
k = log3(n) = log(n) / log(3)
只要1 / log(3)
是有限常数,最终答案就是O(log(n))
。
n = n – 1
这是最简单的三例。
对于n = 1
,只有一个循环迭代,对于n = 2
,有两个,依此类推。 O(n)
。
n = n – 2
对于n = 1
和n = 2
,迭代次数为1,n = 3
和n = 4
等于2,依此类推。因此,k = ⌈ n / 2 ⌉
。
O(⌈ n / 2 ⌉) = O(n / 2) = O(n)
。
答案 1 :(得分:1)
这三个语句是O(1),因为它们只是对标量变量的算术运算。