常见的时间复杂度解析
常见的时间复杂度
① 常数阶O(1)
② 对数阶O(Log2n) --2为底数,n为对数
③ 线性阶O(n)
④ 线性对数阶O(nlog2n) --2为底数,n为对数
⑤平方阶O(n^2)
⑥立方阶O(n^3)
⑦k次方阶O(n^k)
常见时间复杂度👉小到大:
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2) <O(n ^3)<O(n ^k)<O(2 ^n)
1.常数阶O(1)
无论代码行有多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就是O(1)
即:该代码执行时,它消耗的时间并不随着某个变量的增长而增长
public static void main(String[] args) {
int i = 1;
int j = 2;
++i;
j++;
int m = i + j;
}
2.对数阶O(log2^n)
在while循环里,每次执行i = i * 2 ; i 逐渐趋近于n ;
若当执行x次后,i>2了;此时循环退出
也就是说2的x次方=n; (2^x=n)
即 x = log2n,即当执行log2n次后退出,则时间复杂度就是为O(log2n)
(时间复杂度就是执行次数)
如果 i = i * 3 就是 O(log3n)
public static void main(String[] args) {
int i = 1;
int n = 100;
while(i < n) {
i = i * 2;
}
}
3.线性阶O(n)
for循环里会执行n编,故消耗时间随着n的增值而增长故时间复杂度为O(n)
public static void main(String[] args) {
int n=100;
for(int i = 1;i <= n; i++) {
int j=i;
j++;
}
}
4.线性对数阶O(Nlog2n)
线性对数阶O(Nlog22)就是将复杂度为O(log2n)的代码执行N次
就是 N*O(log2n) 为 O(Nlog2n)
public static void main(String[] args) {
int N =1000;
for(int i=0;i<N;++i) {
while(i<N) {
i = i * 2;
}
}
}
5.平方阶O(n^2)
套娃
如:两个for循环
public static void main(String[] args) {
int n = 100;
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
System.out.println("疯狂套娃");
}
}
}