如果我要运行此代码:
for i in range(0, 5):
for j in range(0, 5):
for k in range(0, 5):
count = count + 1
print(count)
我会得到预期的答案,125
或N^3
。那么如下图(N ^ 3)/ 6。我理解数学和的公式但是内部for循环中的代码被执行N ^ 3次没有?是不是会使图片中的代码有N ^ 3个数组访问?
d http://www.domfarolino.com/q.JPG
是的,我看到图片中的代码是如何将总步数与给定值进行比较而不是O符号,对不起让这些混淆了。
答案 0 :(得分:2)
没有区别,O(n ^ 3)与O((n ^ 3)/ 2完全相同。大O符号忽略了常数因素。
如果您要查找确切的步骤数,则两个代码段不同,并且两个派生对于其各自的代码段都是正确的。
答案 1 :(得分:2)
您错误地翻译了代码。两个内部循环不会从0到N运行,它们从包含它们的循环的当前值开始运行。例如,当i=0
时,第二个循环从1到N;当j=1
时,第三个循环从2运行到N.此代码的更合适的翻译将是:
for i in range(0, N):
for j in range(i, N):
for k in range(j, N):
count = count + 3
话虽如此,正如其他人所说,大O符号并未考虑恒定因素。 O(n^3 / 2)
与O(n^3)
相同。
答案 2 :(得分:0)
是O(N ^ 3)。请阅读O表示法,因为它只描述了扩展。