Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- def MatrixChainOrder(p):
- n = len(p)-1
- m = [[0 for x in xrange(n+1)] for x in xrange(n+1)]
- s = [[0 for x in xrange(n-1+2)] for x in xrange(n+1)]
- for i in range(1, n+1):
- m[i][i] = 0
- for l in range(2, n+1):
- for i in range(1, n - l + 1+1):
- j = i + l - 1
- m[i][j] = float("inf")
- for k in range(i, j - 1+1):
- q = m[i][k] + m[k+1][j]+(p[i-1]*p[k]*p[j])
- if q < m[i][j]:
- m[i][j] = q
- s[i][j] = k
- return s
- def PrintOptimalParens(s, i, j):
- if i == j:
- sys.stdout.write("A")
- sys.stdout.write(str(i+1))
- else:
- sys.stdout.write("(")
- PrintOptimalParens(s, i, s[i][j])
- PrintOptimalParens(s,s[i][j]+1,j)
- sys.stdout.write(")")
- s = MatrixChainOrder([5, 10, 3, 12, 5, 50, 6])
- for j in range(0, 7):
- for i in range(0, 6):
- print i, " ", j, " ",s[i][j]
- print len(s)
- print len(s[0])
- PrintOptimalParens(s, 0, 6)
- print
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement