【问题标题】:How is time complexity of the code Θ(nLogn)?代码 Θ(nLogn) 的时间复杂度如何?
【发布时间】:2016-04-25 17:06:29
【问题描述】:
 int n;
 int i, j, k = 0;
    for (i  = n/2; i <= n; i++) {
        for (j = 2; j <= n; j = j * 2) {
            k = k + n/2;
        }
    }

只需要计算代码sn-p的时间复杂度,答案是Θ(nLogn),但你能解释一下它是如何Θ(nLogn)

【问题讨论】:

  • 这样您就掌握了所有信息。为什么不能计算?
  • 您的提示是不是 O(n!) 但严重的是,如果您无法通过检查弄清楚,请在其中放置一些 printf 调用以跟踪它被调用的频率,看看您是否找不到当你改变循环大小时你自己的模式?
  • "...你能解释一下它是怎么回事 Θ(nLogn)" - 你能解释一下它怎么可能是 但是 Θ(nLogn) 吗?
  • 外循环为 N/2(或仅 N)。内循环以 2 的幂或以 2 为底的对数 (n) 计数。 NLog(N) 是吗? (回答是因为他受够了悲伤……)
  • 提示:内部循环运行了多少次? (你很幸运 - 每个i 都是成本的)

标签: c algorithm loops time-complexity big-o


【解决方案1】:

真的没那么难。

外循环运行n/2 次。那是O(n) 复杂度。

内部循环再次仅依赖于n。它不依赖于第一个循环中的i。所以对于内循环的复杂性,我们可以完全忽略外循环。多么幸运!。 j 每次乘以 2,所以我们有 logarithm base 2。那是O(log(n))

循环是嵌套的,所以我们相乘,因此以:

O(n log(n))

【讨论】:

    猜你喜欢
    • 2022-12-04
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多