一、时间复杂度的概念
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称时间复杂度。
二、概念详解
-
基本操作
多数情况下,为最深层循环内的语句所描述的操作。 -
时间规模n
一个算法的运行工作量只取决于问题的规模(通常用n表示)。在算法中,总能找到一个n,一般存在于循环的判断条件中。
三、计算时间复杂度方法
-
找出基本操作
基本操作即为重复执行次数和算法的执行时间成正比的操作,简单的说,就是该语句执行完时,算法也将结束。 -
确定时间规模n
规模n一般可由循环条件获知。循环执行的次数(基本操作执行的次数)和参数n有关,其参数n就是规模n。
例如:
for(i = 1;i <= n;i++)
由 i < n 可知,参数n即为时间规模n
- 计算出n的函数f(n)
n确定以后,循环的结束与否和 i 有关。i 的初值为1,每次自增1,假设 i 自增 m 次后循环结束,则 i 的最后值为 1+1×\times×m ,因此有 1+1×\times×m=n,解得 m = n-1 ,即 f(n) = n-1,因此时间复杂度为 T(n) = O(n) 。
四、总结
计算时间复杂度,简单的说就是将算法中基本操作的执行次数作为算法时间复杂度的度量。先找出基本操作,然后确定时间规模,再计算基本操作的执行次数。在计算执行次数时,要根据不同情况,用不同方法计算。
- 循环主体中的变量参与循环条件的判断
找出主体语句与T(n)成正比的循环变量,将之带入循环条件中进行计算。 - 循环主体中的变量与循环条件无关
- 递归程序:一般使用公式进行递推,即采用数学归纳法计算。
- 非递归程序:直接累计次数。