不断增加的范围在Foor回路上的最大O复杂度是多少?

时间:2019-04-04 13:44:30

标签: for-loop big-o

我有2个嵌套的for循环,每次执行内部for循环时都会计算nrResults的新值(它将循环nnrResults-2次)。

时间复杂度应约为O(n),因为nrResults取决于n的值。
但是nrResults在外部for循环的每个循环上都在减少(即firstNext * j在每次迭代中都在增长)

即使O(n)在整个执行过程中会不断减少,内部foor循环的时间复杂度是否仍为nrResults

谢谢。

for(int j = 1; j < B; j++)                      // General case
        {
            nrResults = n - (firstNext * j);
            result = codedInput[0] + results[minI = minIndex(results, 0 + firstNext, nrResults + firstNext)];

            for(int i = 1; i < nrResults; i++)
            {
                if( (i + firstNext) > minI)
                    results[i] = codedInput[i] + results[minI = minIndex(results, i + firstNext, nrResults + firstNext)];
                else
                    results[i] = codedInput[i] + results[minI];

                if(results[i] < result)
                    result = results[i];
            }
        }

1 个答案:

答案 0 :(得分:0)

在这种情况下,您有一个循环i:= 0..n和一个内部循环j:= 0..i-2。是吗?

在这种情况下,内部循环的复杂度将为O((n-1)/ 2),这是平均值。外部for的复杂度为O(n)。

您要做的就是乘以O((n)*(n / 2)),即O(n²/ 2)。

如果内部迭代不同,则必须重新计算。