算法的复杂度

时间复杂度
  • 计算机算加减的时间很短,所以主要看算法中做了几次乘除。
    空间复杂度
  • 看一个递归打印100000个数的例子
  • 因为系统每一次都要划分一块内存出来保存程序的一个状态,但是系统的内存就那么多,数据一大,就很容易非正常退出(爆掉)。
  • 上述例子的空间复杂度跟数据量N成正比
    平均复杂度与最坏情况复杂度
  • 常分析最坏情况复杂度,因为平均是很难计算的

    复杂度的渐进表示法

  • 第一个函数是T(n)的上界,比如前面T(n)=C1n^2+C2n,当n充分大时,n^2的作用远远大于n,所以我们可以只考虑n^2.通常上界我们取能取到的最小的上界。比如说T(n)=n,上界可取n^2,n^3…,但为了符合实际,我们取最小的。
  • 第二个是下界,下界取最大
  • 空间复杂度也一样
  • 一些复杂度随输入规模的变化
  • 1代表常数,复杂度不随输入规模变化的意思
  • log n不写底数是因为相差只是个常数倍,无关紧要的
  • 看到n^2的时候,想一下能不能降成nlog n,这样就会快很多。
  • 例子:
  • 为什么是n^3呢?因为这里面有三重循环,最里面一重循环虽然看不太出来是n次的,但其实也是(反正跟循环次数肯定跟数据量有关这个看得出来吧)
  • 将两段算法拼在一起的时候,复杂度上界就是两个上界取大。
  • 嵌套则是上界相乘。
  • 算法实例:第一讲->1.3最大子列和(分而治之和在线处理太恐怖了)