步步为营,动态规划,深入浅出,思维提升

步步为营,动态规划,深入浅出,思维提升

——算法第三章总结 软三 杨伟耿 20181003083

一、 步步为营,动态规划

动态规划算法与分治法类似,类比成上一章总结时举的例子,可以很容易理解其中的思想。但是,分治法应用在某些问题上时,会出现重复计算导致时间复杂度高的问题。以我的理解就是,动态规划像是填写一张表格,先把最底层的需要先知道的填了,然后后面的可以根据先前的填写,填写过程中都取最优的选择。

分治法是将问题分成几个独立的部分,最后再结合;动态规划就像上面所说的那样,有一个记录和保持的作用,几个部分互相联系。

动态规划的设计步骤:找出最优解的性质,并刻画其结构特征、递归地定义最优值、以自底向上的方式计算最优值、根据计算最优值时得到的信息,构造最优解。

 

编程题1(最长递增子序列)的递归方程如下:

       定义m[i]为以第i个数结尾的最优解(单调递增最长子序列)用一维的表来填写这道题每一步的最优解结果:

       m[i] = max { m[k] + 1 | a[k] < a[i] }

        (1≤k≤i)

 

编程题2(租用游艇)的递归方程如下:

       定义m[i]为第i站到最后一站的最优解(价格最便宜)用一维表来填写:

       m[i] = min { cost[i][k] + m[k] } (其中,cost[i][k]为第i站到第k站的价格)

        (i≤k≤n)

 

二、 结对编程,共同进步

最近结对编程效果不佳,一起打码的时间较少,队友很强,情况一般是我在向队友请教。动态规划问题大部分都很难,所以我也很懵。队友有时候一下子就把问题解决了,我只能看代码学习理解然后不懂的地方问队友,自己打代码的次数较少。

能够听懂看懂理解一道题的解法和思维,甚至某些题目自己也可以写出递归方程,但是下手去敲代码就会不知道怎么开始打,打代码的思维乱,错漏百出。

你可能感兴趣的:(步步为营,动态规划,深入浅出,思维提升)