三个嵌套for循环函数运行时间的渐近增长

时间:2018-04-12 08:45:46

标签: algorithm big-o asymptotic-complexity

我有一个函数的伪代码(如下)。
我明白,如果ijk中的每一个都是1,那么最坏的情况运行时间为O(n^3)。我正在努力了解n/2的影响,尽管 - 如果有的话 - 在运行时间。任何指导都会很棒。

for i=n/2; i < n; increase i by 1
    for j=1; j < n/2; increase j by 1
        for k = 1; k < n; increase k by k*2
            Execute a Statement

2 个答案:

答案 0 :(得分:0)

您的理解不正确

k增加k*2会导致对数时间,实际上复杂度为O(n^2 * log n)

O(n/2) = O(n),因此n/2对渐近式增长没有任何影响。

如果您不确定,一般的方法是尽可能精确地计算它,然后删除常量。

for i将执行n/2次,for j也会n/2次,k将执行log n次。

n/2 * n/2 * log n = (n^2/4) * log n。您可以删除常量,因此O(n^2 * log)

答案 1 :(得分:0)

最坏的情况时间复杂度不是O(N^3)

检查最里面的for循环。 K增加K * 2 这意味着,最里面的for循环将花费O(lgN)时间

其他两个外部循环各占O(N)次,N/2对运行时间的渐近增长没有任何影响。

因此,整体时间复杂度为O(N^2 * lgN)