第十五章動態規劃之「矩陣鏈乘法」

2021-06-06 05:26:39 字數 420 閱讀 4330

裝配線排程與矩陣鏈乘法是很典型的動態規劃的兩個例子。關於這倆例子對於理解動態規劃的作用稍後補上。這個程式的時間複雜度為ω(n^3),這個可以通過替換法證明。

輸出最優加括號的**對於理解遞迴很有幫助,蹭蹭蹭,先往回跑,路上什麼也不幹,跑到頭再跑回來,把該幹的都幹了,先自頂向下,再自底向上。

**如下:

#include using namespace std;

void matrixchainorder(int (*a)[2],unsigned int (*m)[7],int (*s)[7])

for(int l=2;l<=6;l++)

}} }

}void printopticalorder(int i,int j,int (*s)[7])

{ if(i==j)

{ cout<<"a"<

演算法導論筆記 第十五章 動態規劃

點此訪問 第一部分比較抽象,建議先大體上瀏覽一下,有個初步印象,等熟悉第二部分的具體的例題之後,回過頭再仔細總結這一部分。首先說明一點,動態規劃 dynamic programming 中的programming指的是一種 法,而不是程式設計的意思。動態規劃法的思想妙就妙在這個 上。根據動態規劃思想...

第十五章動態規劃之「最優二叉查詢樹」

本書從文字翻譯的案例切入,假設把英文翻譯為法文,每個英文單詞為關鍵字,其對應法文為衛星資料。用二叉查詢樹儲存,該怎麼設計這個查詢樹。即使是紅黑樹,查詢的時間複雜度也為o lgn 即樹的深度。但是因為文章中某個單詞出現的頻率不同,所以可能有些頻率很高的單詞比如the的深度可能很深,而不常見的aha的深...

動態規劃之矩陣鏈乘法

雖然我們在 動態規劃之鋼條切割 裡面已經介紹過動態規劃的相關知識,這裡還是提一下動態的兩大特徵 1.最優子結構,原問題的解是在子問題的最優解的基礎上建立起來的 2.重疊子問題,即在不斷求解子問題的過程中會產生相同的子問題,而不是一直產生新的子問題 現在我們來看乙個例子,假設有三個矩陣 a1 10,1...