Java数据结构(六)—— 时间复杂度和空间复杂度

时间复杂度和空间复杂度

度量一个程序执行时间的两种方法

  1. 事后统计的方法

    两个问题:

    1. 相对设计的算法的运行行能进行评测,需要实际运行程序

    2. 所得时间的通缉令依赖于计算机的硬件、软件等环境因素

  2. 事前估计法

    通过分析某个算法的时间复杂度来判断那个算法更优

时间频度

一个算法花费的时间与算法中语句的执行此时成正比,语句执行次数叫时间频度(语句频度),记为T(n)

对于时间频度,可以忽略常数项,低次项和系数

时间复杂度

算法中的基本操作语句的重复执行次数时问题规模n的某个函数用T(n)表示,若某个辅助函数,使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常熟,则称f(n)是T(n)同数量级函数,记作T(n) = O(f(n)),称O(f(n))为算法的渐近时间复杂度,简称时间复杂度

T(n)不同,但时间复杂度可能相同

计算时间复杂度的方法

  • 常数1代替运行时间中的所有加法常数

  • 修改后的运行次数函数中,只保留最高阶项

  • 取出最高阶项的系数

image-20201027131249222

image-20201027131433959

平均时间复杂度和最坏时间复杂度

  1. 平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,该算法的运行时间

  2. 最坏情况下的时间复杂度称为最坏时间复杂度,一般讨论时间复杂度军事最坏情况下的时间复杂度

image-20201027131808028

算法的空间复杂度

image-20201027131934392

 所有源码都可在gitee仓库中下载:https://gitee.com/vvwhyyy/java_algorithm

原文地址:https://www.cnblogs.com/whystudyjava/p/14043299.html