以下算法(psuedocode表单)的bigOh运行时间是什么:
for i = 1,2,...,n do
for j = i+1, i+2, ... n do
Add up array entries A[i] through A[j]
Store the result in B[i,j]
end for
end for
自己计算我认为嵌套的for循环会导致O(n ^ 2)的最坏情况,但我不确定添加和存储最坏情况的复杂性。
由于
答案 0 :(得分:1)
i
上的循环是n次迭代
j
上的循环平均接近n / 2次迭代
A[k]
的总和平均超过n / 3项
因此你需要大约(n ^ 3)/ 6个加法。那是O(n ^ 3)。
但是如果你在j
的循环中保持A [i] + ... + A [j]的总计,或者使用先前计算的B[i,j]
值,你可以带它降至O(n ^ 2)。
j
上的循环使用n-1次迭代并且下降到0.并且n个连续数的平均值是2个极值的平均值,即(n-1 + 0)/ 2。差不多是n / 2.
总和的长度更难以解释。它是一个加权平均值,对小数字的权重大于大数字。结果因子1/3无论如何都不重要。