【算法与数据结构】复杂度分析
本文记录了博主对算法复杂度分析,常见的几种复杂度,以及平均时间复杂度、最好/最坏时间复杂度的总结。 复杂度分析 关于算法的复杂度,我们通常采用大O来进行表示,在此我们假设每行代码的执行时间都一样,为一个单位时间,然后在这个假设的基础上进行时间、空间复杂度的分析。先分析一下上面的代码,2-4行的时间复杂度为3,紧接着有两个for循环,第一个for循环的时间复杂度为n,同时第6行的时间复杂度也为n,而内部的for循环的时间复杂度为2*n*n。总的时间复杂度则为2*n*n + 2*n+3。因此,此算法的时间复杂度为O(2*n*n + 2*n+3)。在此关于复杂度分析,有三点需要注意的: 1、 总的时间复杂度等于量级最大的那端代码的复杂度, 分析算法的时间复杂度的时候,常常忽略 常数阶 , 低阶 , 系数。因此分析一个算法的时间复杂度的时候,我们只需要关注量级最大的那段即可。 2、乘法规则: 嵌套的代码等于嵌套代码体内外执行时间的乘积 。我们可以发现在for循环的嵌套中,基本都采用了这个规则。 如下面这段代码,外部for循环的复杂度为O(3*n), 第2个for循环的复杂度则为O(2*n), 整个代码的时间复杂度为O(2*n)*O(n) + O(2*n) + 3;因此改代码的复杂度为O(n*n) 1 int cal(int n) { 2 int sum = 0; 3 int