依赖循环的复杂性

时间:2014-06-08 19:08:46

标签: algorithm loops complexity-theory

2我开发了一种算法,我试图以最详细的方式记录其时间复杂度,并且我遇到了问题。

算法看起来像这样:

for i=0:n {
    task 1;
    task 2;
    for j=0:i {
        task 3;
    }
    task 4;
}

所以我通过说任务1的复杂度为O(t1)来记录我的复杂性,...... 但是,当我试图解释任务3时,我会被卡住,因为它基本上会执行i次,我计划说算法的复杂性是任务1 +任务2 + i *任务3的复杂性的n倍+任务4.因为我将依赖于我,我真的不知道最好的方式来呈现这些东西。

据我所知,如果任务1,2和4不存在,复杂性将为O(n ^ 2)。但我不知道如何通过与我之前的解释相一致来表达这一点。

我希望这是有道理的,谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

最简单的方法可能是单独计算它们。

执行任务3:1+2+3+...+n = n(n+1)/2次。

任务1,2和4分别执行n次。

所以(假设每个任务都需要O(1)),我们有一个复杂的

O(n(n+1)/2 + 3n) = O(n²/2 + n/2 + 3n) = O(n²)

(在大O表示法中可以忽略常数因子和渐近较小的项)。


更一般地说(如果每个任务不一定需要O(1)),我们可以说复杂性是:

O(t3*n² + n*(t1 + t2 + t4))

ti表示任务i需要多长时间。