KEMBAR78
Lecture 5 | PDF | Dynamic Programming | Computational Science
0% found this document useful (0 votes)
15 views25 pages

Lecture 5

jdygwtqkmelkefjrf4trurhfjfdnfn efte6truiryoie efjeyefequdhje fjhdioduwqdplksfnd fewjheur40uiropekporjtnren g

Uploaded by

kanozelsayed19
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views25 pages

Lecture 5

jdygwtqkmelkefjrf4trurhfjfdnfn efte6truiryoie efjeyefequdhje fjhdioduwqdplksfnd fewjheur40uiropekporjtnren g

Uploaded by

kanozelsayed19
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Analysis & Design

of Algorithms
Agenda
• Ch3: Dynamic Programming

o Fibonacci Sequence
o Rod Cutting

2
Dynamic
Programming

• Dynamic programming is typically applied to


optimization problems. In such problem there can
be many solutions. Each solution has a value, and
we wish to find a solution with the optimal value.

3
Dynamic
Programming
• Dynamic programming
( like the divide-and-conquer method )solves
problems by combining the solutions to sub
problems.

• A dynamic-programming algorithm solves each


subsub problem just once and then saves its answer
in a table, thereby avoiding the work of
recomputing the answer every time it solves each
subsub problem.

4
Dynamic
Programming

5
Dynamic
Programming
• When developing a dynamic-programming
algorithm,
we follow a sequence of four steps:
1. Characterize the structure of an optimal solution.
2. Recursively defines the value of an optimal solution.
3. Compute the value of an optimal solution, typically
in a bottom-up fashion.
4. Construct an optimal solution from computed
information.

6
Fibonacci Sequence
• 0, 1, 1, 2, 3, 5, 8, 13, 21, …
• fib(1) = 1. f(7)
• fib(2) = 1. f(6) f(5)
• fib(N) = f(N-1) + f(N-2)
if N > 2. f(5) f(4) f(4) f(3)

fib(int n) { f(4) f(3)f(3) f(2)f(3) f(2) f(2) f(1)


if n == 1 or n ==2
return 1 … … … 1 f(2) f(1) 1 1 1
else
return fib(n-1) + fib(n-2)
} f(n) takes exponential time
to compute. [O(2n)].

7
Fibonacci Tree Traversal
Fib(6)

Fib(5) Fib(4)

Fib(4) Fib(3)

Fib(3) Fib(2)

Fib(2) Fib(1)

Fib(1)
Memoization
Memoizationis one way to deal with overlapping
subproblems (Top-Down)
After computing the solution to a subproblem, store in a
table
Subsequent calls just do a table lookup

Can modify recursive algorithm, to use memoziation:


Lets do this for the Fibonacci sequence
Fib(n) = Fib( n-1) + Fib( n-2)
Fib(2) = Fib(1) = 1
Fibonacci Sequence
arr[max]
Fib(int n)
{
if n == 1 or n ==2
return 1
if arr[n] is null
arr[n] = fib(n-1) + fib(n-2);
return arr[n];
}
Complexity: O(n)
Rod Cutting
• Maximal subarray is a relatively simple DP program
o At any step, finding the optimal solution requires an optimal solution to
only one subproblem.

• A more interesting problem is Rod Cutting


o Finding an optimal solution requires solutions to multiple subproblems.

• Problem: Find best way to cut a rod of length n


o Given: rod of length n
o Assume that each length rod has a price pi
o Find best set of cuts to get maximum price
• Each cut is integer length
• Can use any number of cuts, from 0 to n−1
• No cost for a cut
• Reward for No Cut = 0

11
Rod Cutting

n =4
12
Rod Cutting
• The 8 possible ways of cutting up a rod of length 4.

• Above each piece is the value of that piece,


according to the sample price chart.

• The optimal strategy is part (c) cutting the rod into


two pieces of length 2 which has total value10.

13
Recursive top-down solution

rn = max ( pi + rn-i ) , for all 1 ≤ i ≤ n

14
Recursive top-down solution
rn = max ( pi + rn-i ) , for all 1 ≤ i ≤ n

r4 = max ( p1+r3 , p2+r2 , p3+r1 , p4+r0 )


r3 = max ( p1+r2 , p2+r1 , p3+r0 )
r2 = max ( p1+r1 , p2+r0 )
r1 = max ( p1+r0 )

15
Recursive top-down solution

r4 = max ( p1+r3 , p2+r2 , p3+r1 , p4+r0 )


r3 = max ( p1+r2 , p2+r1 , p3+r0 )
r2 = max ( p1+r1 , p2+r0 )
r1 = max ( p1+r0 ) = max( 1 + 0 ) = 1

16
Recursive top-down solution

r4 = max ( p1+r3 , p2+r2 , p3+r1 , p4+r0 )


r3 = max ( p1+r2 , p2+r1 , p3+r0 )
r2 = max ( p1+r1 , p2+r0 ) = max (1+1 , 5+0) = 5
r1 = max ( p1+r0 ) = max( 1 + 0 ) = 1

17
Recursive top-down solution

r4 = max ( p1+r3 , p2+r2 , p3+r1 , p4+r0 )


r3 = max ( p1+r2 , p2+r1 , p3+r0 )
= max ( 1+5 , 5+1 , 8+0 ) = 8
r2 = max ( p1+r1 , p2+r0 ) = max (1+1 , 5+0) = 5
r1 = max ( p1+r0 ) = max( 1 + 0 ) = 1

18
Recursive top-down solution

r4 = max ( p1+r3 , p2+r2 , p3+r1 , p4+r0 )


= max (1+8 , 5+5 , 8+1 , 9+0 ) =10
r3 = max ( p1+r2 , p2+r1 , p3+r0 )
= max ( 1+5 , 5+1 , 8+0 ) = 8
r2 = max ( p1+r1 , p2+r0 ) = max (1+1 , 5+0) = 5
r1 = max ( p1+r0 ) = max( 1 + 0 ) = 1

19
Recursive top-down solution
rn = max ( pi + rn-i ) , for all 1 ≤ i ≤ n
r4 = max ( p1+r3 , p2+r2 , p3+r1 , p4+r0 )
= max (1+8 , 5+5 , 8+1 , 9+0 ) = 10
r3 = max ( p1+r2 , p2+r1 , p3+r0 )
= max ( 1+5 , 5+1 , 8+0 ) = 8
r2 = max ( p1+r1 , p2+r0 ) = max (1+1 , 5+0) = 5
r1 = max ( p1+r0 ) = max( 1+0 ) = 1

20
Recursive top-down solution

Time Complexity: O(n2)


21
Recursive top-down solution
static int cutRod(int price[], int n)
{
if (n <= 0)
return 0;
int max_val = Integer.MIN_VALUE;
for (int i = 0; i < n; i++)
max_val = Math.max(max_val, price[i] + cutRod(price, n - i - 1));
return max_val;
}

22
Rod Cutting

• for i = 1,2, … ,10, by inspection, with the corresponding optimal


decompositions
• r1 = 1 from solution 1 = 1 (no cuts) ;
• r2 = 5 from solution 2 = 2 (no cuts) ;
• r3 = 8 from solution 3 = 3 (no cuts) ;
• r4 = 10 from solution 4 = 2 + 2 ;
• r5 = 13 from solution 5 = 2 + 3 ;
• r6 = 17 from solution 6 = 6 (no cuts) ;
• r7 = 18 from solution 7 = 1 + 6 or 7 = 2 + 2 + 3 ;
• r8 = 22 from solution 8 = 2 + 6 ;
23
Rod Cutting

24
Questions & Answers

You might also like