算法第三章作业
1. 你对动态规划算法的理解
动态规划算法适用于解最优化问题,可以算作分治法的优化和升级。在用分治法求解问题时,有些子问题被重复计算了许多次。如果能够保存已经解决的子问题的答案,在需要时再找出已求得的答案,这样可以避免大量的重复计算,从而得到多项式时间算法。为达到此目的,可以用一个表来记录所有已解决的子问题的答案。动态规划的基本思想就是,无论子问题以后是否被用到,只要它被计算过,就将其结果存入表中。运用动态规划法的最关键步骤就是写出递归表达式。
2. 分别列出编程题1、2的递归方程
编程题1的递归方程:m[i]=1 , n=1
m[i]=max{ m[k+1] , m[i] } , (a[k]<a[i], 1<=k<i, n>1)
编程题2的递归方程:m[i]=min{ c[i][k]+m[k] }, (i<k<=n) (从i站出发到目的地的最小费用)
(c[i][j]表示从i站到j站的费用)
3. 说明结对编程情况
在结对编程过程中,彼此的交流能够更有效率完成题目,也促进了双方的进步,希望在以后实践讨论的过程中收获更多知识,不断成长。