大O复杂度表示法
大O时间复杂度实际上并不具体表示代码真正的执行时间,而是表示算法的执行时间随数据规模增长的变化趋势
,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。
表示:
例如:,其中
大O复杂度表示法,就是代码执行的次数
,三个比较实用的方法:
- 只关注循环执行次数最多的一段代码
- 加法法则:总复杂度等于量级最大的那段代码的复杂度
多段代码组成的代码的分析 - 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
循环内的方法调用
常见的复杂度量级
1. 多项式时间复杂度
常量阶
对数阶
线性阶
线性对数阶 比如:归并排序、快速排序
平方阶 ,立方阶 ,...,k次方阶
2. 指数型时间复杂度
指数阶
阶乘阶
我们把时间复杂度为非多项式量级的算法问题叫作 NP(Non-Deterministic Polynomial,非确定多项式)问题。当数据规模 n 越来越大时,非多项式量级算法的执行时间会急剧增加,求解问题的执行时间会无限增长。所以,非多项式时间复杂度的算法其实是非常低效的算法。
对数知识
,所以通常省略底数,计作
其他时间复杂度表示
除了常用的大O时间复杂度,继续了解其他四个复杂度分析方面的知识点,最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst case time complexity)、平均情况时间复杂度(average case time complexity)、均摊时间复杂度(amortized time complexity)。
关于平均情况时间复杂度,需要考虑每种情况出现的概率,引入概率论中的加权平均值,也叫作期望值,所以平均时间复杂度
的全称应该叫加权平均时间复杂度
或者期望时间复杂度
。
内容总结自:
极客时间:《数据结构与算法》王争