大O事件复杂度表示法,并不具体表示代码真正的执行时间,而是表示代表执行时间随数据规模增长的变化趋势,所以也叫 渐进时间复杂度 asymptotic time complexity,简称 时间复杂度
时间复杂度分析
- 只关注循环执行次数最多的一段代码
- 加法法则:总复杂度等于两级最大的那段代码的复杂度
- 如果T1(n)=O(f(n)),T2(n)=O(g(n)),那么T(n)=T1(n)+T2(n)=O(max(f(n),g(n)))
- 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
- 如T(n)=T1(n)*T2(n)=O(n*n)=O(n^2)
对于复杂度量级,可以粗略的分为两类,多项式量级,非多项式量级,其中非多项式量级有O(2^n),和O(n!),即NP时间复杂度
采用大O标记复杂度时,可以忽略系数,即O(Cf(n))=O(f(n)),log3n=log3 2*log2n,其中C=log3 2,所以可以忽略
与时间复杂度对应的是空间复杂度,全称是 渐进空间复杂度 asymptotic space complexity,表示算法的存储空间与数据规模之间的增长关系
最常用的20个知识点
10个数据结构
- 数组
- 链表
- 栈
- 队列
- 散列表
- 二叉树
- 跳表
- 图
- Trie树
10个算法
- 递归
- 排序
- 二分查找
- 搜索
- 哈希算法
- 贪心算法
- 分治算法
- 回溯算法
- 动态规划
- 字符串匹配算法
算法汇总
课程目录