タイトル:動的なプログラミングアルゴリズムのニーモニック
死ぬと言うことはありません!
行列は、継続的な問題を掛けます
件名の説明:
Aiとアイ+ 1が乗算され、所与のN行列{A1、A2、...、アン}、i = 1,2、...、N-1。行列を計算順序を決定する方法であっても、このために必要最低限の数の行列乗算の積を計算するようにも、製品を計算します。例えば:
A1 = {} 30x35
A2 = {} 35x15
A3 = {15x5}
A4 = {5×10}
A5 = {} 10x20
A6 = {} 20x25
最終結果は、((A1(A2A3))((A4A5)A6))15125の最小の時間を掛け。
問題解決のアイデア:
プロパティは、動的プログラミングすることができ、最適な部分構造特性です。
その演算A:[K + 1:j]はAと最高のオーダーである。算出された最適順序サブ行列[I jは]リアンA [K I]に含まれます。
再帰式に基づくことができ、この問題を解決する動的プログラミングアルゴリズムは、ボトムアップ方式で(即ち、最小カウントで開始)が算出されます。
計算過程では、子供の問題を保存するための答えは解決されました。各サブ問題は、単純にダブルカウント、最終的に取得する多項式時間アルゴリズムの多くを避けるためにチェックする必要が戻ったときに、一度だけ計算されます。
我々は、次の式に基づいて結果を計算することができます。P [I-1]は、i番目の行列の行数を表し、P [k]はIを表し:J一緒にした後に得られた:後に得られる、P [j]を組み合わせた行列の列数kがk + 1であります列の数。この計算方法は、実際には2つの行列を乗算した回数を乗じて算出された合計の一部です。
公式:
偶数行列当たりカウント数2倍の最小乗数M [I] [J]で:
m[0][1] m[1][2] m[2][3] m[3][4] m[4][5] //m[0][1]表示第一个矩阵与第二个矩阵的最小乘次数
その後、順番に計算する乗算マトリックス3の数を算出します。
m[0][2] m[1][3] m[2][4] m[3][5]
行列は、継続的に数4を掛けます:
m[0][3] m[1][4] m[2][5]
行列は、継続的に数5を掛け:
m[0][4] m[1][5]
行列は、継続的に6の数を掛け:
m[0][5] //即最后我们要的结果