【问题标题】:O(3^n) exponential time complexity [closed]O(3 ^ n)指数时间复杂度[关闭]
【发布时间】:2013-06-23 12:10:19
【问题描述】:
 public void run(int n)
    {
        System.out.println(power(3, n));
    }

public int power(int c, int n)
{
    int result = 1;
    for (int i = 0; i < c; i++) {
        result *= n;
    }
    return result;
}

这段代码是否给了我一个 O(c^k) - 指数时间复杂度?

【问题讨论】:

  • 简答,不。计算3^n 不需要O(3^n)
  • 无意冒犯,但不是一一发布你的作业,而是自己阅读并尝试……你连续发布了几乎相同的 3 个问题
  • for (int i = 0; i &lt; c; i++) -- 这就是你的复杂性。变量n 甚至没有在这里发挥作用。
  • @BoristheSpider 确实如此,如果你做错了(通常也是因为 O 是一个上限)。
  • Big O notation for (c^k) 的可能重复项

标签: java algorithm big-o time-complexity


【解决方案1】:

说实话,如果你想向教授你课程的人展示他们的问题陈述可能不是他们想要的,我会这样做:

for(int i = 0; i < c; i++) { /*your code here*/}

这是在 O(c) 中,并且由于 O(c) 是 O(ck) 的严格子集,对于 k > 1,它也在 O(ck)。这可能不是教授您课程的人的意图,他们可能希望您编写一个在 Θ(ck) 中运行的循环。


另外说明:

ck 和 3n 不是一回事。假设输入的长度为 n,ck 是常数时间,而 3n 是指数时间。假设输入的长度是 c,ck 是多项式,而 3n 是常数。假设输入的长度是 k,ck 是指数的,而 3n 是常数。

【讨论】:

    【解决方案2】:

    没有计算 3 的 n 次幂不是复杂度 O(3^n)。您的算法复杂度仅为 O(c),因为它仅迭代 c 次。要编写 O(3^n) 算法,一种方法是运行 for 循环 3^n 次。这种 for 循环的一个例子是:

    for(long i = 0; i < Math.power(3, n); i++)
    

    【讨论】:

    • public void run(int n) { for (long i = 1; i
    • 任何运行 3^n 次迭代的算法都会产生相同的复杂度。因此这个 public void run(int n) { for (long i = 1; i
    • @benjamintan - 不...因为您的power(c, n) 不计算c^n
    【解决方案3】:

    这段代码是否给了我一个 O(c^k) - 指数时间复杂度?

    没有。 power(c, N) 执行循环的 c 乘法/迭代,因此它是 O(C)。这意味着(因为crun(n) 中的常量),test(n) 实际上是O(1)

    另外需要注意的是power(c, n) 计算的是 nc 而不是 cn

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2013-10-20
      相关资源
      最近更新 更多