forked from VAR-solutions/Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMatrixChainSequence
More file actions
38 lines (34 loc) · 882 Bytes
/
MatrixChainSequence
File metadata and controls
38 lines (34 loc) · 882 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import math
import numpy as np
n = int(input('Enter the number of matrices to be multiplied: '))
d = []
for _ in range(n):
d.append(int(input('Enter dimension to be used: ')))
m = [[math.inf for x in range(n+1)] for y in range(n+1)]
s = [[0 for x in range(n+1)] for y in range(n+1)]
def MatrixChain(p):
n = len(p)
for i in range(1, n+1):
m[i][i] = 0
for i in range(n+1):
for j in range(n+1):
if i == 0 or j == 0:
m[i][j] = 0
#l is for determining number of matrices to be multiplied each time
for l in range(2, n+1):
for i in range(1, n-l+1):
j = i + l - 1
m[i][j] = math.inf
for k in range(i, j-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
def PrintPar(s, i, j):
if i == j:
print ('Ai ')
else:
print ('( ')
PrintPar(s, i, s[i, j])
PrintPar(s, s[i, j]+1, j)
print (' )')