1. 程式人生 > >算法第三章作業

算法第三章作業

方程 向上 解決 代碼 遞增 這樣的 不存在 遞歸 出現

1、對動態規劃算法的理解:

動態規劃算法與分治法類似,其基本思想也是將待求解問題分解成若幹個子問題,這些子問題往往有重疊子問題,從這些子問題的解得到原問題的解。可以用一個表來記錄所有已經解決的子問題的答案,不管這個子問題以後是否被用到,只要它被計算過,就把結果填入表中。動態規劃算法往往適用於解最優化問題,首先找出最優解的性質,找出遞歸方程,然後自底向上找出最優值以構造最優解。動態規劃算法將待求解的問題分解為若幹個子問題(階段),按順序求解子階段,前一子問題的解,為後一子問題的求解提供了有用的信息。在求解任一子問題時,列出各種可能的局部解,通過決策保留那些有可能達到最優的局部解,丟棄其他局部解。依次解決各子問題,最後一個子問題就是初始問題的解。

2、

編程題1的遞歸方程:

dp[i] = max(dp[j]+1, dp[i]);

編程題2的遞歸方程:

i==n, dp[i] = 0;
i<n, dp[i] = min{ r[i][k] + dp[k] }, i<k<=n;

3、結對編程情況:

我們在做編程題1時結合了學習最長公共子序列問題時的一些思路,很快的找到了思路,在求以ai為末元素的最長遞增子序列時,找到所有序號在L前面且小於ai的元素aj,即j<i且aj<ai。如果這樣的元素存在,那麽對所有aj,都有一個以aj為末元素的最長遞增子序列的長度f(j),把其中最大的f(j)選出來,那麽f(i)就等於最大的f(j)加上1,即以ai

為末元素的最長遞增子序列,等於以使f(j)最大的那個aj為末元素的遞增子序列最末再加上ai;如果這樣的元素不存在,那麽ai自身構成一個長度為1的以ai為末元素的遞增子序列。在做編程題2時我們經過討論找到了遞歸方程,但是在打代碼時,由於對全局變量和引用沒有好好理解,導致代碼出現了一些問題,最後我們互相討論,一起查閱資料,終於克服了難題把題ac了。在結對過程中,我們一起討論,互相學習,提高了學習效率,很開心!

算法第三章作業