# Naloga/Podatkovne strukture in algoritmi/Strassenovo množenje matrik/Rešitev (Mathematica)

 Ta članek ali del članka je v delu. Veseli bomo, če ga boste dopolnili in popravili.
```Clear[T]
T[i_, i_, p_List] := T[i, i, p] = {0, ""}
T[i_, j_, p_List] := T[i, j, p] = Module[{t, m, k, ls,
ds}, t = Table[T[i, k, p][[1]] + T[k + 1,
j, p][[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, p][[2]], ")"]];
If[i + k == j, ds = StringJoin[" * [ ", ToString[j], " ] "], ds =
StringJoin[" * (", T[i + k, j, p][[2]], ")"]];
Return[{m, StringJoin[ls, ds]}]]

Clear[Mnozenje1]
Mnozenje1[s_List] := Module[{i, d, k = {}},
d = Length[s];
k = {};
For[i = 1, i ≤ d, i++, k = Append[k, Length[s[[i]]]]];
k = Append[k, Length[Last[s][[1]]]];
Return[k]
]

Mnozenje1[s][[i]] * Mnozenje1[s][[i+1]].";

Clear[Mnozenje2]
Mnozenje2[s_List] := T[1, Length[s], Mnozenje1[s]]

Clear[Produkt]
Produkt[s_List] := Module[{i, m = {}},
m = s[[1]];
For[i = 2, i ≤ Length[s], i++, m = Dot[m, s[[i]]]];
Return[m]
]

Clear[Mnozenje3]
Mnozenje3[s_List] := Append[Mnozenje2[s], Produkt[s]]
```

## Primer

```Clear[T]
In[1]:= T[1, 7, {1, 10, 20, 7, 3, 4, 6, 2}]
Out[1]:= {409, ((((( [ 1 ]  * [ 2 ] ) * [ 3 ] ) * [ 4 ] ) * [ 5 ] ) * [ 6 ] ) * [ 7 ] }
```