学习数据结构和算法,首先要掌握一个数据结构与算法中最重要的概念-复杂度分析.
时间复杂度是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系,空间复杂度是渐进空间复杂度表示算法的存储空间与数据规模之间的增长关系。
七种常见复杂度:
O(1):Constant Complexity 常数复杂度
O(log n):Logarithmic Complexity 对数复杂度
O(n):Linear Complexity 线性时间复杂度
O(n^2):N square Complexity 平方
O(n^3):N square Complexity 立方
O(2^n):Exponential Growth 指数
O(n!):Factorial 阶乘
时间复杂度分析:
1.只关注循环执行次数最多的一段代码
2.加法法则:总复杂度等于量级最大的那段代码的复杂度
3.乘法法则:嵌套的复杂度等于嵌套内外代码复杂度的乘积。
复杂度量级:
常量阶 O(1)
对数阶 log(n)
线性阶 O(n)
线性对数阶 nlog(n)
平方阶O(n^2) 立方O(n^3)....O(n^k)k次方阶
指数阶O(2^n)
阶乘阶O(n!)
O{logn}代码分析:
int i =2;
while(i<n){
i = i*2;
}
空间复杂度常见的有O(1) O(n) O(n^2)
复杂度分析不难