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吗?
答案 0 :(得分:0)
如果所有数字a
,z
和i
均为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。而且,如果a
,z
和i
都是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)