greedy knapsack
DESCRIPTION
TRANSCRIPT
Жадный алгоритм для «Рюкзака»с гарантированной точностью 2
Н.Н. Кузюрин С.А. Фомин
10 октября 2008 г.
1 / 10
Приближенный алгоритм с гарантированной точностью
Определение
Алгоритм называется C -приближенным, если при любых исходныхданных он находит допустимое решение со значением целевойфункции, отличающимся от оптимума не более чем в C раз.
2 / 10
Задача
«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
Тривиально-жадный алгоритм для «Рюкзака»
Отсортировать предметы в порядке убывания 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
Тривиально-жадный алгоритм для «Рюкзака»
Отсортировать предметы в порядке убывания 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
«Жадный-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
Точность «Жадного-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
Точность «Жадного-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
Точность «Жадного-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