Transcript
Page 1: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

А. Куликов

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

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

Page 2: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 3: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 4: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 5: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 6: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 7: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 8: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 9: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Общая идея

Общая идея

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

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

Page 10: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Общая идея

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

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

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

Page 11: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Общая идея

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

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

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

Page 12: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Общая идея

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

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

Page 13: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 14: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Определение

Даны 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеДаны 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеДаны 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеДаны 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеДаны 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Алгоритм

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 21: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 22: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 23: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 24: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 25: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 26: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

Page 27: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

Page 28: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

Page 29: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 30: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

Замечания

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

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

Page 31: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

Page 32: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 33: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Замечания

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

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

Page 34: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 35: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 36: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 37: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

Рассмотрим строчку длины 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Коды ХаффменаРассмотрим строчку длины 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Коды ХаффменаРассмотрим строчку длины 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Коды ХаффменаРассмотрим строчку длины 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Коды ХаффменаРассмотрим строчку длины 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 43: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 44: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 45: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 46: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 47: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Дерево

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

n∑i=1

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

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

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

Page 49: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

n∑i=1

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

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

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

Page 50: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

n∑i=1

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

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

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

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

Page 51: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

n∑i=1

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

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

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

Page 52: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 53: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 54: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 55: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 56: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Алгоритм

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 58: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Определение

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

⋃S∈ℱ S .

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

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

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

Page 59: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

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

Page 60: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

⋃S∈ℱ S .

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

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

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

Page 61: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

⋃S∈ℱ S .

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

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

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

Page 62: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

⋃S∈ℱ S .

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

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

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

Page 63: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 64: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 65: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 66: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 67: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 68: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 69: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Анализ

Анализ

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Анализ

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Анализ

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Анализ

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 74: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 75: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

Page 76: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

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

Page 77: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 78: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

Рассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

Идея конструкцииРассматриваем двудольный граф на долях 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

Page 88: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

План лекции

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

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

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

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

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

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

Page 89: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Формула в КНФ

Определение

Пропозициональной или Булевой (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Формула в КНФ

ОпределениеПропозициональной или Булевой (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Формула в КНФ

ОпределениеПропозициональной или Булевой (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Формула в КНФ

ОпределениеПропозициональной или Булевой (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Формула в КНФ

ОпределениеПропозициональной или Булевой (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

Формула в КНФ

ОпределениеПропозициональной или Булевой (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеЗадача пропозициональной выполнимости (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеЗадача пропозициональной выполнимости (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеЗадача пропозициональной выполнимости (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ОпределениеЗадача пропозициональной выполнимости (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

первый тип клозов (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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 102: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 103: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 104: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 105: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 106: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

Рассмотрим три случая: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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

ТеоремаПусть 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: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 123: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 124: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

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

Page 125: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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

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

Page 126: Эффективные алгоритмы, осень 2007: Жадные алгоритмы

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

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


Recommended