[問題]給定一個包含n個矩陣的鏈乘式,經過對矩陣加括號來變換矩陣相乘的次序。問應當怎樣加括號才能使求解過程當中乘法運算的總次數最少?最少的總次數是多少?spa
[解析]假設矩陣鏈乘式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{f(i)(k) + f(k+1)(j) + Columns[i-1] * Columns[k] * Columns[j]},i≤k<j