dynamic programming vs greedy algo con t
play

Dynamic programming vs Greedy algo cont KNAPSACK KNAPSACK - PowerPoint PPT Presentation

Dynamic programming vs Greedy algo cont KNAPSACK KNAPSACK KNAPSACK KNAPSACK Input: a number W and a set of n items, the i-th item has a weight w i and a cost c i a subset of items with total weight W Output: Objective: maximize


  1. Dynamic programming vs Greedy algo – con’t KNAPSACK KNAPSACK KNAPSACK KNAPSACK Input: a number W and a set of n items, the i-th item has a weight w i and a cost c i a subset of items with total weight · W Output: Objective: maximize cost Version 1: Items are divisible .

  2. KNAPSACK – divisible: a greedy solution KNAPSACK-DIVISIBLE(n,c,w,W) 1. sort items in decreasing order of c i /w i 2. i = 1 3. currentW = 0 4. while (currentW + w i < W) { 5. take item of weight w i and cost c i 6. currentW += w i 7. i++ 8. } 9. take W-currentW portion of item i Correctness: Running time:

  3. KNAPSACK – indivisible Version 2: Items are indivisible. Does previous algorithm work for this version of KNAPSACK?

  4. KNAPSACK – indivisible: a dyn-prog solution The heart of the algorithm: S[k][v] =

  5. KNAPSACK – indivisible: a dyn-prog solution The heart of the algorithm: S[k][v] = maximum cost of a subset of the first k items, where the weight of the subset is at most v

  6. KNAPSACK – indivisible: a dyn-prog solution The heart of the algorithm: S[k][v] = maximum cost of a subset of the first k items, where the weight of the subset is at most v KNAPSACK-INDIVISIBLE(n,c,w,W) 1. init S[0][v]=0 for every v=0,…,W 2. init S[k][0]=0 for every k=0,…,n 3. for v=1 to W do 4. for k=1 to n do 5. S[k][v] = S[k-1][v] 6. if (w k · v) and (S[k-1][v-w k ]+c k > S[k][v]) then 7. S[k][v] = S[k-1][v-w k ]+c k 8. RETURN S[n][W]

  7. KNAPSACK – indivisible: a dyn-prog solution The heart of the algorithm: S[k][v] = maximum cost of a subset of the first k items, where the weight of the subset is at most v KNAPSACK-INDIVISIBLE(n,c,w,W) 1. init S[0][v]=0 for every v=0,…,W 2. init S[k][0]=0 for every k=0,…,n Running 3. for v=1 to W do time: 4. for k=1 to n do 5. S[k][v] = S[k-1][v] 6. if (w k · v) and (S[k-1][v-w k ]+c k > S[k][v]) then 7. S[k][v] = S[k-1][v-w k ]+c k 8. RETURN S[n][W]

  8. KNAPSACK – indivisible: a dyn-prog solution The heart of the algorithm: S[k][v] = maximum cost of a subset of the first k items, where the weight of the subset is at most v KNAPSACK-INDIVISIBLE(n,c,w,W) 1. init S[0][v]=0 for every v=0,…,W 2. init S[k][0]=0 for every k=0,…,n How to 3. for v=1 to W do output a 4. for k=1 to n do solution ? 5. S[k][v] = S[k-1][v] 6. if (w k · v) and (S[k-1][v-w k ]+c k > S[k][v]) then 7. S[k][v] = S[k-1][v-w k ]+c k 8. RETURN S[n][W]

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend