时间复杂性嵌套循环

时间:2016-09-10 15:33:43

标签: complexity-theory nested-loops

问题:

找出这个函数的复杂性(大theta):

s <-- 0; 
i = 2;
while (i <= n^2) do 
    for j <-- i to 2i[ln(i)] do
        s <-- s + i - j;
    end
    i <-- i + 2;
end
return (s);

我得到了大的theta(n ^ 2(ln(n)),因为for循环将运行2i [ln(i)] - i次,这将是ci [ln(i)]时间。然后我乘以它由n ^ 2,因为这是while循环的大致时间。

我用不同的方式解决了它并得到了大的theta(n ^ 4)。

我不确定我的任何一个答案是否正确,这是基于我对如何在循环依赖与独立时解决这些问题的困惑。

1 个答案:

答案 0 :(得分:0)

最强大的解决方案是为2*(2i)*ln(i) - 2i + 1求和2 <= i <= n^2/2。我们有:

1 + 2 + ... + floor(n^2/2) = O(n^4)

鉴于:

1*ln(1) + ... + floor(n^2/2)*ln(floor(n^2/2)) = O(n^4*ln(n))

(不必考虑常数4。)

事实上,你甚至可以使用comparison with an integral渐近地得到一个与你的和相等的表达式。

因此时间复杂度为O(n^4*ln(n))-O(n^4)+O(n) = O(n^4*ln(n))

没有MathJax编写数学是一种痛苦,here is a more detailed proof