大循环分析

时间:2016-05-22 01:49:23

标签: java algorithm big-o

有人可以提供PolynomialO O(n ^ 2),Exponential O(2 ^ n)和Factorial 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
    }
}

2 个答案:

答案 0 :(得分:1)

为O(n ^ 2):

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

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

O(2 ^ n):

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

对于此方法的每次迭代,将创建另外两个“分支”(直到n <= 1),因为它具有两个递归调用。因此,每次迭代的增长都会增加一倍。

O(N!):

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

此示例来自here

答案 1 :(得分: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作为标称常数;我,e O(e^N)
  2. 使用简单的嵌套循环无法获得超多项式复杂性。您需要递归或动态数据结构。