0% found this document useful (0 votes)
38 views

04 Dynamic Programming 4 Maxarith

The document describes how to use dynamic programming to find the optimal parenthesization of a mathematical expression that maximizes its value. It defines the subproblems of finding the minimum and maximum values of all subexpressions, presents the recurrence relations to solve these subproblems, and provides pseudocode of the resulting algorithm. It also explains how to reconstruct the optimal parenthesization by working backwards from the final solution.

Uploaded by

Abhimanyu singh
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views

04 Dynamic Programming 4 Maxarith

The document describes how to use dynamic programming to find the optimal parenthesization of a mathematical expression that maximizes its value. It defines the subproblems of finding the minimum and maximum values of all subexpressions, presents the recurrence relations to solve these subproblems, and provides pseudocode of the resulting algorithm. It also explains how to reconstruct the optimal parenthesization by working backwards from the final solution.

Uploaded by

Abhimanyu singh
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

Dynamic Programming:

Placing Parentheses

Alexander S. Kulikov
Steklov Institute of Mathematics at St. Petersburg
Russian Academy of Sciences

Algorithmic Design and Techniques


Algorithms and Data Structures
Outline

1 Problem Overview

2 Subproblems

3 Algorithm

4 Reconstructing a Solution
How to place parentheses in an expression

1+2−3×4−5

to maximize its value?


How to place parentheses in an expression

1+2−3×4−5

to maximize its value?


Example
((((1 + 2) − 3) × 4) − 5) = −5
How to place parentheses in an expression

1+2−3×4−5

to maximize its value?


Example
((((1 + 2) − 3) × 4) − 5) = −5
((1 + 2) − ((3 × 4) − 5)) = −4
Answer

((1 + 2) − (3 × (4 − 5))) = 6
Another example
What about

5 − 8 + 7 × 4 − 8 + 9?
Another example
What about

5 − 8 + 7 × 4 − 8 + 9?

Soon
We’ll design an efficient dynamic
programming algorithm to find the answer.
Outline

1 Problem Overview

2 Subproblems

3 Algorithm

4 Reconstructing a Solution
Placing parentheses
Input: A sequence of digits d1, . . . , dn and
a sequence of operations
op1, . . . , opn−1 ∈ {+, −, ×}.
Output: An order of applying these
operations that maximizes the
value of the expression

d1 op1 d2 op2 · · · opn−1 dn .


Intuition

Assume that the last operation in an


optimal parenthesizing of
5 − 8 + 7 × 4 − 8 + 9 is ×:

(5 − 8 + 7) × (4 − 8 + 9) .
Intuition

Assume that the last operation in an


optimal parenthesizing of
5 − 8 + 7 × 4 − 8 + 9 is ×:

(5 − 8 + 7) × (4 − 8 + 9) .

It would help to know optimal values for


subexpressions 5 − 8 + 7 and 4 − 8 + 9.
However
We need to keep track for both the minimal
and the maximal values of subexpressions!
Example: (5 − 8 + 7) × (4 − 8 + 9)

min(5 − 8 + 7) = (5 − (8 + 7)) = −10


max(5 − 8 + 7) = ((5 − 8) + 7) = 4
min(4 − 8 + 9) = (4 − (8 + 9)) = −13
max(4 − 8 + 9) = ((4 − 8) + 9) = 5
Example: (5 − 8 + 7) × (4 − 8 + 9)

min(5 − 8 + 7) = (5 − (8 + 7)) = −10


max(5 − 8 + 7) = ((5 − 8) + 7) = 4
min(4 − 8 + 9) = (4 − (8 + 9)) = −13
max(4 − 8 + 9) = ((4 − 8) + 9) = 5

max((5 − 8 + 7) × (4 − 8 + 9)) = 130


Subproblems
Let Ei,j be the subexpression

di opi · · · opj−1 dj
Subproblems
Let Ei,j be the subexpression

di opi · · · opj−1 dj

Subproblems:

M(i, j) = maximum value of Ei,j


m(i, j) = minimum value of Ei,j
Recurrence Relation


⎪M(i, k) opk M(k + 1, j)

⎨M(i, k) opk m(k + 1, j)
M(i, j) = max
i≤k≤j−1 ⎪
⎪m(i, k) opk M(k + 1, j)

m(i, k) opk m(k + 1, j)



⎪M(i, k) opk M(k + 1, j)

⎨M(i, k) opk m(k + 1, j)
m(i, j) = min
i≤k≤j−1 ⎪
⎪m(i, k) opk M(k + 1, j)

m(i, k) opk m(k + 1, j)

Outline

1 Problem Overview

2 Subproblems

3 Algorithm

4 Reconstructing a Solution
MinAndMax(i, j)
min ← +∞
max ← −∞
for k from i to j − 1:
a ← M(i, k) opk M(k + 1, j)
b ← M(i, k) opk m(k + 1, j)
c ← m(i, k) opk M(k + 1, j)
d ← m(i, k) opk m(k + 1, j)
min ← min(min, a, b, c, d )
max ← max(max, a, b, c, d )
return (min, max)
Order of Subproblems

When computing M(i, j), the values of


M(i, k) and M(k + 1, j) should be
already computed.
Solve all subproblems in order of
increasing (j − i).
Possible Order

1 n
1

n
Parentheses(d1 op1 d2 op2 . . . dn )
for i from 1 to n:
m(i, i) ← di , M(i, i) ← di
for s from 1 to n − 1:
for i from 1 to n − s:
j ←i +s
m(i, j), M(i, j) ← MinAndMax(i, j)
return M(1, n)
Example: 5 − 8 + 7 × 4 − 8 + 9
5 -3 -10 -55 -63 -94 5 -3 4 25 65 200
8 15 36 -60 -195 8 15 60 52 75
7 28 -28 -91 7 28 20 35
4 -4 -13 4 -4 5
8 17 8 17
9 9

m M
Outline

1 Problem Overview

2 Subproblems

3 Algorithm

4 Reconstructing a Solution
Example: 5 − 8 + 7 × 4 − 8 + 9
5 -3 -10 -55 -63 -94 5 -3 4 25 65 200
8 15 36 -60 -195 8 15 60 52 75
7 28 -28 -91 7 28 20 35
4 -4 -13 4 -4 5
8 17 8 17
9 9

m M

You might also like