Matrix Chain Multiplication & Optimization Problems
“Optimal parenthesization, Catalan number state space, O(n^3) table formulation, and DP on DAGs.”
1.The Matrix Chain Parenthesization Problem
§ 3.1.Matrix multiplication is associative: (A_1 A_2) A_3 = A_1 (A_2 A_3). However, the order of parenthesization dramatically impacts the number of scalar multiplications.
For a chain of n matrices where matrix A_i has dimension p_{i-1} times p_i:
Let m[i, j] be the minimum number of scalar multiplications needed to compute the product A_i .. A_j.
The Recurrence:
m[i, j] = 0 if i = j
m[i, j] = min_{i <= k < j} { m[i, k] + m[k+1, j] + p_{i-1} p_k p_j } if i < j.
Because computing m[i, j] requires values of smaller chain lengths, the table is filled diagonally by chain length l = 2, 3, ..., n.
Complexity: Theta(n^3) time and Theta(n^2) space.
2.DAG Shortest/Longest Paths & Held-Karp TSP
§ 3.2.Dynamic Programming on DAGs:
Because a Directed Acyclic Graph has no cycles, vertices can be linearized into a topological sort v_1, v_2, ..., v_n.
For longest path in a DAG:
dist[v] = max_{(u, v) in E} { dist[u] + w(u, v) }.
Evaluating in topological order ensures every subproblem dist[u] is finalized before computing dist[v]. Running time: O(V + E). Works with negative edge weights!
Held-Karp TSP Algorithm:
Brute force TSP checks (n - 1)! tours. Using DP:
Let C(S, j) be the minimum cost of visiting every vertex in subset S exactly once, starting at vertex 1 and ending at vertex j in S.
C(S, j) = min_{i in S setminus {j}} { C(S setminus {j}, i) + dist(i, j) }.
Time complexity: O(n^2 2^n), space O(n 2^n).
3. Worked Problem: 4-Matrix Optimal Parenthesization Table
Ensure dimensions array p corresponds to matrix A_i having size p_{i-1} x p_i.
Problem: Find minimum scalar multiplications to multiply 4 matrices with dimensions: A1 (10x20), A2 (20x30), A3 (30x40), A4 (40x30). Dimension vector p = [10, 20, 30, 40, 30].
Step 1: Compute chain lengths of 2 (l = 2):
M[1, 2] = 10 20 30 = 6,000 (split k = 1)
M[2, 3] = 20 30 40 = 24,000 (split k = 2)
M[3, 4] = 30 40 30 = 36,000 (split k = 3)
Step 2: Compute chain lengths of 3 (l = 3):
M[1, 3] = min(
k=1: M[1,1] + M[2,3] + 102040 = 0 + 24000 + 8000 = 32000,
k=2: M[1,2] + M[3,3] + 103040 = 6000 + 0 + 12000 = 18000
) = 18,000 (split k = 2)
M[2, 4] = min(
k=2: M[2,2] + M[3,4] + 203030 = 0 + 36000 + 18000 = 54000,
k=3: M[2,3] + M[4,4] + 204030 = 24000 + 0 + 24000 = 48000
) = 48,000 (split k = 3)
Step 3: Compute chain length 4 (M[1, 4]):
k=1: M[1,1] + M[2,4] + 102030 = 0 + 48000 + 6000 = 54,000
k=2: M[1,2] + M[3,4] + 103030 = 6000 + 36000 + 9000 = 51,000
k=3: M[1,3] + M[4,4] + 104030 = 18000 + 0 + 12000 = 30,000 (MINIMAL)
Step 4: Final Answer & Optimal Parenthesization:
Minimum scalar multiplications = 30,000.
Optimal parenthesization: ((A1 (A2 A3)) * A4).
Primary Academic References & Exam Sources
Every concept in Notes From a B.Tech Brain is synthesized from authoritative academic texts, seminal peer-reviewed research, verified exam archives, and renowned university lectures.
Curated for clarity, rigorous numerical solving, and semester excellence:
Best visual explanations of algorithm design and complexity analysis.
Exam-focused with GATE PYQ numericals on every major algorithm.