首先,理解时间复杂度的前提是理解时间频度。
时间频度定义:时间频度是由“算法的执行时间和执行次数成正比”来决定的,记做T(n)
时间频度的特点:忽略常数项(2n+30和2n,忽略30)、忽略低次项(2n^3+2n、2n^3+10,忽略2n)、忽略系数(2n^4+5n、2n^4+9n,忽略5和9)。多少次方是关键!
时间复杂度:是算法执行语句的次数。
计算时间复杂度有两种方法:
方法一是事后统计:使用某个排序算法结合程序A运行,运行完后查看时间。
事后分析计算排序的时间复杂度具有两个问题:一是 由于不同的电脑运行速度的快慢,在不同的电脑计算排序算法的时间复杂度的结果会被影响;二是 需要实际在运行之后才能知道该算法的时间复杂度结果。
方法二是事前估算:通过分析算法的时间复杂度得知。
计算时间复杂度的方法:①将式子中的常数变为1。②只保留最高阶。③去掉系数。
eg:原式子:2n^3+7n+9——>2n^3+7n+1——>2n^3——>n^3,得到时间复杂度为O(n^3)。
常见的时间复杂度有8种(复杂度越高执行效率越低):
常数阶:O(1)
对数阶O(log2[底数]n[真数])
线性阶:O(n)
线性对数阶:O(nlog2[底数]n[真数])
平方阶:O(n^2)例如嵌套for
立方阶:O(n^3)例如3层嵌套for
K次方:O(n^k)k层嵌套for\递归
指数阶:O(2^n)
来源:oschina
链接:https://my.oschina.net/u/4432600/blog/4267476