實驗名稱: 最長公共子序列問題 |
實驗地點: |
實驗目的: 理解動態規劃算法的概念; 掌握動態規劃算法的基本要素; 掌握設計動態規劃算法的步驟; 通過應用範例學習動態規劃算法的設計技巧與策略;
|
|
實驗原理 動態規劃(dynamic programming)是運籌學的一個分支,是求解決策過程(decision process)最優化的數學方法。20世紀50年代初美國數學家R.E.Bellman等人在研究多階段決策過程(multistep decision process)的優化問題時,提出了著名的最優化原理(principle of optimality),把多階段過程轉化爲一系列單階段問題,利用各階段之間的關係,逐個求解,創立了解決這類過程優化問題的新方法——動態規劃。1957年出版了他的名著Dynamic Programming,這是該領域的第一本著作。 算法總體思想: 1)動態規劃算法與分治法類似,其基本思想也是將待求解問題分解成若干個子問題,先求解子問題,然後從這些子問題的解得到原問題的解。 2)與分治法不同的是,適合於用動態規劃法求解的問題,經分解得到的子問題往往不是獨立的。子問題中存在大量的公共子問題,在分治求解過程中被多次重複計算,保存計算結果,爲後面的計算直接引用,減少重複計算次數這就是動態規劃的基本思想。 3)用動態規劃算法求解問題,可依據其遞歸式以自底向上的方式進行計算。在計算過程中,保存已解決的子問題的答案。每個子問題只計算一次,而在後面需要時只要簡單查一下,從而避免大量重複計算,最終得到多項式時間算法。 動態規劃基本步驟: 找出最優解的性質,並刻畫其結構特徵。 遞歸地定義最優值。 以自底向上的方式計算出最優值。 根據計算最優值時得到的信息,構造最優解。 前三個步驟是動態規劃算法的基本步驟。在只需求出最優值的情況,步驟四可以省去。若需要求最優解,則必須執行步驟四,根據所記錄的信息,快速構造出最優解。
|
|
實驗內容: 1、使用動態規劃算法解決最長公共子序列問題:給定兩個序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最長公共子序列。。 2、通過上機實驗進行算法實現。 3、保存和打印出程序的運行結果,並結合程序進行分析,上交實驗報告。
|
|
源程序:
|
|
實驗結果:
|
|
心得與體會:
|
參考文章
https://blog.csdn.net/weixin_40673608/article/details/84262695