算法设计与分析-动态规划

一、对动态规划算法的理解

  动态规划算法与分治法很相似,相同之处是将原问题分解为若干个子问题,再根据子问题求得原问题的解。不同之处是动态规划的子问题之间不是相互独立的,经常是有重叠的。所以为了避免重复计算,可以制作一个表来记录已经解决的子问题,当再次遇到子问题时,查表即可得到答案。该算法通常用于求解具有最有性质的问题,并且其子问题也具有最优性质且重叠,即最优子结构性质和子问题重叠性质。

  用动态规划算法解决该类问题的基本步骤是:

1、找出最优解的性质及结构 2、建立子问题最优值的递归关系(即写出递归方程)3、以自底向上的递归形式计算最优值(也可以是自顶向下,即备忘录法)4.根据问题需要求出最优解,最优解是使最优值成立的解,可在第三步中记录相关信息求得。

二、递归方程

1.由n个数组成的序列的最长单调递增子序列。

递归方程:len[ i ] = max ( len [ j ] + 1 )  ( 0 < j < i ) ,  len [ i ] 表示从第一个数到第 i 个数 组成的序列的最长单调递增子序列的长度

2.长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1<=i<j<=n。试设计一个算法,计算出从游艇出租站1 到游艇出租站n所需的最少租金。

递归方程:rent [ i ][ j ] = min ( rent [ i ][ k ]  + rent[ k ][ j ]), ( i < k <= j),  rent[ i ] [ j ]表示从第 i 个出租站到第 j 个出租站所需的最少租金

三、结对编程情况

这几次结对编程情况挺好的,互相交流,两人编程能及时发现存在的问题并及时解决,效率较高。

猜你喜欢

转载自www.cnblogs.com/Jettle/p/11788021.html