我正在研究大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个循环,但我不确定
答案 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)
。