T(n)=Θ格式的计算复杂度

时间:2013-05-22 08:55:39

标签: complexity-theory time-complexity

有人可以解释这段代码的big theta格式的复杂性(以及为什么)?这是我从这个主题的第一个任务,我有点困惑。任何形式的帮助将不胜感激!

for i <-- 1 to n-1
   do j <-- 1
     while j <= 2*(i+1)
       do j <-- j + 1

3 个答案:

答案 0 :(得分:0)

我可能错了±1,但我认为将要执行的步骤数是:

sum_ {i = 1} ^ {n-1} 2 *(i + 1)= 2sum_ {i = 1} ^ {n-1} + 2(n-1)=(n ^ 2-n) +(2n-1)= n ^ 2 + n + 1

答案 1 :(得分:0)

n ^ 2,因为循环中有一个循环,这意味着你的指令被执行n * n次

答案 2 :(得分:0)

首先,根据惯例,你的Pseudocode并不完全正确。

for i <-- 1 to n-1
   do j <-- 1
     while j <= 2*(i+1)
       do j <-- j + 1

如果表示如下,上面的伪代码应该更清楚,

for i = 1 to n-1
    for j = 1 to (2*(i+1))
        // Body of the inner loop

只有当内循环的主体包含常量时间表达式时,才能分析上述伪代码的复杂性。例如,如果操作数足够小,则加法或减法是恒定时间操作。另一方面,如果循环包含对另一个函数的调用,那么复杂性也取决于该被调用函数的复杂性。

如果循环体仅包含常量时间表达式,则可以如下分析复杂性。

外循环执行n-1次。 内循环执行2*(i+1)次。

因此内循环中的语句执行4,6,8,...,最后执行2n次。所以执行的指令总数是

4 + 6 + 8 + ... + 2n
= 2 ( 2 + 3 + 4 + ... + n)
= 2 (n(n+1)/2 - 1)
= n(n+1) - 2

执行的指令总数为 n 2 - n - 2

因此,复杂性为Θ(n 2