動態規劃法解矩陣鏈乘問題

2022-08-11 07:48:10 字數 639 閱讀 2827

[問題]給定乙個包含n個矩陣的鏈乘式,通過對矩陣加括號來變換矩陣相乘的次序。問應當怎樣加括號才能使求解過程中乘法運算的總次數最少?最少的總次數是多少?

[解析]假設矩陣鏈乘式a1a2a3a4a5的最優解為((a1)(a2a3))(a4a5) ,則(a1)(a2a3)必為鏈乘式a1a2a3的最優解(由反證法易得)。由此可知,該問題具有最優子結構性質。遞推式如下;

設鏈乘式aiai+1ai+2……aj

中矩陣an

的列數為columns[n],其劃分的形式為

(ai……ak

)(ak+1……aj

),則相應的乘法運算的總次數為,對左括號進行計算求得矩陣aleft的過程中的最少總次數f(i)(k),加上對右括號進行計算求得矩陣aright的過程中的最少總次數f(k+1)(j),再加上columns[i-1]×columns[k]的矩陣aleft與columns[k]×columns[j]的矩陣aright 相乘時乘法運算的總次數columns[i-1] * columns[k] * columns[j]。所以鏈乘式aiai+1ai+2……aj

的最優解的值f(i)(j)就是k的取值從i一直取到j的過程中所得的最小的總次數,即

f(i)(j) = min,i≤k

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...

動態規劃法

有些問題在分解時會產生許多子問題,且分解出的自問題互相交織,因而在解這類問題時,將可能重複多次解乙個子問題。這種重複當然是不必要的,解決方法可以在解決每個子問題後把它的解 包括其子子問題的解 保留在乙個 中,若遇到求與之相同的子問題時,dp演算法又稱動態規劃,是資訊學競賽中選手必須熟練掌握的一種演算...

動態規劃法

最近遇到了一道挺有意思的演算法題 四種硬幣 1元3元4元5元 問 想要湊成n元錢最少幾枚硬幣?public class coinsgamemain fun 7,is public static void fun int k,int is i1 l min i2 if l k private stat...