算法第三章作业

一、动态规划算法的理解

  1.与分治法比较

    1)相同点:基本思想,将求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

    2)不同点:适用于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。

  2.实现:用一个表来记录所有已近解决的子问题的答案,不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中,在需要时再找出已求得的答案。

  3.好处:避免了大量重复的计算,得到多项式时间算法。

  4.通常按以下四个步骤设计:

    1)找出最优解的性质,并刻画其结构特征

    2)递归地定义最优解

    3)以自底向上的方式计算出最优值

    4)根据计算最优值时得到的信息,构造最优解

  5.基本要素:

    1)最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质

    2)重叠子问题:在用·递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。

    3)备忘录方法:用表格保存已解决的子问题答案,在下次需要解此子问题时,只要简单地查看该子问题的解答,而不必重新计算,其递归方式是自顶向下的。

  6.经典运用动态规划算法的问题:

    1)矩阵连乘问题

    2)最长公共子序列

    3)最长子段和

    4)0-1背包问题

二、编程题递归方程

  1.单调递增最长子序列:m[i] = max{ m[k] + 1 | a[k] < a[i] } (1<= k < i)

             m[i] = 1 (k = 0)

    a[i] : 输入数列

  2.租用游艇问题:m[i]=min{cost[i][k] + m[k] }(i<k<=n)

    cost[i][j] :从 i 到 j 要cost的money

三、结对编程情况

  我们是一起讨论思路,然后代码都是由伙伴打的,被倩宝的打代码速度震惊,完全不用看键盘,打字飞快。第二题,因为伙伴做过类似的题,一下子就做出来了。前两题都没有写递归方程式。第三题,比较难,没写出递归方程式的话,比较难实现出来,课上没由有完全做出来,最后课后伙伴做出来了,跟我分享思路。

    

posted on 2019-11-03 11:16  行星9  阅读(114)  评论(0)    收藏  举报

导航