我有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];
}
}
答案 0 :(得分:0)
在这种情况下,您有一个循环i:= 0..n和一个内部循环j:= 0..i-2。是吗?
在这种情况下,内部循环的复杂度将为O((n-1)/ 2),这是平均值。外部for的复杂度为O(n)。
您要做的就是乘以O((n)*(n / 2)),即O(n²/ 2)。
如果内部迭代不同,则必须重新计算。