Greedy Knapsack
Upcoming SlideShare
Loading in...5
×
 

Greedy Knapsack

on

  • 554 views

 

Statistics

Views

Total Views
554
Views on SlideShare
554
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Greedy Knapsack Greedy Knapsack Presentation Transcript

  • Жадный алгоритм для «Рюкзака» с гарантированной точностью 2 Н.Н. Кузюрин С.А. Фомин 10 октября 2008 г. 1 / 10
  • Приближенный алгоритм с гарантированной точностью Определение Алгоритм называется C -приближенным, если при любых исходных данных он находит допустимое решение со значением целевой функции, отличающимся от оптимума не более чем в C раз. 2 / 10
  • Задача «0–1 Рюкзак (Knapsack)» Даны: c1 , . . . , cn , cj ∈ N — «стоимости» предметов; a1 , . . . , an , aj ∈ N — «размеры» или «веса»; B ∈ N — «размер рюкзака». Найти максимальное значение f ∗ целевой функции n f ≡ ci xi → max i=1 с ограничением на размер «рюкзака»: n ai xi ≤ B, xi ∈ {0, 1}. i=1 3 / 10
  • Тривиально-жадный алгоритм для «Рюкзака» ci Отсортировать предметы в порядке убывания ai . A←0 for all i ∈ {1..n} do if A + ai ≤ B then A ← A + ai xi ← 1 else xi ← 0 end if end for return {x1 , . . . , xn } Упражнение Докажите, что ∀k > 1, ∃{ci , ai }, B для которых алгоритм выберет набор в k раз хуже оптимального. 4 / 10
  • Тривиально-жадный алгоритм для «Рюкзака» ci Отсортировать предметы в порядке убывания ai . A←0 for all i ∈ {1..n} do if A + ai ≤ B then A ← A + ai xi ← 1 else xi ← 0 end if end for return {x1 , . . . , xn } Упражнение Докажите, что ∀k > 1, ∃{ci , ai }, B для которых алгоритм выберет набор в k раз хуже оптимального. 5 / 10
  • «Жадный-2» для «Рюкзака» Вес рюкзака B= 10 кг Входной массив T <= [(3, 6), (4, 3), (5, 2), (6, 5), (7, 5), (8, 1)] Отсортированный T => [(8, 1), (5, 2), (7, 5), (4, 3), (6, 5), (3, 6)] def KnapsackGreedy (T , B) : Берем предмет: <= ($8 , 1 кг) T .sort (SortByConsumerAppeal) Берем предмет: <= ($5 , 2 кг) Cmax ← Cg ← Ag ← 0 Берем предмет: <= ($7 , 5 кг) for (c, a) ∈ T : Cg=$20 или Cmax=$8 ? Набран рюкзак стоимостью $20 Cmax ← max (c, Cmax) if Ag + a ≤ B : # если лезет в рюкзак Вес рюкзака B= 100 кг Ag ← Ag + a # Берем предмет (c, a) Входной массив T <= [(10, 1), (150, 100), (50, 40), (40, 20)] Cg ← Cg + c Отсортированный T => [(10, 1), (40, 20), (150, 100), (50, 40)] Берем предмет: <= ($10 , 1 кг) return max (Cg, Cmax) # выбираем что больше Берем предмет: <= ($40 , 20 кг) Берем предмет: <= ($50 , 40 кг) Cg=$100 или Cmax=$150 ? Набран рюкзак стоимостью $150 6 / 10
  • Точность «Жадного-2» не меньше 2 Sg ˜ Sg ˜ Sg Cg = ci , ˜ Cg = ci i∈Sg ˜ i∈Sg ˜ Cg + cmax ≥ Cg ≥ f∗ 2fG ≡ 2 max(Cg , cmax ) ≥ Cg + cmax ≥ f∗ 7 / 10
  • Точность «Жадного-2» не меньше 2 Sg ˜ Sg ˜ Sg Cg = ci , ˜ Cg = ci i∈Sg ˜ i∈Sg ˜ Cg + cmax ≥ Cg ≥ f∗ 2fG ≡ 2 max(Cg , cmax ) ≥ Cg + cmax ≥ f∗ 8 / 10
  • Точность «Жадного-2» не меньше 2 Sg ˜ Sg ˜ Sg Cg = ci , ˜ Cg = ci i∈Sg ˜ i∈Sg ˜ Cg + cmax ≥ Cg ≥ f∗ 2fG ≡ 2 max(Cg , cmax ) ≥ Cg + cmax ≥ f∗ 9 / 10
  • Интернет поддержка курса http://discopal.ispras.ru/ Вопросы? 10 / 10