Skip to content

Commit 4b21c7c

Browse files
Merge pull request #30 from Dhruvsolanki345/main
Create Matrix Chain_Multiplication.java
2 parents 5d55201 + 2bcf17c commit 4b21c7c

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

Java/Matrix Chain_Multiplication.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// Memoization
2+
public class Solution {
3+
public static int matrixMultiplication(int[] arr , int N) {
4+
if(N < 3) return 0;
5+
6+
int[][] dp = new int[N][N];
7+
for(int i = 0; i < N; i++)
8+
for(int j = 0; j < N; j++)
9+
dp[i][j] = -1;
10+
11+
return partition(1, N-1, arr, dp);
12+
}
13+
14+
private static int partition(int i, int j, int[] arr, int[][] dp) {
15+
if(i == j) return 0;
16+
17+
if(dp[i][j] != -1) return dp[i][j];
18+
19+
int min = Integer.MAX_VALUE;
20+
21+
for(int k = i; k < j; k++) {
22+
int curr = (arr[i-1] * arr[k] * arr[j]) +
23+
partition(i, k, arr, dp) + partition(k+1, j, arr, dp);
24+
min = Math.min(min, curr);
25+
}
26+
27+
return dp[i][j] = min;
28+
}
29+
}
30+
31+
// Tabulation
32+
public class Solution {
33+
public static int matrixMultiplication(int[] arr , int N) {
34+
if(N < 3) return 0;
35+
36+
int[][] dp = new int[N][N];
37+
38+
for(int i = N-1; i > 0; i--) {
39+
for(int j = i+1; j < N; j++) {
40+
if(i == j) continue;
41+
42+
int min = (int) 1e9;
43+
for(int k = i; k < j; k++) {
44+
min = Math.min(min, (arr[i-1] * arr[k] * arr[j]) +
45+
dp[i][k] + dp[k+1][j]);
46+
}
47+
48+
dp[i][j] = min;
49+
}
50+
}
51+
52+
return dp[1][N-1];
53+
}
54+
}

0 commit comments

Comments
 (0)