有人可以提供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
}
}
答案 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);
}
}
注意:
O(2^N)
相当于其中O(c^N)
为常量的任何c
。通常使用e
作为标称常数;我,e O(e^N)