1.时间复杂度:评估指令的运行时间
1.1 常见结构的复杂度:
O(n):
for (int i = 0; i < n; i++) {
System.out.println("test");
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < 15; j++) {
System.out.println("test");
}
}
O(n^2):
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.println("test");
}
}
O(logn):
while ((n = n / 2) > 0) {
System.out.println("test");
}
while ((n = n / 5) > 0) {
System.out.println("test");
}
for (int i = 1; i < n; i = i * 2) {
for (int j = 0; j < n; j++) {
System.out.println("test");
}
}
以斐波那契数列为例:
1.使用递归:
public static int fib(int n) {
if (n <= 1) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
计算此时的复杂度:
2.使用新的方法:
public static int fib2(int n) {
if (n <= 1) {
return 1;
}
int first = 1;
int second = 1;
int sum = 0;
for (int i = 0; i < n-1; i++) {
sum = first + second;
first = second;
second = sum;
}
return second;
}
此时复杂度为O(n),复杂度大大降低