概述
衡量一个算法的好坏,最简单的标准就是他的时间复杂度。
算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。
时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
例如,如果一个算法对于任何大小为 n (必须比 n0 大)的输入,它至多需要 5n3 + 3n 的时间运行完毕,那么它的渐近时间复杂度是 O(n3).
一、时间频度
要理解时间复杂度,需要先理解时间频度,而时间频度简单的说,就是算法中语句的执行次数。
举个例子:
要计算1+2+...+100,现在有两种算法
1 | public int fun1(int n){ |
我们可以看见,对于fun1()
这个方法,不管n多大,永远需要执行n+1次,也就是说他的时间频度是T(n)=n+1,
而对与fun2()
来说,不管n多大都只需要执行1次,所以他的时间频度T(n)=1。