このアルゴリズムは、一連の行列を乗算するための最小コストを見つけます。
行と列からなる行列A
と、行p
と列からなる行列が与えられた場合、標準的な行列の乗算では、積のエントリごとに、の対応する行と対応する列の要素間の乗算が行われます。q
B
q
r
A·B
p*q*r
p×r
q
A
B
現在、行列の乗算は結合的であるため、積を括弧で囲むことができます
M_1 · M_2 · … · M_n
好きなように、常に同じ結果が得られます。
ここで、r_0
の行数と のM_1
列r_i
数を とします(これは、製品を定義するためのM_i
の行数でもある必要があります)。M_(i+1)
次にM_i · … · M_k
、r_(i-1)×r_k
マトリックスでありM_(k+1) · … · M_j
、r_k×r_j
マトリックスです。したがって、最初に積をM_i · … · M_j
計算し、次に結果の 2 つの行列を乗算して積を計算する場合、乗算の総コストは次のようになります。M_i · … · M_k
M_(k+1) · … · M_j
c_{i,k} + c_{k+1,j} + r_(i-1)×r_k×r_j
ここc_{i,k}
で、 は選択された計算方法のコストですM_i · … · M_k
(および に類似していc_{k+1,j}
ます)。
ここで、M_i · … · M_j
分割による評価の最小コストはM_k
、2 つのサブプロダクトが最小コストで評価される場合に明らかに達成されます。
そして、評価M_i · … · M_j
の最小コストは、考えられるすべての分割の最小コストを計算することによって見つけられます。
m_{i,j} = min { m_{i,k} + m_{k+1,j} + r_(i-1)×r_k×r_j : i <= k < j }
のためにi < j
。
次に、完全な製品の最小コストは、最初に 2 つのマトリックスのみを含むサブ製品の最小コストを計算することによって計算されます [可能な分割は 1 つだけです]。次に、3 つのマトリックスを使用するサブ製品の最小コストを計算します。たった 2 つの行列の副積 - ここで括弧が有効になり、通常は違いが生じます - 次に、合計計算の最小コストが見つかるまで 4 つなど。
最小コストを生み出す括弧を見つけるには、最小コストの配列を検索して、それを生み出す分割を見つけます [そして、2 つのサブ製品など]。m
アレイ内の最小コストと並んで最小コストに分割します。