Advertisement
Guest User

Untitled

a guest
Sep 16th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. import sys
  2.  
  3. def MatrixChainOrder(p):
  4. n = len(p)-1
  5. m = [[0 for x in xrange(n+1)] for x in xrange(n+1)]
  6. s = [[0 for x in xrange(n-1+2)] for x in xrange(n+1)]
  7.  
  8. for i in range(1, n+1):
  9. m[i][i] = 0
  10. for l in range(2, n+1):
  11. for i in range(1, n - l + 1+1):
  12. j = i + l - 1
  13. m[i][j] = float("inf")
  14. for k in range(i, j - 1+1):
  15. q = m[i][k] + m[k+1][j]+(p[i-1]*p[k]*p[j])
  16. if q < m[i][j]:
  17. m[i][j] = q
  18. s[i][j] = k
  19. return s
  20.  
  21. def PrintOptimalParens(s, i, j):
  22. if i == j:
  23. sys.stdout.write("A")
  24. sys.stdout.write(str(i+1))
  25. else:
  26. sys.stdout.write("(")
  27. PrintOptimalParens(s, i, s[i][j])
  28. PrintOptimalParens(s,s[i][j]+1,j)
  29. sys.stdout.write(")")
  30.  
  31.  
  32. s = MatrixChainOrder([5, 10, 3, 12, 5, 50, 6])
  33. for j in range(0, 7):
  34. for i in range(0, 6):
  35. print i, " ", j, " ",s[i][j]
  36.  
  37. print len(s)
  38. print len(s[0])
  39.  
  40. PrintOptimalParens(s, 0, 6)
  41. print
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement