|
@ -0,0 +1,55 @@ |
|
|
|
|
|
import math |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
|
Jeffery Russell |
|
|
|
|
|
11-12-18 |
|
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def minMul(S): |
|
|
|
|
|
""" |
|
|
|
|
|
Simple function to print the matrixes used in |
|
|
|
|
|
the minimum matrix chain multiplication problem |
|
|
|
|
|
using dynamic programming. |
|
|
|
|
|
""" |
|
|
|
|
|
n = len(S) |
|
|
|
|
|
m = [[math.inf for i in range(n)] for j in range(n)] |
|
|
|
|
|
c = [[0 for i in range(n)] for j in range(n)] |
|
|
|
|
|
|
|
|
|
|
|
for i in range(0, n): |
|
|
|
|
|
m[i][i] = 0 |
|
|
|
|
|
|
|
|
|
|
|
for l in range(1, n + 1): |
|
|
|
|
|
for i in range(0, n-l + 1): |
|
|
|
|
|
j = l + i -1 |
|
|
|
|
|
for k in range(i, j): |
|
|
|
|
|
temp = m[i][k] + m[k + 1][j] + S[i][0] * S[k][1] * S[j][1] |
|
|
|
|
|
print(temp) |
|
|
|
|
|
if temp < m[i][j]: |
|
|
|
|
|
m[i][j] = temp |
|
|
|
|
|
c[i][j] = k + 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i in range(0, n): |
|
|
|
|
|
for y in range(0, n): |
|
|
|
|
|
print(str(m[i][y]) + " ", end =" ") |
|
|
|
|
|
print() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print() |
|
|
|
|
|
print() |
|
|
|
|
|
for i in range(0, n): |
|
|
|
|
|
for y in range(0, n): |
|
|
|
|
|
print(str(c[i][y]) + " ", end =" ") |
|
|
|
|
|
print() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
|
Makes sure that other programs don't execute the main |
|
|
|
|
|
""" |
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
try: |
|
|
|
|
|
minMul([(10,100),(100, 5),(5, 50)]) |
|
|
|
|
|
#minMul([(5,10),(10,3),(3,12), (12,5), (5,50), (50,6)]) |
|
|
|
|
|
except KeyboardInterrupt: |
|
|
|
|
|
exit() |