10
Жадный алгоритм для «Рюкзака» с гарантированной точностью 2 Н.Н. Кузюрин С.А. Фомин 10 октября 2008 г. 1 / 10

Greedy Knapsack

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Greedy Knapsack

Жадный алгоритм для «Рюкзака»с гарантированной точностью 2

Н.Н. Кузюрин С.А. Фомин

10 октября 2008 г.

1 / 10

Page 2: Greedy Knapsack

Приближенный алгоритм с гарантированной точностью

Определение

Алгоритм называется C -приближенным, если при любых исходныхданных он находит допустимое решение со значением целевойфункции, отличающимся от оптимума не более чем в C раз.

2 / 10

Page 3: Greedy Knapsack

Задача

«0–1 Рюкзак (Knapsack)»Даны:c1, . . . , cn, cj ∈ N — «стоимости» предметов;a1, . . . , an, aj ∈ N — «размеры» или «веса»;

B ∈ N — «размер рюкзака».Найти максимальное значение f ∗ целевой функции

f ≡n∑

i=1

cixi → max

с ограничением на размер «рюкзака»:

n∑i=1

aixi ≤ B, xi ∈ {0, 1}.

3 / 10

Page 4: Greedy Knapsack

Тривиально-жадный алгоритм для «Рюкзака»

Отсортировать предметы в порядке убывания ciai

.A← 0for all i ∈ {1..n} do

if A + ai ≤ B thenA← A + ai

xi ← 1else

xi ← 0end if

end forreturn {x1, . . . , xn}

УпражнениеДокажите, что ∀k > 1, ∃{ci , ai}, B для которых алгоритм выберетнабор в k раз хуже оптимального.

4 / 10

Page 5: Greedy Knapsack

Тривиально-жадный алгоритм для «Рюкзака»

Отсортировать предметы в порядке убывания ciai

.A← 0for all i ∈ {1..n} do

if A + ai ≤ B thenA← A + ai

xi ← 1else

xi ← 0end if

end forreturn {x1, . . . , xn}

УпражнениеДокажите, что ∀k > 1, ∃{ci , ai}, B для которых алгоритм выберетнабор в k раз хуже оптимального.

5 / 10

Page 6: Greedy Knapsack

«Жадный-2» для «Рюкзака»

def KnapsackGreedy (T , B) :

T .sort (SortByConsumerAppeal)

Cmax← Cg← Ag← 0

for (c, a) ∈ T :

Cmax← max (c, Cmax)

if Ag + a ≤ B : # если лезет в рюкзак

Ag← Ag + a # Берем предмет (c, a)

Cg← Cg + c

return max (Cg, Cmax) # выбираем что больше

Вес рюкзака 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)]

Берем предмет: <= ($8 , 1 кг)

Берем предмет: <= ($5 , 2 кг)

Берем предмет: <= ($7 , 5 кг)

Cg=$20 или Cmax=$8 ?

Набран рюкзак стоимостью $20

Вес рюкзака B= 100 кг

Входной массив T <= [(10, 1), (150, 100), (50, 40), (40, 20)]

Отсортированный T => [(10, 1), (40, 20), (150, 100), (50, 40)]

Берем предмет: <= ($10 , 1 кг)

Берем предмет: <= ($40 , 20 кг)

Берем предмет: <= ($50 , 40 кг)

Cg=$100 или Cmax=$150 ?

Набран рюкзак стоимостью $150

6 / 10

Page 7: Greedy Knapsack

Точность «Жадного-2» не меньше 2

Sg

S̃g S̃g

Cg =∑i∈Sg

ci , C̃g =∑i∈S̃g

ci

Cg + cmax ≥ C̃g ≥ f ∗

2fG ≡ 2 max(Cg , cmax) ≥ Cg + cmax ≥ f ∗

7 / 10

Page 8: Greedy Knapsack

Точность «Жадного-2» не меньше 2

Sg

S̃g S̃g

Cg =∑i∈Sg

ci , C̃g =∑i∈S̃g

ci

Cg + cmax ≥ C̃g ≥ f ∗

2fG ≡ 2 max(Cg , cmax) ≥ Cg + cmax ≥ f ∗

8 / 10

Page 9: Greedy Knapsack

Точность «Жадного-2» не меньше 2

Sg

S̃g S̃g

Cg =∑i∈Sg

ci , C̃g =∑i∈S̃g

ci

Cg + cmax ≥ C̃g ≥ f ∗

2fG ≡ 2 max(Cg , cmax) ≥ Cg + cmax ≥ f ∗

9 / 10

Page 10: Greedy Knapsack

Интернет поддержка курса

http://discopal.ispras.ru/

Вопросы?

10 / 10