数组访问次数似乎错了

时间:2014-12-23 06:45:38

标签: arrays algorithm

如果我要运行此代码:

for i in range(0, 5):
    for j in range(0, 5):
        for k in range(0, 5):
            count = count + 1
            print(count)

我会得到预期的答案,125N^3。那么如下图(N ^ 3)/ 6。我理解数学和的公式但是内部for循环中的代码被执行N ^ 3次没有?是不是会使图片中的代码有N ^ 3个数组访问?

d http://www.domfarolino.com/q.JPG

编辑:

是的,我看到图片中的代码是如何将总步数与给定值进行比较而不是O符号,对不起让这些混淆了。

3 个答案:

答案 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表示法,因为它只描述了扩展。