算法与数据结构
推导大O阶方法
推导大O阶: 1.用常数1取代运行时间中的所有加法常数 2.在修改后运行次数函数中,只保留最高阶项 3.如果最高阶项存在且不是1,则去除与这个项相乘的常数
(1) 常数阶
时间复杂度为O(1)
1 | int sum=0,n=100; |
(2) 线性阶
时间复杂度为O(n),因为循环体要执行n次
1 | int i; |
(3) 对数阶
时间复杂度为O(logn)
1 | int count=1; |
(4) 平方阶
时间复杂度为O(n^2^)
1 | int i,j; |
(5) 常见的时间复杂度
执行次数函数 | 阶 | 非正式术语 |
---|---|---|
12 | O(1) | 常数阶 |
2n+3 | O(n) | 线性阶 |
3n^2^+2n+1 | O(n^2^) | 平方阶 |
5log |
O(logn) | 对数阶 |
2n+3nlog |
*O(*n*logn*) | nlogn阶 |
6n^3^+2n^2^+3n+4 | O(n^3^) | 立方阶 |
2^n^ | O(2^n^) | 指数阶 |
时间复杂度从小到大: O(1)<O(logn)<O(n)<O(nlogn)<O(n^2^)<O(n^3^)<O(2^n^)<O(n!)<O(n^n^)