算法复杂度

算法的复杂性体现在运行该算法时计算机所需资源的多少,计算机资源最重要的是时间和空间,故算法复杂度分为时间复杂度和空间复杂度。

一、时间复杂度

  一个算法中的语句执行次数称为语句频度或时间频度,记为T(n),也叫常数操作数量表达式。

  • 常数操作:与数据量无关的操作,如 +  -  *  /  位操作 比较操作等,每次操作具有固定的时间

  时间复杂度是指在最差的情况下执行算法所需要的计算工作量,其表示方式为O(f(N)),读作bigO。

  时间复杂度的f(N)与常数操作的表达式T(n)有关,具体为常数操作数量表达式忽略系数的最高阶项,如常数操作数量表达式为 2 * N^2 + 1,则时间复杂度O(N2),类似于高阶无穷大。

  对于一个算法来说,若其执行次数与输入的大小无关,则算法复杂度为O(1),如访问数组中的单个元素;

  对于不同算法,时间复杂度同为O(f(N))时,比较常数操作数量表达式T(n)的常数项来区分好坏,但通常指标不容易判断,直接跑代码看谁快。

 

  递归行为时间复杂度

  当递归行为满足子问题等规模时,可用master公式来判断其时间复杂度。

      T(N)  =    a   *   T(N/b)    +   O(Nd)

  T(N) :母问题数据量         

  a :子问题执行次数  

  T(N/b):子过程,1/b为子问题数据量相对母问题数据量的占比 

  O(Nd):剩余过程的时间复杂度

  根据master公式,时间复杂度判断有以下三种情况  

    loga   <   d      O(Nd)

    loga   >   d      O(Nlogba)

    loga   =   d      O(Nd * logN)  log默认以2为底

  如二分法查找最值问题,每次将母问题分成两份,则a = 2,b = 2,d = 0,其时间复杂度为O(logN)

 

二、空间复杂度

  空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。如插入排序的空间复杂度为O(1),因为在执行

算法的过程中没有额外使用存储空间。

posted @ 2022-06-20 11:50  Liang-ml  阅读(455)  评论(0)    收藏  举报