1. Жадные алгоритмы в задачах о покрытии
Н.Н. Кузюрин С.А. Фомин
10 октября 2008 г.
1 / 31
2. Приближенный алгоритм с гарантированной точностью
Определение
Алгоритм называется C -приближенным, если при любых исходных
данных он находит допустимое решение со значением целевой
функции, отличающимся от оптимума не более чем в C раз.
2 / 31
3. Покрытие множества
Задача
«Покрытие множества»a .
Множество X , |X | = m.
Семейство подмножеств {S1 , . . . , Sn }, Sj ⊆ X .
X = ∪n Sj (покрытие гарантировано).
j=1
Найти минимальное по мощности множество подмножеств,
покрывающее X :
|J| → min,
J ⊆ {1, 2, . . . , n},
X = ∪j∈J Sj .
a
Set cover, в англоязычной литературе.
3 / 31
4. Жадный алгоритм в задаче о покрытии
Выбор на каждом
шаге подмножества,
покрывающего
максимальное число
еще непокрытых
элементов:
4 / 31
5. Покрытие на каждом шаге
Лемма
Xk — число непокрытых элементов после k-го шага.
M — размер минимального покрытия.
Xk
Xk+1 ≤ Xk − = Xk (1 − 1/M). (1)
M
Доказательство.
1 Пусть X непокрытых покрываются минимум M подмножествами.
X
2 Алгоритм за шаг покроет не меньше M .
X
3 Иначе, оптимальное покрытие должно покрывать меньше M · M
элементов.
4 Т.к M ≤ M, получаем доказательство (1).
5 / 31
6. Покрытие на каждом шаге
Лемма
Xk — число непокрытых элементов после k-го шага.
M — размер минимального покрытия.
Xk
Xk+1 ≤ Xk − = Xk (1 − 1/M). (1)
M
Доказательство.
1 Пусть X непокрытых покрываются минимум M подмножествами.
X
2 Алгоритм за шаг покроет не меньше M .
X
3 Иначе, оптимальное покрытие должно покрывать меньше M · M
элементов.
4 Т.к M ≤ M, получаем доказательство (1).
6 / 31
7. Покрытие на каждом шаге
Лемма
Xk — число непокрытых элементов после k-го шага.
M — размер минимального покрытия.
Xk
Xk+1 ≤ Xk − = Xk (1 − 1/M). (1)
M
Доказательство.
1 Пусть X непокрытых покрываются минимум M подмножествами.
X
2 Алгоритм за шаг покроет не меньше M .
X
3 Иначе, оптимальное покрытие должно покрывать меньше M · M
элементов.
4 Т.к M ≤ M, получаем доказательство (1).
7 / 31
8. Покрытие на каждом шаге
Лемма
Xk — число непокрытых элементов после k-го шага.
M — размер минимального покрытия.
Xk
Xk+1 ≤ Xk − = Xk (1 − 1/M). (1)
M
Доказательство.
1 Пусть X непокрытых покрываются минимум M подмножествами.
X
2 Алгоритм за шаг покроет не меньше M .
X
3 Иначе, оптимальное покрытие должно покрывать меньше M · M
элементов.
4 Т.к M ≤ M, получаем доказательство (1).
8 / 31
9. Покрытие на каждом шаге
Лемма
Xk — число непокрытых элементов после k-го шага.
M — размер минимального покрытия.
Xk
Xk+1 ≤ Xk − = Xk (1 − 1/M). (1)
M
Доказательство.
1 Пусть X непокрытых покрываются минимум M подмножествами.
X
2 Алгоритм за шаг покроет не меньше M .
X
3 Иначе, оптимальное покрытие должно покрывать меньше M · M
элементов.
4 Т.к M ≤ M, получаем доказательство (1).
9 / 31
10. Точность жадного алгоритма: верхняя оценка
Теорема
Размер покрытия, построенного жадным алгоритмом, превосходит
минимальное не более чем в 1 + ln m раз.
Доказательство.
Xi — число непокрытых элементов после i-го шага.
M — оптимум.
k
1 Xk ≤ m(1 − 1/M)k ≤ m exp(− M )
k0
2 Пусть k0 - последний шаг, когда m exp(− M ) ≥ 1.
3 Тогда при k1 = k0 + 1 будет Xk1 < 1.
4 k1 /M ≤ 1 + ln m
10 / 31
11. Точность жадного алгоритма: верхняя оценка
Теорема
Размер покрытия, построенного жадным алгоритмом, превосходит
минимальное не более чем в 1 + ln m раз.
Доказательство.
Xi — число непокрытых элементов после i-го шага.
M — оптимум.
k
1 Xk ≤ m(1 − 1/M)k ≤ m exp(− M )
k0
2 Пусть k0 - последний шаг, когда m exp(− M ) ≥ 1.
3 Тогда при k1 = k0 + 1 будет Xk1 < 1.
4 k1 /M ≤ 1 + ln m
11 / 31
12. Точность жадного алгоритма: верхняя оценка
Теорема
Размер покрытия, построенного жадным алгоритмом, превосходит
минимальное не более чем в 1 + ln m раз.
Доказательство.
Xi — число непокрытых элементов после i-го шага.
M — оптимум.
k
1 Xk ≤ m(1 − 1/M)k ≤ m exp(− M )
k0
2 Пусть k0 - последний шаг, когда m exp(− M ) ≥ 1.
3 Тогда при k1 = k0 + 1 будет Xk1 < 1.
4 k1 /M ≤ 1 + ln m
12 / 31
13. Точность жадного алгоритма: верхняя оценка
Теорема
Размер покрытия, построенного жадным алгоритмом, превосходит
минимальное не более чем в 1 + ln m раз.
Доказательство.
Xi — число непокрытых элементов после i-го шага.
M — оптимум.
k
1 Xk ≤ m(1 − 1/M)k ≤ m exp(− M )
k0
2 Пусть k0 - последний шаг, когда m exp(− M ) ≥ 1.
3 Тогда при k1 = k0 + 1 будет Xk1 < 1.
4 k1 /M ≤ 1 + ln m
13 / 31
14. Точность жадного алгоритма: верхняя оценка
Теорема
Размер покрытия, построенного жадным алгоритмом, превосходит
минимальное не более чем в 1 + ln m раз.
Доказательство.
Xi — число непокрытых элементов после i-го шага.
M — оптимум.
k
1 Xk ≤ m(1 − 1/M)k ≤ m exp(− M )
k0
2 Пусть k0 - последний шаг, когда m exp(− M ) ≥ 1.
3 Тогда при k1 = k0 + 1 будет Xk1 < 1.
4 k1 /M ≤ 1 + ln m
14 / 31
15. Точность жадного алгоритма: верхняя оценка
Теорема
Размер покрытия, построенного жадным алгоритмом, превосходит
минимальное не более чем в 1 + ln m раз.
Доказательство.
Xi — число непокрытых элементов после i-го шага.
M — оптимум.
k
1 Xk ≤ m(1 − 1/M)k ≤ m exp(− M )
k0
2 Пусть k0 - последний шаг, когда m exp(− M ) ≥ 1.
3 Тогда при k1 = k0 + 1 будет Xk1 < 1.
4 k1 /M ≤ 1 + ln m
15 / 31
17. k-покрытие множества
Задача
«K-покрытие»
Задано:
Множество X , |X | = m.
Семейство подмножеств {S1 , . . . , Sn }, Sj ⊆ X .
Выбрать такие k подмножеств, чтобы мощность их объединения была
максимальна:
| ∪j∈J Sj | → max,
J ⊆ {1, 2, . . . , n},
|J| = k.
17 / 31
18. Жадный — (1 − e −1 )-приближенный для «k-покрытия»
Доказательство.
Xi — число покрытых элементов после i-го шага.
M — оптимум.
M − Xi M 1
Xi+1 ≥ Xi + = + Xi 1− .
k k k
2 k
M 1 1 1
Xk ≥ 1+ 1− + 1− + ... + 1 −
k k k k
1 k+1 k+1
M 1− 1− k 1
= 1
=M 1− 1−
k k
k
k +1
≥ M 1 − exp − ≥ M(1 − e −1 ).
k
18 / 31
19. Жадный — (1 − e −1 )-приближенный для «k-покрытия»
Доказательство.
Xi — число покрытых элементов после i-го шага.
M — оптимум.
M − Xi M 1
Xi+1 ≥ Xi + = + Xi 1− .
k k k
2 k
M 1 1 1
Xk ≥ 1+ 1− + 1− + ... + 1 −
k k k k
1 k+1 k+1
M 1− 1− k 1
= 1
=M 1− 1−
k k
k
k +1
≥ M 1 − exp − ≥ M(1 − e −1 ).
k
19 / 31
20. Жадный — (1 − e −1 )-приближенный для «k-покрытия»
Доказательство.
Xi — число покрытых элементов после i-го шага.
M — оптимум.
M − Xi M 1
Xi+1 ≥ Xi + = + Xi 1− .
k k k
2 k
M 1 1 1
Xk ≥ 1+ 1− + 1− + ... + 1 −
k k k k
1 k+1 k+1
M 1− 1− k 1
= 1
=M 1− 1−
k k
k
k +1
≥ M 1 − exp − ≥ M(1 − e −1 ).
k
20 / 31
21. Вершинное покрытие
Определение
«Вершинное покрытие»a .
Для неориентированного графа G = (V , E ) подмножество вершин
V ⊆ V называется вершинным покрытием, если каждое ребро из E
содержит хотя бы одну вершину из V .
a
В англоязычной литературе — Vertex Cover.
Задача
«Минимальное вершинное покрытие».
Дан неориентированный граф G = (V , E ) (множество вершин V ,
множество ребер E ). Найти вершинное покрытие минимальной
мощности.
21 / 31
22. Вершинное покрытие
Определение
«Вершинное покрытие»a .
Для неориентированного графа G = (V , E ) подмножество вершин
V ⊆ V называется вершинным покрытием, если каждое ребро из E
содержит хотя бы одну вершину из V .
a
В англоязычной литературе — Vertex Cover.
Задача
«Минимальное вершинное покрытие».
Дан неориентированный граф G = (V , E ) (множество вершин V ,
множество ребер E ). Найти вершинное покрытие минимальной
мощности.
22 / 31
23. «Ленивый» алгоритм для вершинного покрытия
Вершинное
покрытие — зеленое.
C ←∅
while ∃e = (u, v ) : непокрытое ребро do
C ← C ∪ {u, v }
Пометить «покрытими» все ребра
инцидентные u и v .
end while
return C
23 / 31
24. Определение
Паросочетаниеa — подмножество ребер графа, такое, что никакие
два ребра из этого подмножества не инцидентны какой-либо одной
вершине.
a
Matching в англоязычной литературе.
Определение
Совершенное паросочетаниеa — паросочетание, покрывающее все
вершины графа.
a
Perfect matching в англоязычной литературе.
24 / 31
25. Определение
Паросочетаниеa — подмножество ребер графа, такое, что никакие
два ребра из этого подмножества не инцидентны какой-либо одной
вершине.
a
Matching в англоязычной литературе.
Определение
Совершенное паросочетаниеa — паросочетание, покрывающее все
вершины графа.
a
Perfect matching в англоязычной литературе.
25 / 31
26. Теорема
Алгоритм гарантирует точность 2 для задачи «Min Vertex Covering».
Доказательство.
1 E ∗ — ребра, «попавшиеся алгоритму».
2 E ∗ — совершенное паросочетание.
3 |E ∗ | = |C |/2
4 OPT ≥ |E ∗ |: ∀ вершинное покрытие должно содержать по
крайней мере одну вершину для каждого ребра из E ∗ .
Получаем:
|C | ≤ 2 · OPT .
26 / 31
27. Теорема
Алгоритм гарантирует точность 2 для задачи «Min Vertex Covering».
Доказательство.
1 E ∗ — ребра, «попавшиеся алгоритму».
2 E ∗ — совершенное паросочетание.
3 |E ∗ | = |C |/2
4 OPT ≥ |E ∗ |: ∀ вершинное покрытие должно содержать по
крайней мере одну вершину для каждого ребра из E ∗ .
Получаем:
|C | ≤ 2 · OPT .
27 / 31
28. Теорема
Алгоритм гарантирует точность 2 для задачи «Min Vertex Covering».
Доказательство.
1 E ∗ — ребра, «попавшиеся алгоритму».
2 E ∗ — совершенное паросочетание.
3 |E ∗ | = |C |/2
4 OPT ≥ |E ∗ |: ∀ вершинное покрытие должно содержать по
крайней мере одну вершину для каждого ребра из E ∗ .
Получаем:
|C | ≤ 2 · OPT .
28 / 31
29. Теорема
Алгоритм гарантирует точность 2 для задачи «Min Vertex Covering».
Доказательство.
1 E ∗ — ребра, «попавшиеся алгоритму».
2 E ∗ — совершенное паросочетание.
3 |E ∗ | = |C |/2
4 OPT ≥ |E ∗ |: ∀ вершинное покрытие должно содержать по
крайней мере одну вершину для каждого ребра из E ∗ .
Получаем:
|C | ≤ 2 · OPT .
29 / 31