先验分析中几个陈述的数量级

时间:2017-05-28 01:57:43

标签: algorithm time-complexity space-complexity

如果我们在循环中有以下语句,

  1. n = n / 3

  2. n = n-1

  3. n = n-2

  4. 我想知道我们是否有上述陈述他们的数量级是多少,然后如何写出他们的大O符号?

    我在Google上搜索了这些陈述,但我没有得到任何好结果。如果您有任何链接,请咨询我。

2 个答案:

答案 0 :(得分:3)

予。一点心灵感应

我们假设所有循环都是这样的:

n = <initial value>;
while (n >= 1) {
    <insert statement here>;
}

II。空间复杂性

所有这些循环的空间复杂度为O(1)

为什么呢?因为执行时这些循环占用的RAM和磁盘空间都不依赖于n的值。

III。时间复杂度

1。 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))

2。 n = n – 1

这是最简单的三例。

对于n = 1,只有一个循环迭代,对于n = 2,有两个,依此类推。 O(n)

3。 n = n – 2

对于n = 1n = 2,迭代次数为1,n = 3n = 4等于2,依此类推。因此,k = ⌈ n / 2 ⌉

O(⌈ n / 2 ⌉) = O(n / 2) = O(n)

答案 1 :(得分:1)

这三个语句是O(1),因为它们只是对标量变量的算术运算。