算法分析三方面
- 正确性分析:对一个能得到终结结果的算法的结果进行正确性分析(顺口溜)
- 时空效率分析:对算法的实现运行所用空间和所需步骤进行分析。
- 时空特性分析:除了以上两点还有诸如:健壮性、稳定性、可维护性、可拓展性等方面的分析。
计数分析
计数分析是算法时空效率分析的基石。如下一段代码:
for(int i = 1;i<=n;i*=2)
{
for(int j = 1;j<=i;j++)
{
l++;
}
}
本段代码的核心计算部分就是l++,要对这段代码进行计数分析,首先来看两段循环执行过程。
第一层循环i的取值范围(i=2^N;N<=logn(以2为底)),所以l++的运行次数就是2的阶乘的累加,所以有
f(n)=∑i=1logn2i=2n-2;
渐近分析
忽略外界因素,仅仅对算法的输入n趋向于无穷大的时候算法的效率表现。
渐进分析的三个符号:O(表示渐进上界<=),Ω(渐进下界>=),Θ(准确界)
怎样判断当n向于正无穷大时f(n)的阶的情况?
高等数学求极限一章,让f(n)与已知阶g(n)做商在趋向于正无穷时的结果判断,f(n)与g(n)是同阶,还是高阶。
递归树求渐近上界
fg:T(n) = 3T(n/3)+O(logn)
Tolal = O(n)
证明:T(n) = 3T(n/3)+O(logn) <=cn + clogn
当 n= 1,对c>=1都成立;
当 n>1,T(n) = 3T(n/3)+O(logn) <=cn + clogn
=c(n+logn)
=θ(max(n,logn))
所以T(n) 的渐进上界是 O(n)。