赞
踩
T(n)
表示,若有某个辅助函数f(n)
,使得当n趋近于无穷大的时候,T(n)/f(n)
的极限值不等于零的情况,则称f(n)
是T(n)
的同数量级函数,记做T(n)=O(f(n))
,称O(f(n))
为算法的渐进时间复杂度,简称时间复杂度O(1)
O(1)
:无论代码执行了多少行,只要没有循环复杂结构,那么这个的时间复杂度就是O(1)
/**
* O(1) 时间复杂度
* 没有循环结构的顺序执行, 无论执行多少行, 时间复杂度均为O(1)
*/
public static void o1() {
int i = 0;
int j = 0;
i++;
j++;
System.out.println(i + j);
}
O(log2n)
/**
* O(log2n) 时间复杂度
* 此处 i 以二倍的速度增长, 也就是说到 2^n 后趋近于count, 整个过程执行log2n次
*/
public static void log2n(int count) {
for (int i = 1; i <= count; i *= 2);
}
O(n)
/**
* O(n) 线性阶, 即代码循环次数随count的变化成线性变化
*/
public static void n(int count) {
for (int i = 0; i < count; i++) {
System.out.println(i);
}
}
O(nlog2n)
:线性阶与对数阶的嵌套/**
* O(nlog2n) 线程对数阶, 线性阶与对数阶的嵌套
*/
public static void nlog2n(int count) {
// 线性阶
for (int i = 0; i < count; i++) {
// 对数阶
int j = 0;
while (j < count) {
j *= 2;
}
}
}
O(n^2)
:双层线性循环嵌套/**
* O(n2) 平方阶, 就是双层线性循环嵌套
*/
public static void n2(int count) {
// 线性阶
for (int i = 0; i < count; i++) {
// 线性阶
for (int j = 0; j < count; i++) {
System.out.println(i + j);
}
}
}
O(n^3)
:三层线性循环嵌套/**
* O(n3) 立方阶, 就是三层线性循环嵌套
*/
public static void n3(int count) {
// 线性阶
for (int z = 0; z < count; z++) {
// 线性阶
for (int i = 0; i < count; i++) {
// 线性阶
for (int j = 0; j < count; j++) {
System.out.println(z + i + j);
}
}
}
}
O(n^k)
:参考二阶和三阶,即K次的线程循环嵌套O(2^n)
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(n^k) < O(2^n)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。