CC189
p45计算Big O
int f(int n){
if(n <= 0){
return 1;
}
return f(n - 1) + f(n -1);
}
这个是O(2^N)复杂度,O(N)空间
p51
int factorial(int n){
if(n < 0){
return -1;
}else if(n == 0){
return 1;
}else{
return n * factorial(n - 1);
}
}
这个是O(N)复杂度,根据T(N) = T(N) + 1推出
p52
int fib(int n){
if(n <= 0){
return 0;
}else if(n == 1){
return 1;
}else{
return fib(n - 1)* fib(n - 2);
}
}
这是O(2^N)复杂度,容易理解
下面这个也是O(2^N)的复杂度!
void allFib(int n){
for(int i = 0; i < n; i++){
System.out.println(i + ": " + fib(i));
}
}
int fib(int n){
if(n <= 0){
return 0;
}else if(n == 1){
return 1;
}else{
return fib(n - 1)* fib(n - 2);
}
}
注意不是O(N2^N),实际算出来前面不过是多了个系数 = 2
void allFib(int n){
int[] memo = new int[n + 1];
for(int i = 0; i < n; i++){
System.out.println(i + ": " + fib(i, memo));
}
}
int fib(int n, int[] memo){
if(n <= 0){
return 0;
}else if(n == 1){
return 1;
}else if(memo[n] > 0){
return return memo[n];
}
memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
return memo[n];
}
这题的复杂度是O(N),因为fib(n)只需要抓出fib(n-1) 和fib(n - 2)的结果相加就好,constant time的操作
体现了记忆化搜索的优势
Last updated
Was this helpful?