算法的时间复杂度分析 & 递归函数时间复杂度分析
算法的时间复杂度分析
1.算法耗费的时间、语句频度、输入规模
在实际中,一个算法所需耗费的时间 = 算法中所有语句的执行时间之和
而,
每条语句的执行时间= 每条语句执行一次所需时间 * 每条语句的执行次数(语句频度);
因为每条语句执行一次所需时间取决于机器执行指令的性能、速度等难以确定的因素,而为了独立于机器的软、硬件系统来分析算法的时间耗费,
我们假设每条语句执行一次所需时间均为单位时间,那么,一个算法的时间规模就与其所有语句的频度之和相关。
输入规模:算法求解问题的输入量称为问题的规模,一般用一整数来表示:n = 1, 2, 3 …k
那么,对于输入规模为 n 的算法,其语句频度之和可记作:T(n)
例:
(1) for(i=0; i<n;j++) n+1
(2) for (j=0;j<n;j++) n(n+1)
(3) C[i][j]=0; n^2
(4) for (k=0; k<n; k++) n^2(n+1)
(5) C[i][j]=C[i][j]+A[i][k]*B[k][j]; n^3
分析:
语句(1)的循环控制变量i要增加到n,测试到i=n成立才会终止。故它的频度是n+1。但是它的循环体却只能执行n次。
语句(2)作为语句(1)循环体内的语句应该执行n次,但语句(2)本身要执行n+1次,所以语句(2)的频度是n(n+1)。
同理可得语句(3),(4)和(5)的频度分别是n^2,n^2(n+1)和n^3。
该算法中所有语句的频度之和(即算法的时间耗费)为: T(n)=2n^3+3n^2+2n+1 (1.1)
2. 时间复杂度
概念:
如某算法的语句频度之和为 T(n),那么,当 n 趋于无穷大虹,若存在函数 f(n)使得 T(n)/f(n)的极限值为不等于0的常数, 则称: f(n) 是 T(n) 的同数量级函数,记作:T(n) = O(f(n)) 称: O(f(n)) 为该算法的渐进时间复杂度,简称时间复杂度。
举例说明时间复杂度的求法:
交换i和j的内容。
Temp=i;
i=j;
j=temp;
以上三条单个语句的频度