复杂度定义

Catalogue   

时间复杂度

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变 化情况并确定T(n)的数量级。这里用”O”来表示数量级,
给出算法的时间复杂度。

T(n)=O(f(n));

它表示随着问题规模的n的增大,算法的执行时间的增长率和f(n)的增长率相同,这称作算法的渐进时间复杂度,简称时间复杂度。

时间复杂度的分析方法:

  1. 时间复杂度就是函数中基本操作所执行的次数
  2. 一般默认的是最坏时间复杂度,即分析最坏情况下所能执行的次数
  3. 忽略掉常数项
  4. 关注运行时间的增长趋势,关注函数式中增长最快的表达式,忽略系数
  5. 计算时间复杂度是估算随着n的增长函数执行次数的增长趋势
  6. 递归算法的时间复杂度为:递归总次数 x 每次递归中基本操作所执行的次数

常用的时间复杂度有以下七种,算法时间复杂度依次增加:

  • O(1)常数型
  • O(log2 n)对数型
  • O(n) 线性型
  • O(n log2 n)二维型
  • O(n^2)平方型
  • O(n^3)立方型
  • O(2^n)指数型

空间复杂度

算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数,与问题的规模没有关系。算法的空间复杂度S(n)定义为该算法所耗费空间的数量级。

S(n)=O(f(n))

若算法执行时所需要的辅助空间相对于输入数据量n而言是一个常数,则称这个算法的辅助空间为O(1);

递归算法的空间复杂度:递归深度N*每次递归所要的辅助空间, 如果每次递归所需的辅助空间是常数,则递归的空间复杂度是 O(N).

算法效率

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度, 而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,
而空间复杂度主 要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,
计算机的存储容量已经达到了很高的程度。 所以我们如今已经不需要再特别关注一个算法的空间复杂度。