【问题标题】:BIG O Analysis of Loops循环的 BIG O 分析
【发布时间】:2016-05-22 01:49:23
【问题描述】:

有人可以提供多项式 O(n^2)、指数 O(2^n) 和阶乘 O(n1) 的循环示例。我似乎无法绕过它。

我了解
O(log n)for (int i=0; i<=10; i=i*2) OR for (int i=0; i<=10; i=i/2)
O(n)for (int i=0; i<=10; i++)(int i=10; i<=0; i--)的概念。
O(n^2) `

for (int i=0; i<=10; i++)
{
    for (int i=0; i<=10; i++)
    {
      //DO SOMETHING
    }
}

【问题讨论】:

  • 您可能指的是i = i*2 而不是i*2(这会造成无限循环...),至于i/2 我不知道您打算在那里做什么。此外,您的问题不清楚,因为您在示例中提供的循环中没有 n

标签: java algorithm big-o


【解决方案1】:

一个更明显的O(2^N) 例子是:

public int count2PowerN(int n) {
  if (n <= 1) {
     return n;
  } else {
     return count2PowerN(n - 1) +  count2PowerN(n - 1);
  }
}

注意事项:

  1. O(2^N) 等价于任何O(c^N),其中c 是一个常数。通常使用e 作为标称常数;我,eO(e^N)
  2. 您无法通过简单的嵌套循环获得超多项式复杂性。您需要递归或动态数据结构。

【讨论】:

    【解决方案2】:

    O(n^2):

    int count = 0;
    for (int i = 0; i < n; i++){
      for (int j = 0; j < n; j++){
        count++;
      }
    }
    

    这很简单,对于每个嵌套循环,你都会增加你的力量。因此,如果您有 3 个 for 循环而不是两个,那么它将是 O(n^3)

    O(2^n):

    public int fibonacci(int n){
        if (n<= 1) return n;
        return fibonacci(n- 2) + fibonacci(n- 1);
    }
    

    对于此方法的每次迭代,将创建另外两个“分支”(直到 n

    O(n!):

    public int factorialRuntime(int n) {
      int count = 0;
      for(int i=0; i<n; i++) {
        count += factorialRuntime(n-1);
      }
      return count;
    }
    

    这个例子来自here

    【讨论】:

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