嵌套循环中的乘法数:Big O.

时间:2012-04-08 06:27:32

标签: algorithm big-o time-complexity

if x:
    for i in range(a):
       for z in range(a):
          for k in range(z):
             for p in range(i):
                c = (i * z) + (k * p)
else:
    for i in range(a):
       for z in range(a):
          for k in range(z):
              c = (i * z) + (k * p)

这会是O(n ^ 4)吗?此外,会发生多少次乘法?

编辑:更新了代码。此外,由于下限捕获了有效输入将强制执行的最大步数,因此大欧米茄也不会是n ^ 4吗?

2 个答案:

答案 0 :(得分:0)

如果所有数字azi均为O(n),则以下代码仅为O(n 4 )。< / p>

for i in range(a):
   for z in range(a):
      for k in range(z):
         for p in range(i):
            c = (i * z) + (k * p)

正如你所写,我们所知道的是代码块是O(a 2 zi)。类似地,将发生的乘法总数将是:2a 2 zi。而且,如果azi都是O(n),则乘法的数量将为O(n 4 )。< / p>

我不确定你想知道第二块代码。

答案 1 :(得分:0)

是的,复杂性仍为O(n^4)。为简单起见,这里是重新安排代码的技巧

for i in range(a):
   for p in range(i):
       f(i, p)

其中f(i, p)

for z in range(a):
    for k in range(z):
        c = (i * z) + (k * p)

在第一部分中,f(i, p)已执行O(n^2/2)直到最大订单(由于求和sum_i (i^2),请自行计算)。同样,f(i, p)的复杂度为f(i, p),再次等于O(n^2/2)

因此合并后的结果订单为O(n^4/4)。并且每个操作有两次乘法,因此乘法的数量为O(n^4/2)