Java数据结构(六)—— 时间复杂度和空间复杂度
时间复杂度和空间复杂度
度量一个程序执行时间的两种方法
-
事后统计的方法
两个问题:
-
相对设计的算法的运行行能进行评测,需要实际运行程序
-
所得时间的通缉令依赖于计算机的硬件、软件等环境因素
-
-
事前估计法
通过分析某个算法的时间复杂度来判断那个算法更优
时间频度
一个算法花费的时间与算法中语句的执行此时成正比,语句执行次数叫时间频度(语句频度),记为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代替运行时间中的所有加法常数
-
修改后的运行次数函数中,只保留最高阶项
-
取出最高阶项的系数
平均时间复杂度和最坏时间复杂度
-
平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,该算法的运行时间
-
最坏情况下的时间复杂度称为最坏时间复杂度,一般讨论时间复杂度军事最坏情况下的时间复杂度
算法的空间复杂度
所有源码都可在gitee仓库中下载:https://gitee.com/vvwhyyy/java_algorithm