【问题标题】:Running time analysis of algorithm with log带日志的算法运行时间分析
【发布时间】:2017-11-13 01:01:24
【问题描述】:

我这里有以下算法伪代码:

for (j = 2 to n){
 k=1
 while (k<j^2) {
  k=2*k
 }
}

我学的方法只是逐行分析,所以第1行我可以看到它运行了n-2次,第2行符文运行了n-1次。

这里让我感到困惑的是 while 循环,我不太确定如何处理它。我认为它自己运行 log( j2 ) 次,所以我得到类似 (n-1) * log( j2 ) 第 3 行?但是我们不应该以 n 的形式拥有一切吗?

【问题讨论】:

  • 尝试将 while 循环的迭代计数形式化为数学系列。
  • 内部循环将像这样运行:1 + 4 + 9 +16 +25 + 36 表示二次因子,所以插入 n,你看到它执行了多少次?不是 logN,如果是 logN 就是N/2

标签: algorithm big-o


【解决方案1】:

内部的while循环是Theta(log j^2) = Theta(2 log j) = Theta(log j)

所以总运行时间是Theta(2(log 2 + log 3 + ... + log n)) = Theta(n log n)

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多