这个伪脚本的大O符号是什么?

时间:2015-02-23 05:37:00

标签: algorithm big-o complexity-theory computer-science

我正在研究大O符号,我想找到我从Project Euler解决的数学问题的大O符号。

total

for x (0..9){
    for y (0..9){
        for z(0..9){
            if(some_condition == true){
                total = total + permute(x,y,z)
            }
        }
    } }
print total

我的猜测是O(N ^ 3),因为有3个循环,但我不确定

2 个答案:

答案 0 :(得分:2)

复杂性为= O(10*10*10*C(permute)) = O(1000*C(permute)) = O(k*C(permute))
其中C(permute)是函数compute(x,y,z)的复杂性。

答案 1 :(得分:2)

正如@thang的评论所指出的,算法的复杂性实际上是O(1)

当我们谈论算法的时间复杂性时,一个重点是:

  

我们始终会考虑算法在输入的大小方面需要的时间。

请注意,虽然我们正在调用permute()函数10 * 10 * 10 = 1000次(对于x, y, z = 0, 1, ..., 9),但每次调用permute()的运行时间都是上限:< / p>

T := max { T(0, 0, 0), T(0, 0, 1), ..., T(0, 0, 9),
           T(0, 1, 0), T(0, 1, 1), ..., T(0, 1, 9),
           ...
           T(9, 9, 0), T(9, 9, 1), ..., T(9, 9, 9) }

即。它取决于1000个可能输入值的最大运行时间。

因此,在最坏的情况下,算法的运行时间受1000 * T的限制。观察到T实际上是独立的输入大小(因为您没有任何输入),因此算法的运行时间实际上是O(1)