Repository where I mostly put random python scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.5 KiB

  1. import math
  2. """
  3. Jeffery Russell
  4. 11-12-18
  5. """
  6. def generateMinOrdering(C, i, j):
  7. if i == j:
  8. return str(i)
  9. return "(" + generateMinOrdering(C, i, C[i -1][j -1]) + generateMinOrdering(C, C[i -1][ j -1] +1, j) + ")"
  10. def minMul(S):
  11. """
  12. Simple function to print the matrixes used in
  13. the minimum matrix chain multiplication problem
  14. using dynamic programming.
  15. """
  16. n = len(S)
  17. m = [[math.inf for i in range(n)] for j in range(n)]
  18. c = [[0 for i in range(n)] for j in range(n)]
  19. for i in range(0, n):
  20. m[i][i] = 0
  21. for l in range(1, n + 1):
  22. for i in range(0, n-l + 1):
  23. j = l + i -1
  24. for k in range(i, j):
  25. temp = m[i][k] + m[k + 1][j] + S[i][0] * S[k][1] * S[j][1]
  26. print(temp)
  27. if temp < m[i][j]:
  28. m[i][j] = temp
  29. c[i][j] = k + 1
  30. for i in range(0, n):
  31. for y in range(0, n):
  32. print(str(m[i][y]) + " ", end =" ")
  33. print()
  34. print()
  35. print()
  36. for i in range(0, n):
  37. for y in range(0, n):
  38. print(str(c[i][y]) + " ", end =" ")
  39. print()
  40. print(generateMinOrdering(c, 1, len(S)))
  41. """
  42. Makes sure that other programs don't execute the main
  43. """
  44. if __name__ == '__main__':
  45. try:
  46. #minMul([(10,100),(100, 5),(5, 50)])
  47. minMul([(5,10),(10,3),(3,12), (12,5), (5,50), (50,6)])
  48. #minMul([(30,35),(35,15),(15,5), (5,10), (10,20), (20,25)])
  49. except KeyboardInterrupt:
  50. exit()