一个洞穴是黑暗的,但是只要有光打了进去,黑暗就不再是他的宿命
—— 24.8.27
一、时间复杂度
时间复杂度是用来衡量:一个算法的执行,随数据规模增大,而增长的时间成本
时间复杂度不依赖于环境因素
如何表示时间复杂度呢?
假设算法要处理的数据规模是n,代码总的执行行数用函数 f(n)来表示
为了对 f(n)进行化简,应当抓住主要矛盾,找到一个变化趋势与之相近的表示法
二、大O表示法
已知 f(n) ,求 g(n)
① 表达式中相乘的常量,可以省略
② 多项式中数量规模更小(低次项)的表达式
③ 不同底数的对数,渐进上界可以用一个对数函数 log n 表示
④ 类似的,对数的常数次幂可省略
时间复杂度由低到高:
O(1) < O(log(n)) < O(n) < O(n*log(n)) < O(n^2) < O(2^n) < O(n!)
三、空间复杂度
与时间复杂度类似,一般也使用大O表示法来衡量:一个算法执行随数据规模增大,而增长的额外空间成本