1.时间频度:一个算法中语句的执行次数称为时间频度或者语句频度,用T(n)表示。其中n是问题规模。
2.时间复杂度:若存在一个辅助函数f(n)使得当n趋近于无穷大的时候T(n)/f(n)趋向于一个不为0的常数,那么就是说T(n)和f(n)是同数量级函数,可以表示为T(n)=O(f(n)),O(f(n))称为渐进时间复杂度,简称时间复杂度。
时间复杂度相同,但是时间频度不一定相同。
计算出f(n)以后,可以忽略掉其最高次幂的系数和其他低次幂的项。
3.常见的时间复杂度按数量级排序依次为 常数阶O(1) 对数阶O(log 2 n) 线性阶O(n) 线性对数阶 O(n log 2 n) 平方阶O(n^2) 立方阶 O(n^3) k次方阶 O(n^k) 指数阶 O(2^n)……
4.对于同一个问题,解决的算法不一样,时间复杂度也就可能是不一样的,由于时间复杂度和问题规模n有关,所以在选取算法时要考虑n的大小来确定到底哪一个是时间复杂度最优的算法。具体可以在同一坐标轴中画出n^2和n^3的图像,在不同区域内两个函数值大小不一样。
5.最好,最坏和平均时间复杂度:对于某些算法,时间复杂度不仅仅取决于时间频度,还依赖于其他因素。比如在一个数组中寻找4,那么4 的位置就影响了时间复杂度。4可能在第一个位置找到f(n)=1,也可能在最后一个位置找到f(n)=n。平均时间复杂度就是最好情况和最坏情况下的平均值。
实际上,人们更关注最坏时间复杂度和平均时间复杂度,通常都是计算最坏时间复杂度。