【问题标题】:Finding the complexity of Loops寻找循环的复杂性
【发布时间】:2016-02-05 01:10:56
【问题描述】:

我得到了这个算法,并被告知要找到它的复杂度 big theta。

for (i = 1; i <= n; i++) {
    j = n;
    while( j >= 1) {
        j = j/3;
    }

}

我知道外部 for 循环运行 n 次。虽然 while 循环更棘手,它是否可能是 log n(以 3 为底)。总共使它成为 n*log3n

这对吗?

【问题讨论】:

  • 你是怎么把它格式化成三垒的?
  • 是的,这是正确的。内部循环执行的次数固定为 log n,以 3 为底。
  • edit 了解:-)
  • 啊,好的,谢谢你,所以 nlogn(base 3) 工作,谢谢!
  • (基数 3)是错误的。您可以转换log x(base n) = c log x(base m)。鉴于在 Theta 表示法中,我们删除了每个项的系数,添加 (base 3) 是错误的。因此,您的答案的正确形式应该是nlogn

标签: algorithm big-o time-complexity complexity-theory


【解决方案1】:

有一个大小为 n 的外部 for 循环。它对整体复杂性贡献了 n 倍的复杂性。

假设内部 while 循环运行了 m 次。在第 i 次迭代之后,j 的值将是 n/(3^i)。我们将一直运行到 n/(3^i) > 1。因此,

=> n/(3^i) = m
=> n = 3^m
=> log(n) = log2(3) * m
=> m = O(log(n))

因此,for 循环对 O(n) 有贡献,而 while 循环对 O(log(n)) 有贡献。嵌套循环的复杂度变为 O(n log(n))。

【讨论】:

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