在计算机科学中,计算机科学家知道如何计算算法的运行时间以优化代码非常重要。对于你的计算机科学家,我提出了一个问题。
据我所知,就n而言,双嵌套for循环通常具有n 2 的运行时间,并且三嵌套for循环通常具有n <的运行时间SUP> 3
但是,对于代码如下所示的情况,运行时间是否为n4?
x = 0;
for(a = 0; a < n; a++)
for(b = 0; b < 2a; b++)
for (c=0; c < b*b; c++)
x++;
我将每一行的运行时间简化为第一个循环的虚拟(n + 1),第二个循环的(2n + 1),以及(2n) 2 +1第三个循环。假设这些术语相乘,并且我们提取最高项以找到Big Oh,运行时间是n 4 ,还是它仍然遵循n 3的通常运行时间
我很感激任何意见。非常感谢你提前。
答案 0 :(得分:7)
你是对的,n * 2n * 4n 2 = O(n 4 )。
三重嵌套循环仅意味着将有三个数字相乘以确定最终的大O - 每个被乘数本身取决于每个循环的“处理”程度。
在你的情况下,第一个循环执行O(n)操作,第二个循环执行O(2n)= O(n),内部循环执行O(n 2 )操作,因此整体O (n * n * n 2 )= O(n 4 )。
答案 1 :(得分:2)
正式使用Sigma Notation,您可以获得:
答案 2 :(得分:0)
这可能是Mathematics的问题吗?
我的直觉,就像BrokenGlass一样,它是O(n⁴)。
编辑:Sum of squares和Sum of cubes非常了解所涉及的内容。答案是响亮的O(n ^ 4):((b = 0到2a)(b ^ 2)的和(a = 0到n)。内部总和与^ 3一致。因此,你的外部总和与n ^ 4一致。
可惜,我以为你可能会使用一些日志而不是n ^ 4。没关系。