算法时间复杂度的本质是算法的执行时间,也就是算法中所有语句的频度之和。上一篇博客中说了,语句频度就是语句的执行次数,它与算法求解问题的规模大小息息相关。
假设对于给定的算法,目前问题规模为n,则语句频度可以表示成一个关于问题规模的函数 T(n),那么算法时间复杂度也就可以用T(n)表示,其含义是算法在输入规模为n时的运行时间。
当问题规模很大时,精确的计算T(n)是很难实现而且也是没有必要的。对于算法时间性能的分析无需非要得到时间复杂度T(n)的精确值,它的变化趋势和规律也能清楚地反映算法的时间耗费。基于此,引入了渐进时间复杂度作为时间性能分析的依据,它的含义就是:在问题规模 n趋于无穷大时算法时间复杂度T(n)的渐进上界,即函数 T(n)的数量级(阶)。
算法时间复杂度和渐进算法时间复杂度在实际的算法分析过程中是不予区分的,渐进时间复杂度可以简称为时间复杂度,记为T(n)=O(f(n))。其中,通过统计算法中基本操作重复执行的次数就可近似地得到算法的执行效率,用O(n)表示,称为时间复杂度。
还是前面的那个例子:
三个语句:
Temp=i;
i=j;
j=temp;
以上三条单个语句的频度均为 1,该程序段的执行时间是一个与问题规模 n 无关的常数。
算法的时间复杂度为常数阶,记作 T(n)=1+1+1=O(1).
如果算法的执行时间不随着问题规模 n 的增加而增长,即使算法中有 上千条语句,其执行时间也不过是一个较大的常数。
此类算法的时间复杂度是 O(1).