14
Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Embed Size (px)

Citation preview

Page 1: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Lecture 6: Dynamic Programming

    0/1 Knapsack    Making Change (any coin set)

Page 2: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

What is Dynamic Programming?

Dynamic programming is similar to divide-and-conquer in that the problem is broken down into smaller subproblems. In this approach we solve the small instances first, save the results, and look them up later when we needed, rather than recompute them.

Dynamic programming can sometimes provide an efficient solution to a problem for which divide-and-conquer produces an exponential run-time. Occasionally we find that we do not need to save all subproblem solutions. In these cases we can revise the algorithm greatly reducing the memory space requirements for the algorithm.

1. establish a recursive property that gives the solution to an instance of the problem

2. solve instances of the problem in a bottom-up fashion starting with the smaller instances first.

Page 3: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

(a+b)0 = 1

(a+b)1 = a+b

(a+b)2 = a2+2ab+b2

(a+b)3 = a3+3a2b+3ab2+b3

(a+b)4 = a4+4a3b+6a2b2+4ab3+b4

knk

n

k

n baknk

nba

0 !!

!

The binomial theorem gives a closed-form expression for the coefficient of any term in the expansion of a binomial raised to the nth power.

Binomial Theorem

Page 4: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

The binomial coefficient is also the number of combinations of n items taken k at a time, sometimes called n-choose-k.

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

nkork

nkfork

n

k

n

k

n

01

01

1

1

Counting Combinations & Pascal's Triangle

Page 5: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Binomial Coefficient D&C Version

function bin(n,k : integer) return integer isbegin if k=0 or k=n then return 1; else return bin(n-1,k-1) + bin(n-1,k); end if;end bin;

This version of bin requires that the subproblems are recalculated many times for each recursive call.

Page 6: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Binomial Coefficient Dynamic Programming

function bin2(n,k:integer) return integer s B : array(0..n,o..k) of integer;begin for i in 0..n loop for j in 0..minimum(i,k) loop if j=0 or j=i then B(i,j)=1; else B(i,j):=B(i-1,j-1) + B(i-1,j); end if; end loop; end loop; return B(n,k);end bin2;

In bin2 the smallest instances of the problem are solved first and then used to compute values for the larger subproblems. Compare the computational complexities of bin and bin2.

Page 7: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Floyd's Algorithm for Shortest Paths

V1

V2

V5

V4V3

1

5

1

1

2

6

1

3

2

1 2 3 4 51 0 2 - - -2 3 0 6 - -3 - - 0 - 14 2 - 1 0 15 1 - - - 0

procedure floyd(W,D:matype) isbegin D:=W; for k in 1..n loop for i in 1..n loop for j in 1..n loop D(i,j):=min(D(i,j),D(i,k)+D(k,j)); end loop; end loop; end loop;end floyd;

Floyd's algorithm is very simple to implement. The fact that it works at all is not obvious. Be sure to work through the proof of algorithm correctness in the text.

Page 8: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Dynamic Programming - The Coin Changing Problem

Northeastern University - Javed A. Aslam - CSG713 Advanced Algorithms

Page 9: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Defining the Recurrence Relation

Northeastern University - Javed A. Aslam - CSG713 Advanced Algorithms

Page 10: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Implementing the Bottom-Up Algorithm

Northeastern University - Javed A. Aslam - CSG713 Advanced Algorithms

Page 11: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Generating an Optimal Solution

Northeastern University - Javed A. Aslam - CSG713 Advanced Algorithms

Page 12: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Algorithm/Program Analysis

Northeastern University - Javed A. Aslam - CSG713 Advanced Algorithms

Page 13: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)

Summary

Dynamic Programming solves problems that can be expressed as recurrence relations

Rather than recursive programming (e.g. D&C) DynPro solves these problem in a bottom-up fashion

It is good practice to compare complexity for D&C vs DynPro

DynPro works when sub-problems are solved by sub-solutions. That is, optimal partial solutions are parts of the optimal solution.

Page 14: Lecture 6: Dynamic Programming 0/1 Knapsack Making Change (any coin set)