1计算机算法——设计与分析导论南开大学计算机科学与技术系刘璟2Chapter7
Chapter7
动态规划动态规划((DynamicProgrammingDynamicProgramming))7
1动态规划的基本原理7
2最优二分搜索树(OptimalBinarySearchTree)7
3近似串匹配(ApproximateStringMatching)问题37
1动态规划的基本原理7
1Fibonacci数的计算Fibonacci数又称为Fibonacci数列,定义为:F0=0,F1=1,Fn=Fn-1+Fn-2(n≥2)计算Fibonacci数列可由递归函数fibo完成
递归函数fibo由此可知,函数fibo的计算量随n的增加而急剧增加,n=6时需25次调用,n=10时需177次调用,n=15时需1974次调用
进一步的研究表明,调用次数An=2Fn+1-1,其中,
可以估计,,其计算量是n的指数函数
)(nnF618
1)15(21)2()(/2nnAnT4从Fig
1中可以看出,大量的调用过程是重复的,此算法可以改进
函数fibo的改进函数fib这个程序的时间代价为O(n)阶
2矩阵连乘的顺序问题1
一个实例四个矩阵A1、A2、A3、A4相乘,设其阶数分别为A1:30×1,A2:1×40,A3:40×10,A4:10×25
因为矩阵相乘满足结合律,所以可有下面五种(实际为六种)不同的运算次序,而且不同的运算次序所需的元素间乘法的次数不同,如下面所列:((A1A2)A3)A430×1×40+30×40×10+30×10×25=20700(A1A2)(A3A4)30×1×40+40×10×25+30×40×25=41200(A1(A2A3))A41×40×10+30×1×10+30×10×25=8200A1((A2A3)