【问题标题】:Complexity of two algorithms两种算法的复杂性
【发布时间】:2015-10-30 21:58:16
【问题描述】:

我正在研究算法复杂度,我对以下两种算法的区别有疑问:

算法#1:

sum = 0
i = 1

while (i < n) {

   for j = 1 to i {
       sum = sum + 1
   }

   i = i*2;
}

return sum

算法#2:

sum = 0
i = 1

while (i < n) {

   for j = 1 to n {
       sum = sum + 1
   }

   i = i*2;
}

return sum

唯一的区别是'for'循环,但是这些算法的时间复杂度有什么区别呢?我什么时候必须增加或增加嵌套循环的复杂性?

【问题讨论】:

  • 我认为不是 O(n^2) 而是 O(logN) 第一和 O(NlogN) 第二。

标签: algorithm time-complexity


【解决方案1】:

为了简单起见,假设 n 是2 的幂,即2^k。那么很明显,外循环将进行 k 次,并且在每一步内循环都将继续:

1 to 1 i.e. 2^0
1 to 2 i.e. 2^1
1 to 4 i.e. 2^2
...
1 to        2^k

所以我们只需要找到总和2^0 + 2^1 + ... + 2^k

它被称为2^(k+1) - 1 = 2^k * 2 - 1 = 2*n + 1

所以省略常量我们得到O(n)

第二个很简单。外循环是log(n),内循环是n,所以你得到O(n*log(n))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多