20080316 efficientalgorithms kulikov_lecture17

126
с/к “Эффективные алгоритмы” Лекция 17: Жадные алгоритмы А. Куликов Computer Science клуб при ПОМИ http://logic.pdmi.ras.ru/infclub/ А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 1 / 39

Upload: computer-science-club

Post on 16-Jun-2015

423 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 20080316 efficientalgorithms kulikov_lecture17

с/к “Эффективные алгоритмы”Лекция 17: Жадные алгоритмы

А. Куликов

Computer Science клуб при ПОМИhttp://logic.pdmi.ras.ru/∼infclub/

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 1 / 39

Page 2: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 2 / 39

Page 3: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 2 / 39

Page 4: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 2 / 39

Page 5: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 2 / 39

Page 6: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 2 / 39

Page 7: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 3 / 39

Page 8: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 4 / 39

Page 9: 20080316 efficientalgorithms kulikov_lecture17

Общая идея

Общая идея

На каждом шаге жадный алгоритм делает локально оптимальныйвыбор.Решение, найденное таким образом, не всегда оказываетсяоптимальным, но в ряде случаев все-таки оказывается.Общеизвестный пример — алгоритм для построенияминимального покрывающего дерева: на каждом шаге беретсясамое легкое из возможных ребер.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 5 / 39

Page 10: 20080316 efficientalgorithms kulikov_lecture17

Общая идея

Общая идеяНа каждом шаге жадный алгоритм делает локально оптимальныйвыбор.

Решение, найденное таким образом, не всегда оказываетсяоптимальным, но в ряде случаев все-таки оказывается.Общеизвестный пример — алгоритм для построенияминимального покрывающего дерева: на каждом шаге беретсясамое легкое из возможных ребер.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 5 / 39

Page 11: 20080316 efficientalgorithms kulikov_lecture17

Общая идея

Общая идеяНа каждом шаге жадный алгоритм делает локально оптимальныйвыбор.Решение, найденное таким образом, не всегда оказываетсяоптимальным, но в ряде случаев все-таки оказывается.

Общеизвестный пример — алгоритм для построенияминимального покрывающего дерева: на каждом шаге беретсясамое легкое из возможных ребер.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 5 / 39

Page 12: 20080316 efficientalgorithms kulikov_lecture17

Общая идея

Общая идеяНа каждом шаге жадный алгоритм делает локально оптимальныйвыбор.Решение, найденное таким образом, не всегда оказываетсяоптимальным, но в ряде случаев все-таки оказывается.Общеизвестный пример — алгоритм для построенияминимального покрывающего дерева: на каждом шаге беретсясамое легкое из возможных ребер.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 5 / 39

Page 13: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 6 / 39

Page 14: 20080316 efficientalgorithms kulikov_lecture17

Задача о выборе заявок

Определение

Даны n пар чисел (si , fi ), где si < fi обозначает время началазанятия, а fi — конец.Говорим, что заявки (si , fi ) и (sj , fj) совместны, если интервалы[si , fi ) и [sj , fj) не пересекаются: fi ≤ sj или fj ≤ si .Задача о выборе заявок (activity-selection problem) заключается ввыборе максимального количества совместных друг с другомзаявок.

ЗамечаниеБудем считать, что заявки отсортированы в порядке возрастаниявремени окончания: f1 ≤ f2 ≤ · · · ≤ fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 7 / 39

Page 15: 20080316 efficientalgorithms kulikov_lecture17

Задача о выборе заявок

ОпределениеДаны n пар чисел (si , fi ), где si < fi обозначает время началазанятия, а fi — конец.

Говорим, что заявки (si , fi ) и (sj , fj) совместны, если интервалы[si , fi ) и [sj , fj) не пересекаются: fi ≤ sj или fj ≤ si .Задача о выборе заявок (activity-selection problem) заключается ввыборе максимального количества совместных друг с другомзаявок.

ЗамечаниеБудем считать, что заявки отсортированы в порядке возрастаниявремени окончания: f1 ≤ f2 ≤ · · · ≤ fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 7 / 39

Page 16: 20080316 efficientalgorithms kulikov_lecture17

Задача о выборе заявок

ОпределениеДаны n пар чисел (si , fi ), где si < fi обозначает время началазанятия, а fi — конец.Говорим, что заявки (si , fi ) и (sj , fj) совместны, если интервалы[si , fi ) и [sj , fj) не пересекаются: fi ≤ sj или fj ≤ si .

Задача о выборе заявок (activity-selection problem) заключается ввыборе максимального количества совместных друг с другомзаявок.

ЗамечаниеБудем считать, что заявки отсортированы в порядке возрастаниявремени окончания: f1 ≤ f2 ≤ · · · ≤ fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 7 / 39

Page 17: 20080316 efficientalgorithms kulikov_lecture17

Задача о выборе заявок

ОпределениеДаны n пар чисел (si , fi ), где si < fi обозначает время началазанятия, а fi — конец.Говорим, что заявки (si , fi ) и (sj , fj) совместны, если интервалы[si , fi ) и [sj , fj) не пересекаются: fi ≤ sj или fj ≤ si .Задача о выборе заявок (activity-selection problem) заключается ввыборе максимального количества совместных друг с другомзаявок.

ЗамечаниеБудем считать, что заявки отсортированы в порядке возрастаниявремени окончания: f1 ≤ f2 ≤ · · · ≤ fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 7 / 39

Page 18: 20080316 efficientalgorithms kulikov_lecture17

Задача о выборе заявок

ОпределениеДаны n пар чисел (si , fi ), где si < fi обозначает время началазанятия, а fi — конец.Говорим, что заявки (si , fi ) и (sj , fj) совместны, если интервалы[si , fi ) и [sj , fj) не пересекаются: fi ≤ sj или fj ≤ si .Задача о выборе заявок (activity-selection problem) заключается ввыборе максимального количества совместных друг с другомзаявок.

ЗамечаниеБудем считать, что заявки отсортированы в порядке возрастаниявремени окончания: f1 ≤ f2 ≤ · · · ≤ fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 7 / 39

Page 19: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм

Greedy-Activity-Selector(s, f )

1 n← length[s]2 A← {1}3 j ← 14 for i ← 2 to n5 do if si ≥ fj6 then A← A ∪ {i}7 j ← i8 return A

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 8 / 39

Page 20: 20080316 efficientalgorithms kulikov_lecture17

Анализ алгоритма

Анализ алгоритма

Время работы есть Θ(n) (при условии, что заявкиотсортированы!).Существует оптимальное решение, содержащее заявку 1: если внекотором оптимальном множестве заявка 1 не содержится, топервую заявку (то есть заявку с самым ранним временемокончания) этого множества можно заменить на заявку 1. Притакой операции совместность не нарушится, а количество заявокостанется прежним.Итак, мы ищем решение, содержащее заявку 1. Значит, можновыкинуть все заявки, несовмеcтные с ней.Получаем подзадачу с меньшим количеством заявок.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 9 / 39

Page 21: 20080316 efficientalgorithms kulikov_lecture17

Анализ алгоритма

Анализ алгоритмаВремя работы есть Θ(n) (при условии, что заявкиотсортированы!).

Существует оптимальное решение, содержащее заявку 1: если внекотором оптимальном множестве заявка 1 не содержится, топервую заявку (то есть заявку с самым ранним временемокончания) этого множества можно заменить на заявку 1. Притакой операции совместность не нарушится, а количество заявокостанется прежним.Итак, мы ищем решение, содержащее заявку 1. Значит, можновыкинуть все заявки, несовмеcтные с ней.Получаем подзадачу с меньшим количеством заявок.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 9 / 39

Page 22: 20080316 efficientalgorithms kulikov_lecture17

Анализ алгоритма

Анализ алгоритмаВремя работы есть Θ(n) (при условии, что заявкиотсортированы!).Существует оптимальное решение, содержащее заявку 1: если внекотором оптимальном множестве заявка 1 не содержится, топервую заявку (то есть заявку с самым ранним временемокончания) этого множества можно заменить на заявку 1. Притакой операции совместность не нарушится, а количество заявокостанется прежним.

Итак, мы ищем решение, содержащее заявку 1. Значит, можновыкинуть все заявки, несовмеcтные с ней.Получаем подзадачу с меньшим количеством заявок.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 9 / 39

Page 23: 20080316 efficientalgorithms kulikov_lecture17

Анализ алгоритма

Анализ алгоритмаВремя работы есть Θ(n) (при условии, что заявкиотсортированы!).Существует оптимальное решение, содержащее заявку 1: если внекотором оптимальном множестве заявка 1 не содержится, топервую заявку (то есть заявку с самым ранним временемокончания) этого множества можно заменить на заявку 1. Притакой операции совместность не нарушится, а количество заявокостанется прежним.Итак, мы ищем решение, содержащее заявку 1. Значит, можновыкинуть все заявки, несовмеcтные с ней.

Получаем подзадачу с меньшим количеством заявок.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 9 / 39

Page 24: 20080316 efficientalgorithms kulikov_lecture17

Анализ алгоритма

Анализ алгоритмаВремя работы есть Θ(n) (при условии, что заявкиотсортированы!).Существует оптимальное решение, содержащее заявку 1: если внекотором оптимальном множестве заявка 1 не содержится, топервую заявку (то есть заявку с самым ранним временемокончания) этого множества можно заменить на заявку 1. Притакой операции совместность не нарушится, а количество заявокостанется прежним.Итак, мы ищем решение, содержащее заявку 1. Значит, можновыкинуть все заявки, несовмеcтные с ней.Получаем подзадачу с меньшим количеством заявок.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 9 / 39

Page 25: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 10 / 39

Page 26: 20080316 efficientalgorithms kulikov_lecture17

Когда применимы жадные алгоритмы?

Две отличительные особенности жадных алгоритмов

1 Принцип жадного выбора: последовательность локальнооптимальных (жадных) выборов дает глобально оптимальноерешение. Для установления этого свойства, как правило, нужнопоказать, что жадный выбор согласован с некоторымоптимальным решением и что после выбора получаетсяаналогичная подзадача.

2 Свойство оптимальности для подзадач: оптимальное решение длязадачи содержит оптимальные решения для подзадач.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 11 / 39

Page 27: 20080316 efficientalgorithms kulikov_lecture17

Когда применимы жадные алгоритмы?

Две отличительные особенности жадных алгоритмов1 Принцип жадного выбора: последовательность локально

оптимальных (жадных) выборов дает глобально оптимальноерешение. Для установления этого свойства, как правило, нужнопоказать, что жадный выбор согласован с некоторымоптимальным решением и что после выбора получаетсяаналогичная подзадача.

2 Свойство оптимальности для подзадач: оптимальное решение длязадачи содержит оптимальные решения для подзадач.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 11 / 39

Page 28: 20080316 efficientalgorithms kulikov_lecture17

Когда применимы жадные алгоритмы?

Две отличительные особенности жадных алгоритмов1 Принцип жадного выбора: последовательность локально

оптимальных (жадных) выборов дает глобально оптимальноерешение. Для установления этого свойства, как правило, нужнопоказать, что жадный выбор согласован с некоторымоптимальным решением и что после выбора получаетсяаналогичная подзадача.

2 Свойство оптимальности для подзадач: оптимальное решение длязадачи содержит оптимальные решения для подзадач.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 11 / 39

Page 29: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

ОпределениеВ непрерывной задаче о рюкзаке (fractional knapsack problem), вотличие от общей задачи о рюкзаке, в рюкзак разрешать класть частипредметов.

ЗамечанияНетрудно видеть, что жадный алгоритм находит оптимальноерешение для непрерывной задачи о рюкзаке: на каждом шагедобавляем максимальное количество предмета максимальнойудельной стоимости (стоимость/объём).Нетрудно также убедиться в том, что аналогичный алгоритм дляобщей задачи может и не найти оптимального решения: сразуположив в рюкзак самый дорогой предмет, мы можем потерятьвозможность полностью заполнить рюкзак.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 12 / 39

Page 30: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

ОпределениеВ непрерывной задаче о рюкзаке (fractional knapsack problem), вотличие от общей задачи о рюкзаке, в рюкзак разрешать класть частипредметов.

Замечания

Нетрудно видеть, что жадный алгоритм находит оптимальноерешение для непрерывной задачи о рюкзаке: на каждом шагедобавляем максимальное количество предмета максимальнойудельной стоимости (стоимость/объём).Нетрудно также убедиться в том, что аналогичный алгоритм дляобщей задачи может и не найти оптимального решения: сразуположив в рюкзак самый дорогой предмет, мы можем потерятьвозможность полностью заполнить рюкзак.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 12 / 39

Page 31: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

ОпределениеВ непрерывной задаче о рюкзаке (fractional knapsack problem), вотличие от общей задачи о рюкзаке, в рюкзак разрешать класть частипредметов.

ЗамечанияНетрудно видеть, что жадный алгоритм находит оптимальноерешение для непрерывной задачи о рюкзаке: на каждом шагедобавляем максимальное количество предмета максимальнойудельной стоимости (стоимость/объём).

Нетрудно также убедиться в том, что аналогичный алгоритм дляобщей задачи может и не найти оптимального решения: сразуположив в рюкзак самый дорогой предмет, мы можем потерятьвозможность полностью заполнить рюкзак.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 12 / 39

Page 32: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

ОпределениеВ непрерывной задаче о рюкзаке (fractional knapsack problem), вотличие от общей задачи о рюкзаке, в рюкзак разрешать класть частипредметов.

ЗамечанияНетрудно видеть, что жадный алгоритм находит оптимальноерешение для непрерывной задачи о рюкзаке: на каждом шагедобавляем максимальное количество предмета максимальнойудельной стоимости (стоимость/объём).Нетрудно также убедиться в том, что аналогичный алгоритм дляобщей задачи может и не найти оптимального решения: сразуположив в рюкзак самый дорогой предмет, мы можем потерятьвозможность полностью заполнить рюкзак.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 12 / 39

Page 33: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

Замечания

Итак, в первом случае выполняется принцип жадного выбора, вовтором — нет. Поэтому непрерывная задача решается жаднымалгоритмом, общая — динамическим программированием.Слегка модифицировав жадный алгоритм для общей задачи орюкзаке, можно получить 2-приближенный алгоритм.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 13 / 39

Page 34: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

ЗамечанияИтак, в первом случае выполняется принцип жадного выбора, вовтором — нет. Поэтому непрерывная задача решается жаднымалгоритмом, общая — динамическим программированием.

Слегка модифицировав жадный алгоритм для общей задачи орюкзаке, можно получить 2-приближенный алгоритм.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 13 / 39

Page 35: 20080316 efficientalgorithms kulikov_lecture17

Жадный алгоритм или динамическоепрограммирование?

ЗамечанияИтак, в первом случае выполняется принцип жадного выбора, вовтором — нет. Поэтому непрерывная задача решается жаднымалгоритмом, общая — динамическим программированием.Слегка модифицировав жадный алгоритм для общей задачи орюкзаке, можно получить 2-приближенный алгоритм.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 13 / 39

Page 36: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 14 / 39

Page 37: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена

Коды Хаффмена

Рассмотрим строчку длины 130, состоящую только из символовA, B , C , D. Более того, допустим, что частота каждого символаизвестна:

A B C D70 3 20 37

Наша задача состоит в том, чтобы каждому символу присвоитьбитовый код так, чтобы соответственно закодированная строчкаимела как можно меньшую длину.Один из вариантов кодирования: A = 00, B = 01, C = 10, D = 11.В коде тогда будет 260 бит.Интуитивно ясно, что хочется придумать кодирование, прикотором символ A кодировался бы одним битом (возможно, ценойтого, что B бы кодировался тремя).

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 15 / 39

Page 38: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена

Коды ХаффменаРассмотрим строчку длины 130, состоящую только из символовA, B , C , D. Более того, допустим, что частота каждого символаизвестна:

A B C D70 3 20 37

Наша задача состоит в том, чтобы каждому символу присвоитьбитовый код так, чтобы соответственно закодированная строчкаимела как можно меньшую длину.Один из вариантов кодирования: A = 00, B = 01, C = 10, D = 11.В коде тогда будет 260 бит.Интуитивно ясно, что хочется придумать кодирование, прикотором символ A кодировался бы одним битом (возможно, ценойтого, что B бы кодировался тремя).

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 15 / 39

Page 39: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена

Коды ХаффменаРассмотрим строчку длины 130, состоящую только из символовA, B , C , D. Более того, допустим, что частота каждого символаизвестна:

A B C D70 3 20 37

Наша задача состоит в том, чтобы каждому символу присвоитьбитовый код так, чтобы соответственно закодированная строчкаимела как можно меньшую длину.

Один из вариантов кодирования: A = 00, B = 01, C = 10, D = 11.В коде тогда будет 260 бит.Интуитивно ясно, что хочется придумать кодирование, прикотором символ A кодировался бы одним битом (возможно, ценойтого, что B бы кодировался тремя).

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 15 / 39

Page 40: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена

Коды ХаффменаРассмотрим строчку длины 130, состоящую только из символовA, B , C , D. Более того, допустим, что частота каждого символаизвестна:

A B C D70 3 20 37

Наша задача состоит в том, чтобы каждому символу присвоитьбитовый код так, чтобы соответственно закодированная строчкаимела как можно меньшую длину.Один из вариантов кодирования: A = 00, B = 01, C = 10, D = 11.В коде тогда будет 260 бит.

Интуитивно ясно, что хочется придумать кодирование, прикотором символ A кодировался бы одним битом (возможно, ценойтого, что B бы кодировался тремя).

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 15 / 39

Page 41: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена

Коды ХаффменаРассмотрим строчку длины 130, состоящую только из символовA, B , C , D. Более того, допустим, что частота каждого символаизвестна:

A B C D70 3 20 37

Наша задача состоит в том, чтобы каждому символу присвоитьбитовый код так, чтобы соответственно закодированная строчкаимела как можно меньшую длину.Один из вариантов кодирования: A = 00, B = 01, C = 10, D = 11.В коде тогда будет 260 бит.Интуитивно ясно, что хочется придумать кодирование, прикотором символ A кодировался бы одним битом (возможно, ценойтого, что B бы кодировался тремя).

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 15 / 39

Page 42: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена (продолжение)

Коды Хаффмена

Однако при кодировании символов последовательностями битовразной длины может возникнуть проблема декодировки.Одним из способов решения такой проблемы являетсяпрефиксное кодирование.При таком кодировании ни для каких двух символов код одногоне является префиксом кода другого.Каждое такое кодирование может быть представлено полным (укаждой вершины либо ноль, либо два сына) бинарнынм деревом,на ребрах которого стоят 0 и 1, а в листьях — кодируемыесимволы.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 16 / 39

Page 43: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена (продолжение)

Коды ХаффменаОднако при кодировании символов последовательностями битовразной длины может возникнуть проблема декодировки.

Одним из способов решения такой проблемы являетсяпрефиксное кодирование.При таком кодировании ни для каких двух символов код одногоне является префиксом кода другого.Каждое такое кодирование может быть представлено полным (укаждой вершины либо ноль, либо два сына) бинарнынм деревом,на ребрах которого стоят 0 и 1, а в листьях — кодируемыесимволы.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 16 / 39

Page 44: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена (продолжение)

Коды ХаффменаОднако при кодировании символов последовательностями битовразной длины может возникнуть проблема декодировки.Одним из способов решения такой проблемы являетсяпрефиксное кодирование.

При таком кодировании ни для каких двух символов код одногоне является префиксом кода другого.Каждое такое кодирование может быть представлено полным (укаждой вершины либо ноль, либо два сына) бинарнынм деревом,на ребрах которого стоят 0 и 1, а в листьях — кодируемыесимволы.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 16 / 39

Page 45: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена (продолжение)

Коды ХаффменаОднако при кодировании символов последовательностями битовразной длины может возникнуть проблема декодировки.Одним из способов решения такой проблемы являетсяпрефиксное кодирование.При таком кодировании ни для каких двух символов код одногоне является префиксом кода другого.

Каждое такое кодирование может быть представлено полным (укаждой вершины либо ноль, либо два сына) бинарнынм деревом,на ребрах которого стоят 0 и 1, а в листьях — кодируемыесимволы.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 16 / 39

Page 46: 20080316 efficientalgorithms kulikov_lecture17

Коды Хаффмена (продолжение)

Коды ХаффменаОднако при кодировании символов последовательностями битовразной длины может возникнуть проблема декодировки.Одним из способов решения такой проблемы являетсяпрефиксное кодирование.При таком кодировании ни для каких двух символов код одногоне является префиксом кода другого.Каждое такое кодирование может быть представлено полным (укаждой вершины либо ноль, либо два сына) бинарнынм деревом,на ребрах которого стоят 0 и 1, а в листьях — кодируемыесимволы.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 16 / 39

Page 47: 20080316 efficientalgorithms kulikov_lecture17

Пример кодирования

Дерево

70A 60

37D23

3B 20C

01

01

01

Кодирование

A B C D70 3 20 370 100 101 11

Закодировання строчкасодержит 213 битов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 17 / 39

Page 48: 20080316 efficientalgorithms kulikov_lecture17

Оптимальное дерево

Оптимальное дерево

Наша задача состоит в нахождении такого полного бинарногодерева, листья которого помечены символами и котороеминимизирует стоимость дерева, определяемую как

n∑i=1

fi · (глубина i-го символа в дереве).

Определим частоту внутренней вершины дерева как сумму частотеё сыновей. Нетрудно видеть, что при таком определении частотакаждой вершины дерева равняется просто количеству посещенийэтой вершины при кодировании или декодировании.Стоимость дерева тогда равняется сумме частот всех вершиндерева кроме корня.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 18 / 39

Page 49: 20080316 efficientalgorithms kulikov_lecture17

Оптимальное дерево

Оптимальное деревоНаша задача состоит в нахождении такого полного бинарногодерева, листья которого помечены символами и котороеминимизирует стоимость дерева, определяемую как

n∑i=1

fi · (глубина i-го символа в дереве).

Определим частоту внутренней вершины дерева как сумму частотеё сыновей. Нетрудно видеть, что при таком определении частотакаждой вершины дерева равняется просто количеству посещенийэтой вершины при кодировании или декодировании.Стоимость дерева тогда равняется сумме частот всех вершиндерева кроме корня.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 18 / 39

Page 50: 20080316 efficientalgorithms kulikov_lecture17

Оптимальное дерево

Оптимальное деревоНаша задача состоит в нахождении такого полного бинарногодерева, листья которого помечены символами и котороеминимизирует стоимость дерева, определяемую как

n∑i=1

fi · (глубина i-го символа в дереве).

Определим частоту внутренней вершины дерева как сумму частотеё сыновей. Нетрудно видеть, что при таком определении частотакаждой вершины дерева равняется просто количеству посещенийэтой вершины при кодировании или декодировании.

Стоимость дерева тогда равняется сумме частот всех вершиндерева кроме корня.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 18 / 39

Page 51: 20080316 efficientalgorithms kulikov_lecture17

Оптимальное дерево

Оптимальное деревоНаша задача состоит в нахождении такого полного бинарногодерева, листья которого помечены символами и котороеминимизирует стоимость дерева, определяемую как

n∑i=1

fi · (глубина i-го символа в дереве).

Определим частоту внутренней вершины дерева как сумму частотеё сыновей. Нетрудно видеть, что при таком определении частотакаждой вершины дерева равняется просто количеству посещенийэтой вершины при кодировании или декодировании.Стоимость дерева тогда равняется сумме частот всех вершиндерева кроме корня.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 18 / 39

Page 52: 20080316 efficientalgorithms kulikov_lecture17

Идея жадного построения дерева

Идея жадного построения дерева

Ясно, что два самых редких символа должны висеть в самом низуоптимального дерева.НУО, f1, f2 суть минимальные частоты.Стоимость оптимального дерева для частот f1, . . . fn, в котором f1и f2 являются листьями-братьями, равняется сумме (f1 + f2) истоимости оптимального дерева для частот (f1 + f2), . . . fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 19 / 39

Page 53: 20080316 efficientalgorithms kulikov_lecture17

Идея жадного построения дерева

Идея жадного построения дереваЯсно, что два самых редких символа должны висеть в самом низуоптимального дерева.

НУО, f1, f2 суть минимальные частоты.Стоимость оптимального дерева для частот f1, . . . fn, в котором f1и f2 являются листьями-братьями, равняется сумме (f1 + f2) истоимости оптимального дерева для частот (f1 + f2), . . . fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 19 / 39

Page 54: 20080316 efficientalgorithms kulikov_lecture17

Идея жадного построения дерева

Идея жадного построения дереваЯсно, что два самых редких символа должны висеть в самом низуоптимального дерева.НУО, f1, f2 суть минимальные частоты.

Стоимость оптимального дерева для частот f1, . . . fn, в котором f1и f2 являются листьями-братьями, равняется сумме (f1 + f2) истоимости оптимального дерева для частот (f1 + f2), . . . fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 19 / 39

Page 55: 20080316 efficientalgorithms kulikov_lecture17

Идея жадного построения дерева

Идея жадного построения дереваЯсно, что два самых редких символа должны висеть в самом низуоптимального дерева.НУО, f1, f2 суть минимальные частоты.Стоимость оптимального дерева для частот f1, . . . fn, в котором f1и f2 являются листьями-братьями, равняется сумме (f1 + f2) истоимости оптимального дерева для частот (f1 + f2), . . . fn.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 19 / 39

Page 56: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм

Huffman(f )

1 � Вход: массив частот f [1 . . n]2 � Выход: кодирующее дерево с n листами3 создать очередь с приоритетами H, упорядоченную по f4 for i ← 1 to n5 do Insert(H, i)6 for k ← n + 1 to 2n − 17 do i ← Extract-Min(H)8 j ← Extract-Min(H)9 создать вершину с номером k и сыновьями i , j

10 f [k]← f [i ] + f [j ]11 Insert(H, k)

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 20 / 39

Page 57: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 21 / 39

Page 58: 20080316 efficientalgorithms kulikov_lecture17

Задача о покрытии множествами

Определение

Дано множество U = {u1, . . . , un} и семейство его подмножествℱ = {S1, . . . , Sk}, Si ⊆ U.В сумме все подмножества покрывают U: U =

⋃S∈ℱ S .

Задача о покрытии множествами (set cover problem) заключаетсяв нахождении минимального набора подмножеств, покрывающеговсе множество U.

ЗамечанияВ общем случае задача является NP-трудной. Мы построимприближенный алгоритм, основанный на жадной эвристике.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 22 / 39

Page 59: 20080316 efficientalgorithms kulikov_lecture17

Задача о покрытии множествами

ОпределениеДано множество U = {u1, . . . , un} и семейство его подмножествℱ = {S1, . . . , Sk}, Si ⊆ U.

В сумме все подмножества покрывают U: U =⋃

S∈ℱ S .Задача о покрытии множествами (set cover problem) заключаетсяв нахождении минимального набора подмножеств, покрывающеговсе множество U.

ЗамечанияВ общем случае задача является NP-трудной. Мы построимприближенный алгоритм, основанный на жадной эвристике.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 22 / 39

Page 60: 20080316 efficientalgorithms kulikov_lecture17

Задача о покрытии множествами

ОпределениеДано множество U = {u1, . . . , un} и семейство его подмножествℱ = {S1, . . . , Sk}, Si ⊆ U.В сумме все подмножества покрывают U: U =

⋃S∈ℱ S .

Задача о покрытии множествами (set cover problem) заключаетсяв нахождении минимального набора подмножеств, покрывающеговсе множество U.

ЗамечанияВ общем случае задача является NP-трудной. Мы построимприближенный алгоритм, основанный на жадной эвристике.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 22 / 39

Page 61: 20080316 efficientalgorithms kulikov_lecture17

Задача о покрытии множествами

ОпределениеДано множество U = {u1, . . . , un} и семейство его подмножествℱ = {S1, . . . , Sk}, Si ⊆ U.В сумме все подмножества покрывают U: U =

⋃S∈ℱ S .

Задача о покрытии множествами (set cover problem) заключаетсяв нахождении минимального набора подмножеств, покрывающеговсе множество U.

ЗамечанияВ общем случае задача является NP-трудной. Мы построимприближенный алгоритм, основанный на жадной эвристике.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 22 / 39

Page 62: 20080316 efficientalgorithms kulikov_lecture17

Задача о покрытии множествами

ОпределениеДано множество U = {u1, . . . , un} и семейство его подмножествℱ = {S1, . . . , Sk}, Si ⊆ U.В сумме все подмножества покрывают U: U =

⋃S∈ℱ S .

Задача о покрытии множествами (set cover problem) заключаетсяв нахождении минимального набора подмножеств, покрывающеговсе множество U.

ЗамечанияВ общем случае задача является NP-трудной. Мы построимприближенный алгоритм, основанный на жадной эвристике.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 22 / 39

Page 63: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм и анализ

Алгоритм и анализ

Алгоритм на каждом шаге выбирает множество, покрывающеемаскимальное число все еще не покрытых элементов.Несложно построить пример, на котором такой жадный алгоритмвыдает неоптимальное решение.Можно, однако, показать, что если оптимальное покрытиесодержит m множеств, то наш жадный алгоритм найдет решение,содержащее не более m ln n множеств.Обозначим через nt количество непокрытых элементов после tшагов.Поскольку все эти элементы покрыватся m множествами изоптимального покрытия, найдется множество, покрывающее хотябы nt/m из них.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 23 / 39

Page 64: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм и анализ

Алгоритм и анализАлгоритм на каждом шаге выбирает множество, покрывающеемаскимальное число все еще не покрытых элементов.

Несложно построить пример, на котором такой жадный алгоритмвыдает неоптимальное решение.Можно, однако, показать, что если оптимальное покрытиесодержит m множеств, то наш жадный алгоритм найдет решение,содержащее не более m ln n множеств.Обозначим через nt количество непокрытых элементов после tшагов.Поскольку все эти элементы покрыватся m множествами изоптимального покрытия, найдется множество, покрывающее хотябы nt/m из них.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 23 / 39

Page 65: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм и анализ

Алгоритм и анализАлгоритм на каждом шаге выбирает множество, покрывающеемаскимальное число все еще не покрытых элементов.Несложно построить пример, на котором такой жадный алгоритмвыдает неоптимальное решение.

Можно, однако, показать, что если оптимальное покрытиесодержит m множеств, то наш жадный алгоритм найдет решение,содержащее не более m ln n множеств.Обозначим через nt количество непокрытых элементов после tшагов.Поскольку все эти элементы покрыватся m множествами изоптимального покрытия, найдется множество, покрывающее хотябы nt/m из них.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 23 / 39

Page 66: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм и анализ

Алгоритм и анализАлгоритм на каждом шаге выбирает множество, покрывающеемаскимальное число все еще не покрытых элементов.Несложно построить пример, на котором такой жадный алгоритмвыдает неоптимальное решение.Можно, однако, показать, что если оптимальное покрытиесодержит m множеств, то наш жадный алгоритм найдет решение,содержащее не более m ln n множеств.

Обозначим через nt количество непокрытых элементов после tшагов.Поскольку все эти элементы покрыватся m множествами изоптимального покрытия, найдется множество, покрывающее хотябы nt/m из них.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 23 / 39

Page 67: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм и анализ

Алгоритм и анализАлгоритм на каждом шаге выбирает множество, покрывающеемаскимальное число все еще не покрытых элементов.Несложно построить пример, на котором такой жадный алгоритмвыдает неоптимальное решение.Можно, однако, показать, что если оптимальное покрытиесодержит m множеств, то наш жадный алгоритм найдет решение,содержащее не более m ln n множеств.Обозначим через nt количество непокрытых элементов после tшагов.

Поскольку все эти элементы покрыватся m множествами изоптимального покрытия, найдется множество, покрывающее хотябы nt/m из них.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 23 / 39

Page 68: 20080316 efficientalgorithms kulikov_lecture17

Алгоритм и анализ

Алгоритм и анализАлгоритм на каждом шаге выбирает множество, покрывающеемаскимальное число все еще не покрытых элементов.Несложно построить пример, на котором такой жадный алгоритмвыдает неоптимальное решение.Можно, однако, показать, что если оптимальное покрытиесодержит m множеств, то наш жадный алгоритм найдет решение,содержащее не более m ln n множеств.Обозначим через nt количество непокрытых элементов после tшагов.Поскольку все эти элементы покрыватся m множествами изоптимального покрытия, найдется множество, покрывающее хотябы nt/m из них.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 23 / 39

Page 69: 20080316 efficientalgorithms kulikov_lecture17

Анализ

Анализ

Значит, жадная эвристика гарантирует, что

nt+1 ≤ nt −nt

m= nt

(1− 1

m

).

Тогда

nt ≤ n0

(1− 1

m

)t

< n0

(e−1/m

)t= ne−t/m.

При t = m ln n, таким образом, nt будет строго меньше 1.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 24 / 39

Page 70: 20080316 efficientalgorithms kulikov_lecture17

Анализ

АнализЗначит, жадная эвристика гарантирует, что

nt+1 ≤ nt −nt

m= nt

(1− 1

m

).

Тогда

nt ≤ n0

(1− 1

m

)t

< n0

(e−1/m

)t= ne−t/m.

При t = m ln n, таким образом, nt будет строго меньше 1.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 24 / 39

Page 71: 20080316 efficientalgorithms kulikov_lecture17

Анализ

АнализЗначит, жадная эвристика гарантирует, что

nt+1 ≤ nt −nt

m= nt

(1− 1

m

).

Тогда

nt ≤ n0

(1− 1

m

)t

< n0

(e−1/m

)t= ne−t/m.

При t = m ln n, таким образом, nt будет строго меньше 1.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 24 / 39

Page 72: 20080316 efficientalgorithms kulikov_lecture17

Анализ

АнализЗначит, жадная эвристика гарантирует, что

nt+1 ≤ nt −nt

m= nt

(1− 1

m

).

Тогда

nt ≤ n0

(1− 1

m

)t

< n0

(e−1/m

)t= ne−t/m.

При t = m ln n, таким образом, nt будет строго меньше 1.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 24 / 39

Page 73: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 25 / 39

Page 74: 20080316 efficientalgorithms kulikov_lecture17

Задача о вершинном покрытии

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу G = (V , E ) такого минимального егоподмножества вершин V ′, что для любого ребра (u, v) ∈ E хотя быодна из вершин u и v содержится в V ′.

Простой жадный алгоритмРассмотрим следующий жадный алгоритм: на каждом шагевыбираем вершину максимальной степени и выкидываем изграфа все покрытые ребра.Мы покажем, что для любой константы c найдется граф, длякоторого этот алгоритм выдаст покрытие, которое по размерубудет более чем в c раз хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 26 / 39

Page 75: 20080316 efficientalgorithms kulikov_lecture17

Задача о вершинном покрытии

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу G = (V , E ) такого минимального егоподмножества вершин V ′, что для любого ребра (u, v) ∈ E хотя быодна из вершин u и v содержится в V ′.

Простой жадный алгоритм

Рассмотрим следующий жадный алгоритм: на каждом шагевыбираем вершину максимальной степени и выкидываем изграфа все покрытые ребра.Мы покажем, что для любой константы c найдется граф, длякоторого этот алгоритм выдаст покрытие, которое по размерубудет более чем в c раз хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 26 / 39

Page 76: 20080316 efficientalgorithms kulikov_lecture17

Задача о вершинном покрытии

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу G = (V , E ) такого минимального егоподмножества вершин V ′, что для любого ребра (u, v) ∈ E хотя быодна из вершин u и v содержится в V ′.

Простой жадный алгоритмРассмотрим следующий жадный алгоритм: на каждом шагевыбираем вершину максимальной степени и выкидываем изграфа все покрытые ребра.

Мы покажем, что для любой константы c найдется граф, длякоторого этот алгоритм выдаст покрытие, которое по размерубудет более чем в c раз хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 26 / 39

Page 77: 20080316 efficientalgorithms kulikov_lecture17

Задача о вершинном покрытии

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу G = (V , E ) такого минимального егоподмножества вершин V ′, что для любого ребра (u, v) ∈ E хотя быодна из вершин u и v содержится в V ′.

Простой жадный алгоритмРассмотрим следующий жадный алгоритм: на каждом шагевыбираем вершину максимальной степени и выкидываем изграфа все покрытые ребра.Мы покажем, что для любой константы c найдется граф, длякоторого этот алгоритм выдаст покрытие, которое по размерубудет более чем в c раз хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 26 / 39

Page 78: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкции

Рассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 79: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .

|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 80: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.

V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 81: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .

Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 82: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .

Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 83: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .

Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 84: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.

Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 85: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.

Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 86: 20080316 efficientalgorithms kulikov_lecture17

Идея конструкции

Идея конструкцииРассматриваем двудольный граф на долях U и V .|U| = n!.V = V1 ∪ V2 ∪ · · · ∪ Vn, |Vi | = n!/i .Каждая вершина u ∈ U имеет ровно одного соседа в группе Vi .Таким образом, deg(v) = i для любой v ∈ Vi .Ясно, что U является вершинным покрытием.Жадный же алгоритм может последовательно выбрать сначалавсе вершины из Vn, потом все вершины из Vn−1 и т.д.Полученное покрытие будет содержатьn!(1/n + 1/(n − 1) + · · ·+ 1) вершин.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 27 / 39

Page 87: 20080316 efficientalgorithms kulikov_lecture17

Пример для n = 6

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 28 / 39

Page 88: 20080316 efficientalgorithms kulikov_lecture17

План лекции

1 ВведениеЧто такое жадный алгоритм?Пример: задача о выборе заявокКогда применимы жадные алгоритмы?

2 Коды Хаффмена

3 Покрытие множествами

4 Вершинное покрытие

5 Локальный поиск для SAT

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 29 / 39

Page 89: 20080316 efficientalgorithms kulikov_lecture17

Формула в КНФ

Определение

Пропозициональной или Булевой (propositional, Boolean)переменной называется переменная, принимающая значения true(1) и false (0).Литералом (literal) называется Булева переменная x или ееотрицание ¬x .Клозом (clause) называется дизъюнкция конечного множествалитералов, не содержащего одновременно переменной и ееотрицания.k-клозом (k-clause) называется клоз, содержащий ровно kлитералов.Формулой в конъюнктивной нормальной форме (КНФ) (formula inconjunctive normal form, CNF) называется конъюнкция конечногомножества клозов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 30 / 39

Page 90: 20080316 efficientalgorithms kulikov_lecture17

Формула в КНФ

ОпределениеПропозициональной или Булевой (propositional, Boolean)переменной называется переменная, принимающая значения true(1) и false (0).

Литералом (literal) называется Булева переменная x или ееотрицание ¬x .Клозом (clause) называется дизъюнкция конечного множествалитералов, не содержащего одновременно переменной и ееотрицания.k-клозом (k-clause) называется клоз, содержащий ровно kлитералов.Формулой в конъюнктивной нормальной форме (КНФ) (formula inconjunctive normal form, CNF) называется конъюнкция конечногомножества клозов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 30 / 39

Page 91: 20080316 efficientalgorithms kulikov_lecture17

Формула в КНФ

ОпределениеПропозициональной или Булевой (propositional, Boolean)переменной называется переменная, принимающая значения true(1) и false (0).Литералом (literal) называется Булева переменная x или ееотрицание ¬x .

Клозом (clause) называется дизъюнкция конечного множествалитералов, не содержащего одновременно переменной и ееотрицания.k-клозом (k-clause) называется клоз, содержащий ровно kлитералов.Формулой в конъюнктивной нормальной форме (КНФ) (formula inconjunctive normal form, CNF) называется конъюнкция конечногомножества клозов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 30 / 39

Page 92: 20080316 efficientalgorithms kulikov_lecture17

Формула в КНФ

ОпределениеПропозициональной или Булевой (propositional, Boolean)переменной называется переменная, принимающая значения true(1) и false (0).Литералом (literal) называется Булева переменная x или ееотрицание ¬x .Клозом (clause) называется дизъюнкция конечного множествалитералов, не содержащего одновременно переменной и ееотрицания.

k-клозом (k-clause) называется клоз, содержащий ровно kлитералов.Формулой в конъюнктивной нормальной форме (КНФ) (formula inconjunctive normal form, CNF) называется конъюнкция конечногомножества клозов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 30 / 39

Page 93: 20080316 efficientalgorithms kulikov_lecture17

Формула в КНФ

ОпределениеПропозициональной или Булевой (propositional, Boolean)переменной называется переменная, принимающая значения true(1) и false (0).Литералом (literal) называется Булева переменная x или ееотрицание ¬x .Клозом (clause) называется дизъюнкция конечного множествалитералов, не содержащего одновременно переменной и ееотрицания.k-клозом (k-clause) называется клоз, содержащий ровно kлитералов.

Формулой в конъюнктивной нормальной форме (КНФ) (formula inconjunctive normal form, CNF) называется конъюнкция конечногомножества клозов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 30 / 39

Page 94: 20080316 efficientalgorithms kulikov_lecture17

Формула в КНФ

ОпределениеПропозициональной или Булевой (propositional, Boolean)переменной называется переменная, принимающая значения true(1) и false (0).Литералом (literal) называется Булева переменная x или ееотрицание ¬x .Клозом (clause) называется дизъюнкция конечного множествалитералов, не содержащего одновременно переменной и ееотрицания.k-клозом (k-clause) называется клоз, содержащий ровно kлитералов.Формулой в конъюнктивной нормальной форме (КНФ) (formula inconjunctive normal form, CNF) называется конъюнкция конечногомножества клозов.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 30 / 39

Page 95: 20080316 efficientalgorithms kulikov_lecture17

Задача выполнимости

ОпределениеЗадача пропозициональной выполнимости (Boolean satisfiabilityproblem, SAT): определить, выполнима ли данная формула в КНФ, тоесть существует ли набор Булевых значений переменным формулы,выполняющий формулу. Такой набор называют выполняющим(satisfying assignment), а формулу, для которой такой наборсуществует, — выполнимой (satisfiable).

ПримерF1 = (x ∨ y ∨ ¬z) ∧ (¬x) ∧ (¬y ∨ z)F1 выполнима: x = 0, y = 1, z = 1F2 = (x ∨ y) ∧ (x ∨ ¬y) ∧ (¬x ∨ y) ∧ (¬x ∨ ¬y)F2 невыполнима, но три клоза можно выполнить

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 31 / 39

Page 96: 20080316 efficientalgorithms kulikov_lecture17

Задача выполнимости

ОпределениеЗадача пропозициональной выполнимости (Boolean satisfiabilityproblem, SAT): определить, выполнима ли данная формула в КНФ, тоесть существует ли набор Булевых значений переменным формулы,выполняющий формулу. Такой набор называют выполняющим(satisfying assignment), а формулу, для которой такой наборсуществует, — выполнимой (satisfiable).

Пример

F1 = (x ∨ y ∨ ¬z) ∧ (¬x) ∧ (¬y ∨ z)F1 выполнима: x = 0, y = 1, z = 1F2 = (x ∨ y) ∧ (x ∨ ¬y) ∧ (¬x ∨ y) ∧ (¬x ∨ ¬y)F2 невыполнима, но три клоза можно выполнить

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 31 / 39

Page 97: 20080316 efficientalgorithms kulikov_lecture17

Задача выполнимости

ОпределениеЗадача пропозициональной выполнимости (Boolean satisfiabilityproblem, SAT): определить, выполнима ли данная формула в КНФ, тоесть существует ли набор Булевых значений переменным формулы,выполняющий формулу. Такой набор называют выполняющим(satisfying assignment), а формулу, для которой такой наборсуществует, — выполнимой (satisfiable).

ПримерF1 = (x ∨ y ∨ ¬z) ∧ (¬x) ∧ (¬y ∨ z)F1 выполнима: x = 0, y = 1, z = 1

F2 = (x ∨ y) ∧ (x ∨ ¬y) ∧ (¬x ∨ y) ∧ (¬x ∨ ¬y)F2 невыполнима, но три клоза можно выполнить

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 31 / 39

Page 98: 20080316 efficientalgorithms kulikov_lecture17

Задача выполнимости

ОпределениеЗадача пропозициональной выполнимости (Boolean satisfiabilityproblem, SAT): определить, выполнима ли данная формула в КНФ, тоесть существует ли набор Булевых значений переменным формулы,выполняющий формулу. Такой набор называют выполняющим(satisfying assignment), а формулу, для которой такой наборсуществует, — выполнимой (satisfiable).

ПримерF1 = (x ∨ y ∨ ¬z) ∧ (¬x) ∧ (¬y ∨ z)F1 выполнима: x = 0, y = 1, z = 1F2 = (x ∨ y) ∧ (x ∨ ¬y) ∧ (¬x ∨ y) ∧ (¬x ∨ ¬y)F2 невыполнима, но три клоза можно выполнить

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 31 / 39

Page 99: 20080316 efficientalgorithms kulikov_lecture17

Жадный локальный поиск

GSAT(F ,maxflips,maxtries)

1 for i ← 1 to maxtries2 do выбрать случайный набор I3 for j ← 1 to maxflips4 do если I выполняет F , вернуть I5 выбрать переменную v , при изменении которой

выполняется максимальное возможноеколичество клозов F

6 изменить значение переменной v в наборе I7 return “не знаю”

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 32 / 39

Page 100: 20080316 efficientalgorithms kulikov_lecture17

Сложная формула для алгоритма

первый тип клозов (x1 ∨ ¬x2), (x2 ∨ ¬x3), . . . , (xn ∨ ¬x1)

второй тип клозов (x1 ∨ x2)

третий тип клозов (x1 ∨ ¬x2 ∨ · · · ∨ ¬xn−3 ∨ ¬xn−2 ∨ ¬xn−1)

(x1 ∨ ¬x2 ∨ · · · ∨ ¬xn−3 ∨ ¬xn−1 ∨ ¬xn)

(x1 ∨ ¬x2 ∨ · · · ∨ ¬xn−3 ∨ ¬xn ∨ ¬xn−2)

(x2 ∨ ¬x3 ∨ · · · ∨ ¬xn−2 ∨ ¬xn−1 ∨ ¬xn)

(x2 ∨ ¬x3 ∨ · · · ∨ ¬xn−2 ∨ ¬xn ∨ ¬x1)

(x2 ∨ ¬x3 ∨ · · · ∨ ¬xn−2 ∨ ¬x1 ∨ ¬xn−1)

. . .

(xn ∨ ¬x1 ∨ · · · ∨ ¬xn−4 ∨ ¬xn−3 ∨ ¬xn−2)

(xn ∨ ¬x1 ∨ · · · ∨ ¬xn−4 ∨ ¬xn−2 ∨ ¬xn−1)

(xn ∨ ¬x1 ∨ · · · ∨ ¬xn−4 ∨ ¬xn−1 ∨ ¬xn−3)

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 33 / 39

Page 101: 20080316 efficientalgorithms kulikov_lecture17

Идеи доказательства

Идеи доказательства

Выполняющий набор у формулы всего один.Если текущий набор алгоритма находится на расстоянии 2 отвыполняющего, то следующим шагом алгоритм обязательносделает неверный ход.Таким образом, если случайно выбранный набор не попадет вмножество наборов, находящихся на расстоянии не более 1 отвыполняющего, то жадный алгоритм за одно блуждание его ненайдёт.Поскольку всего различных наборов 2n, а упомянутых — всегоn + 1, жадный алгоритм находит выполняющий набор сэкспоненциально маленькой вероятностью.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 34 / 39

Page 102: 20080316 efficientalgorithms kulikov_lecture17

Идеи доказательства

Идеи доказательстваВыполняющий набор у формулы всего один.

Если текущий набор алгоритма находится на расстоянии 2 отвыполняющего, то следующим шагом алгоритм обязательносделает неверный ход.Таким образом, если случайно выбранный набор не попадет вмножество наборов, находящихся на расстоянии не более 1 отвыполняющего, то жадный алгоритм за одно блуждание его ненайдёт.Поскольку всего различных наборов 2n, а упомянутых — всегоn + 1, жадный алгоритм находит выполняющий набор сэкспоненциально маленькой вероятностью.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 34 / 39

Page 103: 20080316 efficientalgorithms kulikov_lecture17

Идеи доказательства

Идеи доказательстваВыполняющий набор у формулы всего один.Если текущий набор алгоритма находится на расстоянии 2 отвыполняющего, то следующим шагом алгоритм обязательносделает неверный ход.

Таким образом, если случайно выбранный набор не попадет вмножество наборов, находящихся на расстоянии не более 1 отвыполняющего, то жадный алгоритм за одно блуждание его ненайдёт.Поскольку всего различных наборов 2n, а упомянутых — всегоn + 1, жадный алгоритм находит выполняющий набор сэкспоненциально маленькой вероятностью.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 34 / 39

Page 104: 20080316 efficientalgorithms kulikov_lecture17

Идеи доказательства

Идеи доказательстваВыполняющий набор у формулы всего один.Если текущий набор алгоритма находится на расстоянии 2 отвыполняющего, то следующим шагом алгоритм обязательносделает неверный ход.Таким образом, если случайно выбранный набор не попадет вмножество наборов, находящихся на расстоянии не более 1 отвыполняющего, то жадный алгоритм за одно блуждание его ненайдёт.

Поскольку всего различных наборов 2n, а упомянутых — всегоn + 1, жадный алгоритм находит выполняющий набор сэкспоненциально маленькой вероятностью.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 34 / 39

Page 105: 20080316 efficientalgorithms kulikov_lecture17

Идеи доказательства

Идеи доказательстваВыполняющий набор у формулы всего один.Если текущий набор алгоритма находится на расстоянии 2 отвыполняющего, то следующим шагом алгоритм обязательносделает неверный ход.Таким образом, если случайно выбранный набор не попадет вмножество наборов, находящихся на расстоянии не более 1 отвыполняющего, то жадный алгоритм за одно блуждание его ненайдёт.Поскольку всего различных наборов 2n, а упомянутых — всегоn + 1, жадный алгоритм находит выполняющий набор сэкспоненциально маленькой вероятностью.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 34 / 39

Page 106: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство

ТеоремаПусть S = {x1 = 1, x2 = 1, . . . , xn = 1} — единственный выполняющийнабор формулы F , I — набор, такой что d(S , I ) = 2. Тогда для любойпеременной v , такой что d(S , I v ) = 1, I v выполняет меньше клозов,чем I .

ДоказательствоПусть I отличается от S значениями переменных v = xi и xj .Ясно, что I v выполняет клоз (x1 ∨ x2), 3n − 3 клоза третьего типаи n − 1 клозов первого типа. Всего 4n − 3 клоза, таким образом.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 35 / 39

Page 107: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство

ТеоремаПусть S = {x1 = 1, x2 = 1, . . . , xn = 1} — единственный выполняющийнабор формулы F , I — набор, такой что d(S , I ) = 2. Тогда для любойпеременной v , такой что d(S , I v ) = 1, I v выполняет меньше клозов,чем I .

Доказательство

Пусть I отличается от S значениями переменных v = xi и xj .Ясно, что I v выполняет клоз (x1 ∨ x2), 3n − 3 клоза третьего типаи n − 1 клозов первого типа. Всего 4n − 3 клоза, таким образом.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 35 / 39

Page 108: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство

ТеоремаПусть S = {x1 = 1, x2 = 1, . . . , xn = 1} — единственный выполняющийнабор формулы F , I — набор, такой что d(S , I ) = 2. Тогда для любойпеременной v , такой что d(S , I v ) = 1, I v выполняет меньше клозов,чем I .

ДоказательствоПусть I отличается от S значениями переменных v = xi и xj .

Ясно, что I v выполняет клоз (x1 ∨ x2), 3n − 3 клоза третьего типаи n − 1 клозов первого типа. Всего 4n − 3 клоза, таким образом.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 35 / 39

Page 109: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство

ТеоремаПусть S = {x1 = 1, x2 = 1, . . . , xn = 1} — единственный выполняющийнабор формулы F , I — набор, такой что d(S , I ) = 2. Тогда для любойпеременной v , такой что d(S , I v ) = 1, I v выполняет меньше клозов,чем I .

ДоказательствоПусть I отличается от S значениями переменных v = xi и xj .Ясно, что I v выполняет клоз (x1 ∨ x2), 3n − 3 клоза третьего типаи n − 1 клозов первого типа. Всего 4n − 3 клоза, таким образом.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 35 / 39

Page 110: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство (продолжение)

Доказательство

Рассмотрим три случая:1 |(i − j) (mod n)| = 1. Тогда I выполняет n − 2 клоза первого типа,

клоз (x1 ∨ x2) и 3n− 1 или 3n клозов третьего типа. Всего не менее4n − 2.

2 |(i − j) (mod n)| = 1, но {i , j} = {1, 2}. Тогда n − 1 клоза первоготипа, клоз (x1 ∨ x2) и 3n − 1 клозов третьего типа. Итого 4n − 1.

3 {i , j} = {1, 2}. n − 1 клоз первого типа и 3n − 1 клоза третьеготипа. 4n − 2 клоза.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 36 / 39

Page 111: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство (продолжение)

ДоказательствоРассмотрим три случая:

1 |(i − j) (mod n)| = 1. Тогда I выполняет n − 2 клоза первого типа,клоз (x1 ∨ x2) и 3n− 1 или 3n клозов третьего типа. Всего не менее4n − 2.

2 |(i − j) (mod n)| = 1, но {i , j} = {1, 2}. Тогда n − 1 клоза первоготипа, клоз (x1 ∨ x2) и 3n − 1 клозов третьего типа. Итого 4n − 1.

3 {i , j} = {1, 2}. n − 1 клоз первого типа и 3n − 1 клоза третьеготипа. 4n − 2 клоза.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 36 / 39

Page 112: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство (продолжение)

ДоказательствоРассмотрим три случая:

1 |(i − j) (mod n)| = 1. Тогда I выполняет n − 2 клоза первого типа,клоз (x1 ∨ x2) и 3n− 1 или 3n клозов третьего типа. Всего не менее4n − 2.

2 |(i − j) (mod n)| = 1, но {i , j} = {1, 2}. Тогда n − 1 клоза первоготипа, клоз (x1 ∨ x2) и 3n − 1 клозов третьего типа. Итого 4n − 1.

3 {i , j} = {1, 2}. n − 1 клоз первого типа и 3n − 1 клоза третьеготипа. 4n − 2 клоза.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 36 / 39

Page 113: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство (продолжение)

ДоказательствоРассмотрим три случая:

1 |(i − j) (mod n)| = 1. Тогда I выполняет n − 2 клоза первого типа,клоз (x1 ∨ x2) и 3n− 1 или 3n клозов третьего типа. Всего не менее4n − 2.

2 |(i − j) (mod n)| = 1, но {i , j} = {1, 2}. Тогда n − 1 клоза первоготипа, клоз (x1 ∨ x2) и 3n − 1 клозов третьего типа. Итого 4n − 1.

3 {i , j} = {1, 2}. n − 1 клоз первого типа и 3n − 1 клоза третьеготипа. 4n − 2 клоза.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 36 / 39

Page 114: 20080316 efficientalgorithms kulikov_lecture17

Формальное доказательство (продолжение)

ДоказательствоРассмотрим три случая:

1 |(i − j) (mod n)| = 1. Тогда I выполняет n − 2 клоза первого типа,клоз (x1 ∨ x2) и 3n− 1 или 3n клозов третьего типа. Всего не менее4n − 2.

2 |(i − j) (mod n)| = 1, но {i , j} = {1, 2}. Тогда n − 1 клоза первоготипа, клоз (x1 ∨ x2) и 3n − 1 клозов третьего типа. Итого 4n − 1.

3 {i , j} = {1, 2}. n − 1 клоз первого типа и 3n − 1 клоза третьеготипа. 4n − 2 клоза.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 36 / 39

Page 115: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

ДоказательствоПусть I отличается от S значениями переменных xi и xj .Выберем v так, чтобы

1 v = x1, x2;2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,

v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 116: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

Доказательство

Пусть I отличается от S значениями переменных xi и xj .Выберем v так, чтобы

1 v = x1, x2;2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,

v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 117: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

ДоказательствоПусть I отличается от S значениями переменных xi и xj .

Выберем v так, чтобы1 v = x1, x2;2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,

v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 118: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

ДоказательствоПусть I отличается от S значениями переменных xi и xj .Выберем v так, чтобы

1 v = x1, x2;2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,

v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 119: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

ДоказательствоПусть I отличается от S значениями переменных xi и xj .Выберем v так, чтобы

1 v = x1, x2;

2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 120: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

ДоказательствоПусть I отличается от S значениями переменных xi и xj .Выберем v так, чтобы

1 v = x1, x2;2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,

v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 121: 20080316 efficientalgorithms kulikov_lecture17

Завершающая теорема

ТеоремаПусть I — набор, такой что d(S , I ) = 2. Тогда найдется переменная v ,такая что d(S , I v ) = 3 и I v выполняет столько же клозов, сколько и I .

ДоказательствоПусть I отличается от S значениями переменных xi и xj .Выберем v так, чтобы

1 v = x1, x2;2 выполнено ровно одно из условий: v = xj+1, v = xj−1, v = xi+1, ,

v = xi−1 (это возможно при n ≥ 6).

Нетрудно видеть, что тогда I v выполняет те же клозы второго итретьего типов, что и I , и столько же клозов первого типа, что иI .

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 37 / 39

Page 122: 20080316 efficientalgorithms kulikov_lecture17

Что мы узнали за сегодня?

Что мы узнали за сегодня?

Две отличительные особенности жадного алгоритма: принципжадного выбора и свойство оптимальности для подзадач.Свойство оптимальности для подзадач выполняется и длядинамического программирования.Жадная стратегия в ряде случае находит решение, которое несильно хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 38 / 39

Page 123: 20080316 efficientalgorithms kulikov_lecture17

Что мы узнали за сегодня?

Что мы узнали за сегодня?Две отличительные особенности жадного алгоритма: принципжадного выбора и свойство оптимальности для подзадач.

Свойство оптимальности для подзадач выполняется и длядинамического программирования.Жадная стратегия в ряде случае находит решение, которое несильно хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 38 / 39

Page 124: 20080316 efficientalgorithms kulikov_lecture17

Что мы узнали за сегодня?

Что мы узнали за сегодня?Две отличительные особенности жадного алгоритма: принципжадного выбора и свойство оптимальности для подзадач.Свойство оптимальности для подзадач выполняется и длядинамического программирования.

Жадная стратегия в ряде случае находит решение, которое несильно хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 38 / 39

Page 125: 20080316 efficientalgorithms kulikov_lecture17

Что мы узнали за сегодня?

Что мы узнали за сегодня?Две отличительные особенности жадного алгоритма: принципжадного выбора и свойство оптимальности для подзадач.Свойство оптимальности для подзадач выполняется и длядинамического программирования.Жадная стратегия в ряде случае находит решение, которое несильно хуже оптимального.

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 38 / 39

Page 126: 20080316 efficientalgorithms kulikov_lecture17

Спасибо за внимание!

А. Куликов (CS клуб при ПОМИ) 17. Жадные алгоритмы 39 / 39