import math """ Jeffery Russell 11-12-18 """ def generateMinOrdering(C, i, j): if i == j: return str(i) return "(" + generateMinOrdering(C, i, C[i -1][j -1]) + generateMinOrdering(C, C[i -1][ j -1] +1, j) + ")" 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() print(generateMinOrdering(c, 1, len(S))) """ 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)]) #minMul([(30,35),(35,15),(15,5), (5,10), (10,20), (20,25)]) except KeyboardInterrupt: exit()