Rešitev: Množenje pravokotnih matrik (Mathematica)

Iz MaFiRaWiki

Naloga: Množenje pravokotnih matrik

Clear[T]
T[i_,i_] := T[i, i] = {0, " "}
T[i_,j_] := T[i, j] = Module[
{t, m, k, ls, ds}, t = Table[T[i, k][1]; + T[k + 1, j][1] + p[i]*p[[k + 1]]*p[[j + 1]], {k, i, j - 1}]; 
m = Min[t]; 
k = Position[t, m][1][1];
If[i ==i + k - 1,
ls = StringJoin[" [ ", ToString[i], " ] "],
ls = StringJoin["(", T[i, i + k - 1][2], ")"]];
If[i + k == j, 
ds = StringJoin[" * [ ", ToString[j], " ] "],
ds = StringJoin[" * (", T[i + k, j][2], ")"]]; 
Return[{m, StringJoin[ls,ds]}]]
   

Poglejmo si primer:

p = {1, 10, 2, 20, 3, 52, 6}

{1, 10, 2, 20, 3, 52, 6}

T[1, 6]

{588, (((( [ 1 ] * [ 2 ] ) * [ 3 ] ) * [ 4 ] ) * [ 5 ] ) * [ 6 ] }

(*prvi del rezultata je minimalno število množenj, drugi del postavljeni oklepaji, kjer vejica predstavlje množenje, številka pa matriko po vrsti od začetka do konca*)


Glej tudi

Osebna orodja