本文测试机cpu,测试基于JDK8
1. O ( n ) O(n) O(n)
首先测试 O ( n ) O(n) O(n)的运行次数,1次乘法 + 2次加法 + 1次判断
public class Main{
public static void main(String[] args) {
long xx = 1;
long index = 1;
long start = System.currentTimeMillis();
while(true){
xx = xx * 2 + 1;
index++;
long end = System.currentTimeMillis();
if(end - start > 1000){
break;
}
}
System.out.printf("%d\n", index);
}
}
秒 | 次数 | 数量级 |
---|---|---|
1s | 73748800 | 1 0 8 10^8 108 |
2s | 191526261 | 1 0 9 10^9 109 |
5s | 520590145 | 1 0 9 10^9 109 |
次数会浮动,数量级大致相同
2. O ( n 2 ) O(n^2) O(n2)
package com.caohongchuan;
public class Main{
private static long n = 65000;
public static void main(String[] args) {
long xx = 1;
long start = System.currentTimeMillis();
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
xx = xx * 2 + 1;
}
}
long end = System.currentTimeMillis();
System.out.printf("%d\n", end - start);
}
}
秒 | 次数 | 数量级 |
---|---|---|
1s | 30000 | 1 0 4 10^4 104 |
2s | 40000 | 1 0 4 10^4 104 |
5s | 65000 | 1 0 4 10^4 104 |
总结
1
s
1s
1s 大致在
1
0
8
10^8
108 数量级上。
常见复杂度
复杂度 | 数量级 |
---|---|
O ( l o g n ) O(logn) O(logn) | 1 0 1 0 7 10^{10^7} 10107 |
O ( n ) O(n) O(n) | 1 0 8 10^8 108 |
O ( n l o g n ) O(nlogn) O(nlogn) | 1 0 6 10^6 106 |
O ( n 2 ) O(n^2) O(n2) | 1 0 4 10^4 104 |
O ( n 2 l o g n ) O(n^2logn) O(n2logn) | 1 0 3 10^3 103 |
O ( n 3 ) O(n^3) O(n3) | 1 0 2 10^2 102 |
O ( 2 n ) O(2^n) O(2n) | 16 以下 |
O ( n ! ) O(n!) O(n!) | 11以下 |