[英]BIG O Analysis of Loops
有人可以提供一些示例,例如:多项式O O(n ^ 2),指数O(2 ^ n)和阶乘O(n1)。 我似乎无法绕过它。
我了解
for (int i=0; i<=10; i=i*2) OR for (int i=0; i<=10; i=i/2)
O(log n) for (int i=0; i<=10; i=i*2) OR for (int i=0; i<=10; i=i/2)
O(log n for (int i=0; i<=10; i=i*2) OR for (int i=0; i<=10; i=i/2)
for (int i=0; i<=10; i++)
或(int i=10; i<=0; i--)
O(n (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 } }
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),因为它具有两个递归调用。 因此,每次迭代增长都会翻倍。
上!):
public int factorialRuntime(int n) {
int count = 0;
for(int i=0; i<n; i++) {
count += factorialRuntime(n-1);
}
return count;
}
这个例子是从这里拉出来的。
一个更明显的O(2^N)
示例是:
public int count2PowerN(int n) {
if (n <= 1) {
return n;
} else {
return count2PowerN(n - 1) + count2PowerN(n - 1);
}
}
笔记:
O(2^N)
等效于c
为常数的任何O(c^N)
。 通常使用e
作为标称常数。 i,e O(e^N)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.