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

Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Embed Size (px)

Citation preview

Page 1: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

с/к “Эффективные алгоритмы”Лекция 4: Приближенные алгоритмы

А. Куликов

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

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

Page 2: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

План лекции

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

2 Задача о минимальном множестве представителей

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

Page 3: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

План лекции

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

2 Задача о минимальном множестве представителей

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

Page 4: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

План лекции

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

2 Задача о минимальном множестве представителей

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

Page 5: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу такого минимального множества еговершин, что для любого ребра графа хотя бы один из его концовпринадлежит этому множеству.

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

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

Page 6: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу такого минимального множества еговершин, что для любого ребра графа хотя бы один из его концовпринадлежит этому множеству.

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

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

Page 7: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу такого минимального множества еговершин, что для любого ребра графа хотя бы один из его концовпринадлежит этому множеству.

Мы уже знаем очень простой детерминированный2-приближенный алгоритм для задачи о вершинном покрытии.

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

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

Page 8: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу такого минимального множества еговершин, что для любого ребра графа хотя бы один из его концовпринадлежит этому множеству.

Мы уже знаем очень простой детерминированный2-приближенный алгоритм для задачи о вершинном покрытии.Сейчас мы приведем вероятностный 2-приближенный алгоритм.

Говоря, что вероятностный алгоритм является 2-приближенным,мы имеем в виду, что математическое ожидание выдаваемого имрезультата не более чем в два раза хуже оптимального.

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

Page 9: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеЗадача о вершинном покрытии (vertex cover problem) заключается внахождении по данному графу такого минимального множества еговершин, что для любого ребра графа хотя бы один из его концовпринадлежит этому множеству.

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

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

Page 10: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмRand-Approx-Vertex-Cover(G )

C = ∅пока есть непокрытое ребро, выбрать случайно один из его концови добавить его к множеству Cвернуть C

ЛеммаАлгоритм Rand-Approx-Vertex-Cover является 2-приближенным.

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

Page 11: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмRand-Approx-Vertex-Cover(G )

C = ∅

пока есть непокрытое ребро, выбрать случайно один из его концови добавить его к множеству Cвернуть C

ЛеммаАлгоритм Rand-Approx-Vertex-Cover является 2-приближенным.

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

Page 12: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмRand-Approx-Vertex-Cover(G )

C = ∅пока есть непокрытое ребро, выбрать случайно один из его концови добавить его к множеству C

вернуть C

ЛеммаАлгоритм Rand-Approx-Vertex-Cover является 2-приближенным.

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

Page 13: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмRand-Approx-Vertex-Cover(G )

C = ∅пока есть непокрытое ребро, выбрать случайно один из его концови добавить его к множеству Cвернуть C

ЛеммаАлгоритм Rand-Approx-Vertex-Cover является 2-приближенным.

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

Page 14: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмRand-Approx-Vertex-Cover(G )

C = ∅пока есть непокрытое ребро, выбрать случайно один из его концови добавить его к множеству Cвернуть C

ЛеммаАлгоритм Rand-Approx-Vertex-Cover является 2-приближенным.

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

Page 15: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

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

Пусть Copt — минимальное вершинное покрытие.Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.Назовем такой шаг успешным.Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 16: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоПусть Copt — минимальное вершинное покрытие.

Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.Назовем такой шаг успешным.Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 17: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоПусть Copt — минимальное вершинное покрытие.Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.

Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.Назовем такой шаг успешным.Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 18: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоПусть Copt — минимальное вершинное покрытие.Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.

Назовем такой шаг успешным.Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 19: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоПусть Copt — минимальное вершинное покрытие.Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.Назовем такой шаг успешным.

Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 20: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоПусть Copt — минимальное вершинное покрытие.Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.Назовем такой шаг успешным.Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.

Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 21: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоПусть Copt — минимальное вершинное покрытие.Хотя бы один конец каждого ребра, рассмотренного алгоритмом,содержится в Copt.Значит, на каждом шаге алгоритм добавляет в C вершину из Coptс вероятностью хотя бы 1/2.Назовем такой шаг успешным.Ясно, что алгоритм может сделать не более |Copt| успешныхшагов.Значит, мат. ожидание общего количества шагов (а это есть |C |)не превосходит 2|Copt|.

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

Page 22: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

Определение

Дан граф G = (V , E ), в котором каждой вершине v присвоеннекоторый вес w(v).Задача о взвешенном вершинном покрытии заключается внахождении вершинного покрытия минимального веса.

ЗамечаниеМожно построить 2-приближенный алгоритм для задачи овзвешенном вершинном покрытии, модифицировав предыдущийалгоритм следующим образом: если ребро (u, v) еще не покрыто,

то с вероятностью 1w(u)

(︁1

w(u) + 1w(v)

)︁−1добавляем в покрытие

вершину u, а с вероятностью 1w(v)

(︁1

w(u) + 1w(v)

)︁−1— вершину v .

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

Page 23: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеДан граф G = (V , E ), в котором каждой вершине v присвоеннекоторый вес w(v).

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

ЗамечаниеМожно построить 2-приближенный алгоритм для задачи овзвешенном вершинном покрытии, модифицировав предыдущийалгоритм следующим образом: если ребро (u, v) еще не покрыто,

то с вероятностью 1w(u)

(︁1

w(u) + 1w(v)

)︁−1добавляем в покрытие

вершину u, а с вероятностью 1w(v)

(︁1

w(u) + 1w(v)

)︁−1— вершину v .

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

Page 24: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеДан граф G = (V , E ), в котором каждой вершине v присвоеннекоторый вес w(v).Задача о взвешенном вершинном покрытии заключается внахождении вершинного покрытия минимального веса.

ЗамечаниеМожно построить 2-приближенный алгоритм для задачи овзвешенном вершинном покрытии, модифицировав предыдущийалгоритм следующим образом: если ребро (u, v) еще не покрыто,

то с вероятностью 1w(u)

(︁1

w(u) + 1w(v)

)︁−1добавляем в покрытие

вершину u, а с вероятностью 1w(v)

(︁1

w(u) + 1w(v)

)︁−1— вершину v .

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

Page 25: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеДан граф G = (V , E ), в котором каждой вершине v присвоеннекоторый вес w(v).Задача о взвешенном вершинном покрытии заключается внахождении вершинного покрытия минимального веса.

Замечание

Можно построить 2-приближенный алгоритм для задачи овзвешенном вершинном покрытии, модифицировав предыдущийалгоритм следующим образом: если ребро (u, v) еще не покрыто,

то с вероятностью 1w(u)

(︁1

w(u) + 1w(v)

)︁−1добавляем в покрытие

вершину u, а с вероятностью 1w(v)

(︁1

w(u) + 1w(v)

)︁−1— вершину v .

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

Page 26: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеДан граф G = (V , E ), в котором каждой вершине v присвоеннекоторый вес w(v).Задача о взвешенном вершинном покрытии заключается внахождении вершинного покрытия минимального веса.

ЗамечаниеМожно построить 2-приближенный алгоритм для задачи овзвешенном вершинном покрытии, модифицировав предыдущийалгоритм следующим образом: если ребро (u, v) еще не покрыто,

то с вероятностью 1w(u)

(︁1

w(u) + 1w(v)

)︁−1добавляем в покрытие

вершину u, а с вероятностью 1w(v)

(︁1

w(u) + 1w(v)

)︁−1— вершину v .

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

Page 27: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Формулировка в виде задачи целочисленного линейногопрограммирования

Формулировка в виде задачи целочисленного линейногопрограммирования

min∑︁v∈V

w(v)x(v)

x(v1) + x(v2) ≥ 1, (v1, v2) ∈ E

x(v) ∈ {0, 1}, v ∈ V

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

Page 28: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритм

Заменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.Пусть {x̂(v)}v∈V — найденное решение.Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.w(C ) =

∑︀v∈V w(v)x(v) ≤ 2

∑︀v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 29: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмЗаменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.

Пусть {x̂(v)}v∈V — найденное решение.Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.w(C ) =

∑︀v∈V w(v)x(v) ≤ 2

∑︀v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 30: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмЗаменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.Пусть {x̂(v)}v∈V — найденное решение.

Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.w(C ) =

∑︀v∈V w(v)x(v) ≤ 2

∑︀v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 31: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмЗаменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.Пусть {x̂(v)}v∈V — найденное решение.Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.w(C ) =

∑︀v∈V w(v)x(v) ≤ 2

∑︀v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 32: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмЗаменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.Пусть {x̂(v)}v∈V — найденное решение.Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.

Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.w(C ) =

∑︀v∈V w(v)x(v) ≤ 2

∑︀v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 33: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмЗаменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.Пусть {x̂(v)}v∈V — найденное решение.Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.

w(C ) =∑︀

v∈V w(v)x(v) ≤ 2∑︀

v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 34: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

АлгоритмЗаменим условие x(v) ∈ {0, 1} на x(v) ≥ 0 и решим полученнуюзадачу.Пусть {x̂(v)}v∈V — найденное решение.Зададим тогда такой набор:

x(v) =

{︃1, если x̂(v) ≥ 1/20, в противном случае

Положим C = {v ∈ V |x(v) = 1}.Найденное решение является допустимым (то есть покрытием),поскольку для каждого ребра (u, v) выполнено неравенствоx̂(u) + x̂(v) ≥ 1, а значит, x̂(u) ≥ 1/2 или x̂(v) ≥ 1/2.w(C ) =

∑︀v∈V w(v)x(v) ≤ 2

∑︀v∈V w(v)x̂(v) ≤ 2w(Copt).

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

Page 35: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}I w(v1) = w(v1)− 𝜖I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 36: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅

пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}I w(v1) = w(v1)− 𝜖I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 37: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}I w(v1) = w(v1)− 𝜖I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 38: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}

I w(v1) = w(v1)− 𝜖I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 39: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}I w(v1) = w(v1)− 𝜖

I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 40: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}I w(v1) = w(v1)− 𝜖I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 41: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один алгоритм

АлгоритмWeighted-Vertex-Cover-1(G , w)

C = ∅пока есть непокрытое ребро (v1, v2), для которого w(v1) > 0 иw(v2) > 0, повторять:

I 𝜖 = min{w(v1), w(v2)}I w(v1) = w(v1)− 𝜖I w(v2) = w(v2)− 𝜖

вернуть множество всех вершин веса 0

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

Page 42: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Переформулировка

АлгоритмWeighted-Vertex-Cover-2(G , w)

если для каждого ребра (v1, v2) ∈ E либо w(v1) = 0, либоw(v2) = 0, вернуть множество вершин веса 0в противном случае выберем ребро, для которого w(v1) > 0 иw(v2) > 0определим весовую функцию 𝛿 так:

𝛿(v) =

{︃min{w(v1), w(v2)}, если v ∈ {v1, v2}0, в противном случае

вернуть Weighted-Vertex-Cover-2(G , w − 𝛿)

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

Page 43: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Переформулировка

АлгоритмWeighted-Vertex-Cover-2(G , w)

если для каждого ребра (v1, v2) ∈ E либо w(v1) = 0, либоw(v2) = 0, вернуть множество вершин веса 0

в противном случае выберем ребро, для которого w(v1) > 0 иw(v2) > 0определим весовую функцию 𝛿 так:

𝛿(v) =

{︃min{w(v1), w(v2)}, если v ∈ {v1, v2}0, в противном случае

вернуть Weighted-Vertex-Cover-2(G , w − 𝛿)

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

Page 44: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Переформулировка

АлгоритмWeighted-Vertex-Cover-2(G , w)

если для каждого ребра (v1, v2) ∈ E либо w(v1) = 0, либоw(v2) = 0, вернуть множество вершин веса 0в противном случае выберем ребро, для которого w(v1) > 0 иw(v2) > 0

определим весовую функцию 𝛿 так:

𝛿(v) =

{︃min{w(v1), w(v2)}, если v ∈ {v1, v2}0, в противном случае

вернуть Weighted-Vertex-Cover-2(G , w − 𝛿)

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

Page 45: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Переформулировка

АлгоритмWeighted-Vertex-Cover-2(G , w)

если для каждого ребра (v1, v2) ∈ E либо w(v1) = 0, либоw(v2) = 0, вернуть множество вершин веса 0в противном случае выберем ребро, для которого w(v1) > 0 иw(v2) > 0определим весовую функцию 𝛿 так:

𝛿(v) =

{︃min{w(v1), w(v2)}, если v ∈ {v1, v2}0, в противном случае

вернуть Weighted-Vertex-Cover-2(G , w − 𝛿)

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

Page 46: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Переформулировка

АлгоритмWeighted-Vertex-Cover-2(G , w)

если для каждого ребра (v1, v2) ∈ E либо w(v1) = 0, либоw(v2) = 0, вернуть множество вершин веса 0в противном случае выберем ребро, для которого w(v1) > 0 иw(v2) > 0определим весовую функцию 𝛿 так:

𝛿(v) =

{︃min{w(v1), w(v2)}, если v ∈ {v1, v2}0, в противном случае

вернуть Weighted-Vertex-Cover-2(G , w − 𝛿)

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

Page 47: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

ДоказательствоОбозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 48: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

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

Обозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 49: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

ДоказательствоОбозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 50: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

ДоказательствоОбозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 51: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

ДоказательствоОбозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 52: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

ДоказательствоОбозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).

Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 53: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ЛеммаАлгоритм Weighted-Vertex-Cover-2 является 2-приближенным.

ДоказательствоОбозначим через OPT(w), OPT(w − 𝛿), OPT(𝛿) веса оптимальныхпокрытий с весовыми функциями w , w − 𝛿, 𝛿, соответственно, ачерез Copt, Cw−𝛿

opt , C 𝛿opt — сами оптимальные покрытия.

w(Copt) = (w − 𝛿)(Copt) + 𝛿(Copt) ≥ (w − 𝛿)(Cw−𝛿optw−𝛿) + 𝛿(C 𝛿

opt)

OPT(w) ≥ OPT(w − 𝛿) + OPT(𝛿)

Доказываем утверждение по индукцией по∑︀

v∈V w(v).Если есть вершинное покрытие веса 0, то алгоритм обязательноего найдет.

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

Page 54: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

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

В противном случае алгоритм вызывает себя рекурсивно длявесовой функции w − 𝛿.По индукционному предположению мы знаем, что(w − 𝛿)(C ) ≤ 2OPT(w − 𝛿).Также 𝛿(C ) ≤ 2 min{w(v1), w(v2)} ≤ 2OPT(𝛿).Таким образом, w(C ) ≤ 2(OPT(w − 𝛿) + OPT(𝛿)) ≤ 2OPT (w).

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

Page 55: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоВ противном случае алгоритм вызывает себя рекурсивно длявесовой функции w − 𝛿.

По индукционному предположению мы знаем, что(w − 𝛿)(C ) ≤ 2OPT(w − 𝛿).Также 𝛿(C ) ≤ 2 min{w(v1), w(v2)} ≤ 2OPT(𝛿).Таким образом, w(C ) ≤ 2(OPT(w − 𝛿) + OPT(𝛿)) ≤ 2OPT (w).

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

Page 56: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоВ противном случае алгоритм вызывает себя рекурсивно длявесовой функции w − 𝛿.По индукционному предположению мы знаем, что(w − 𝛿)(C ) ≤ 2OPT(w − 𝛿).

Также 𝛿(C ) ≤ 2 min{w(v1), w(v2)} ≤ 2OPT(𝛿).Таким образом, w(C ) ≤ 2(OPT(w − 𝛿) + OPT(𝛿)) ≤ 2OPT (w).

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

Page 57: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоВ противном случае алгоритм вызывает себя рекурсивно длявесовой функции w − 𝛿.По индукционному предположению мы знаем, что(w − 𝛿)(C ) ≤ 2OPT(w − 𝛿).Также 𝛿(C ) ≤ 2 min{w(v1), w(v2)} ≤ 2OPT(𝛿).

Таким образом, w(C ) ≤ 2(OPT(w − 𝛿) + OPT(𝛿)) ≤ 2OPT (w).

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

Page 58: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ДоказательствоВ противном случае алгоритм вызывает себя рекурсивно длявесовой функции w − 𝛿.По индукционному предположению мы знаем, что(w − 𝛿)(C ) ≤ 2OPT(w − 𝛿).Также 𝛿(C ) ≤ 2 min{w(v1), w(v2)} ≤ 2OPT(𝛿).Таким образом, w(C ) ≤ 2(OPT(w − 𝛿) + OPT(𝛿)) ≤ 2OPT (w).

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

Page 59: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Еще один метод

Исходная

min∑︁v∈V

w(v)x(v)

x(v1) + x(v2) ≥ 1, (v1, v2) ∈ E

x(v) ≥ 0, v ∈ V

Двойственная

max∑︁e∈E

y(e)

∑︁e:v∈e

y(e) ≤ w(v), v ∈ V

y(e) ≥ 0, e ∈ E

Из двойственности мы знаем, что w(Copt) ≥∑︀

e∈E y(e), для любогодопустимого решения y .

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

Page 60: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритм

положить y(e) = 0 для всех e ∈ Eпока есть ребро e = (v1, v2), такое что y(e) можно увеличить,увеличить y(e), обратив хотя бы одно их ограничений(∑︀

e:v∈e ≤ w(v)) в равенствовернуть множество C , состоящее из всех вершин, для которыхсоотвеьствующие ограничения обращены в равенства

Анализясно, что найденное множество покрытием являетсяw(C ) =

∑︀v∈C w(v) =

∑︀v∈C

∑︀e:v∈e y(e) ≤ 2

∑︀e∈E y(e) ≤

2w(Copt)

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

Page 61: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритмположить y(e) = 0 для всех e ∈ E

пока есть ребро e = (v1, v2), такое что y(e) можно увеличить,увеличить y(e), обратив хотя бы одно их ограничений(∑︀

e:v∈e ≤ w(v)) в равенствовернуть множество C , состоящее из всех вершин, для которыхсоотвеьствующие ограничения обращены в равенства

Анализясно, что найденное множество покрытием являетсяw(C ) =

∑︀v∈C w(v) =

∑︀v∈C

∑︀e:v∈e y(e) ≤ 2

∑︀e∈E y(e) ≤

2w(Copt)

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

Page 62: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритмположить y(e) = 0 для всех e ∈ Eпока есть ребро e = (v1, v2), такое что y(e) можно увеличить,увеличить y(e), обратив хотя бы одно их ограничений(∑︀

e:v∈e ≤ w(v)) в равенство

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

Анализясно, что найденное множество покрытием являетсяw(C ) =

∑︀v∈C w(v) =

∑︀v∈C

∑︀e:v∈e y(e) ≤ 2

∑︀e∈E y(e) ≤

2w(Copt)

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

Page 63: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритмположить y(e) = 0 для всех e ∈ Eпока есть ребро e = (v1, v2), такое что y(e) можно увеличить,увеличить y(e), обратив хотя бы одно их ограничений(∑︀

e:v∈e ≤ w(v)) в равенствовернуть множество C , состоящее из всех вершин, для которыхсоотвеьствующие ограничения обращены в равенства

Анализ

ясно, что найденное множество покрытием являетсяw(C ) =

∑︀v∈C w(v) =

∑︀v∈C

∑︀e:v∈e y(e) ≤ 2

∑︀e∈E y(e) ≤

2w(Copt)

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

Page 64: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритмположить y(e) = 0 для всех e ∈ Eпока есть ребро e = (v1, v2), такое что y(e) можно увеличить,увеличить y(e), обратив хотя бы одно их ограничений(∑︀

e:v∈e ≤ w(v)) в равенствовернуть множество C , состоящее из всех вершин, для которыхсоотвеьствующие ограничения обращены в равенства

Анализясно, что найденное множество покрытием является

w(C ) =∑︀

v∈C w(v) =∑︀

v∈C∑︀

e:v∈e y(e) ≤ 2∑︀

e∈E y(e) ≤2w(Copt)

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

Page 65: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Алгоритм

Алгоритмположить y(e) = 0 для всех e ∈ Eпока есть ребро e = (v1, v2), такое что y(e) можно увеличить,увеличить y(e), обратив хотя бы одно их ограничений(∑︀

e:v∈e ≤ w(v)) в равенствовернуть множество C , состоящее из всех вершин, для которыхсоотвеьствующие ограничения обращены в равенства

Анализясно, что найденное множество покрытием являетсяw(C ) =

∑︀v∈C w(v) =

∑︀v∈C

∑︀e:v∈e y(e) ≤ 2

∑︀e∈E y(e) ≤

2w(Copt)

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

Page 66: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

План лекции

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

2 Задача о минимальном множестве представителей

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

Page 67: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Задача о минимальном множестве представителей

ОпределениеЗадача о минимальном множестве представителей (hitting set problem)заключается в нахождении по данному множеству X = {x1, . . . , xm} имножеству его подмножеств S1, . . . , Sn ⊆ X такого множества C ⊆ X ,что C ∩ Si ̸= ∅ для любого i .

NP-трудностьNP-трудность легко доказывается сведением от вершинного покрытия.

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

Page 68: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Задача о минимальном множестве представителей

ОпределениеЗадача о минимальном множестве представителей (hitting set problem)заключается в нахождении по данному множеству X = {x1, . . . , xm} имножеству его подмножеств S1, . . . , Sn ⊆ X такого множества C ⊆ X ,что C ∩ Si ̸= ∅ для любого i .

NP-трудностьNP-трудность легко доказывается сведением от вершинного покрытия.

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

Page 69: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

ОпределениеЗадача о покрытии множествами (set cover problem) заключается внахождении по данному универсальному множеству U = {u1, . . . , un} имножеству его подмножеств S1, . . . , Sm, в объединении покрывающихвсе множество U, минимального набора подмножеств, покрывающеговсе множество U и имеющего минимальный возможный вес.

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

Page 70: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Двойственная задача

Двойственность

По входу задачи о минимальном множестве представителейпостроим следующий двудольный граф:

I слева будут вершины x1, . . . , xm, справа — S1, . . . ,Sn;I вершину xi соединяем ребром с вершиной Sj , если xi ∈ Sj .

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

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

Page 71: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Двойственная задача

ДвойственностьПо входу задачи о минимальном множестве представителейпостроим следующий двудольный граф:

I слева будут вершины x1, . . . , xm, справа — S1, . . . ,Sn;I вершину xi соединяем ребром с вершиной Sj , если xi ∈ Sj .

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

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

Page 72: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Двойственная задача

ДвойственностьПо входу задачи о минимальном множестве представителейпостроим следующий двудольный граф:

I слева будут вершины x1, . . . , xm, справа — S1, . . . ,Sn;

I вершину xi соединяем ребром с вершиной Sj , если xi ∈ Sj .

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

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

Page 73: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Двойственная задача

ДвойственностьПо входу задачи о минимальном множестве представителейпостроим следующий двудольный граф:

I слева будут вершины x1, . . . , xm, справа — S1, . . . ,Sn;I вершину xi соединяем ребром с вершиной Sj , если xi ∈ Sj .

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

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

Page 74: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Двойственная задача

ДвойственностьПо входу задачи о минимальном множестве представителейпостроим следующий двудольный граф:

I слева будут вершины x1, . . . , xm, справа — S1, . . . ,Sn;I вершину xi соединяем ребром с вершиной Sj , если xi ∈ Sj .

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

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

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

Page 75: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Двойственная задача

ДвойственностьПо входу задачи о минимальном множестве представителейпостроим следующий двудольный граф:

I слева будут вершины x1, . . . , xm, справа — S1, . . . ,Sn;I вершину xi соединяем ребром с вершиной Sj , если xi ∈ Sj .

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

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

Page 76: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Задача линейного программирования

Задача линейного программирования

Задача о минимальном множестве представителей легкозаписывается в виде задачи целочисленного линейногопрограммирования.Пусть xi = 1, если xi ∈ C , и xi = 0 в противном случае.Тогда задача запишется так:

minm∑︁

i=1

xi

∑︁i∈Sj

xi ≥ 1, 1 ≤ j ≤ n

xi ∈ {0, 1}, 1 ≤ i ≤ m

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

Page 77: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Задача линейного программирования

Задача линейного программированияЗадача о минимальном множестве представителей легкозаписывается в виде задачи целочисленного линейногопрограммирования.

Пусть xi = 1, если xi ∈ C , и xi = 0 в противном случае.Тогда задача запишется так:

minm∑︁

i=1

xi

∑︁i∈Sj

xi ≥ 1, 1 ≤ j ≤ n

xi ∈ {0, 1}, 1 ≤ i ≤ m

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

Page 78: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Задача линейного программирования

Задача линейного программированияЗадача о минимальном множестве представителей легкозаписывается в виде задачи целочисленного линейногопрограммирования.Пусть xi = 1, если xi ∈ C , и xi = 0 в противном случае.

Тогда задача запишется так:

minm∑︁

i=1

xi

∑︁i∈Sj

xi ≥ 1, 1 ≤ j ≤ n

xi ∈ {0, 1}, 1 ≤ i ≤ m

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

Page 79: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Задача линейного программирования

Задача линейного программированияЗадача о минимальном множестве представителей легкозаписывается в виде задачи целочисленного линейногопрограммирования.Пусть xi = 1, если xi ∈ C , и xi = 0 в противном случае.Тогда задача запишется так:

minm∑︁

i=1

xi

∑︁i∈Sj

xi ≥ 1, 1 ≤ j ≤ n

xi ∈ {0, 1}, 1 ≤ i ≤ m

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

Page 80: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

Релаксация

Итак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.Пусть x̂1, . . . , x̂m — найденное оптимальное решение.Ясно, что

∑︀mi=1 x̂i является нижней оценкой на размер

минимального множества представителей Copt.Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .Положим C = {i |xi = 1}.

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

Page 81: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

РелаксацияИтак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.

Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.Пусть x̂1, . . . , x̂m — найденное оптимальное решение.Ясно, что

∑︀mi=1 x̂i является нижней оценкой на размер

минимального множества представителей Copt.Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .Положим C = {i |xi = 1}.

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

Page 82: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

РелаксацияИтак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.

Пусть x̂1, . . . , x̂m — найденное оптимальное решение.Ясно, что

∑︀mi=1 x̂i является нижней оценкой на размер

минимального множества представителей Copt.Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .Положим C = {i |xi = 1}.

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

Page 83: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

РелаксацияИтак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.Пусть x̂1, . . . , x̂m — найденное оптимальное решение.

Ясно, что∑︀m

i=1 x̂i является нижней оценкой на размерминимального множества представителей Copt.Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .Положим C = {i |xi = 1}.

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

Page 84: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

РелаксацияИтак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.Пусть x̂1, . . . , x̂m — найденное оптимальное решение.Ясно, что

∑︀mi=1 x̂i является нижней оценкой на размер

минимального множества представителей Copt.

Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .Положим C = {i |xi = 1}.

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

Page 85: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

РелаксацияИтак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.Пусть x̂1, . . . , x̂m — найденное оптимальное решение.Ясно, что

∑︀mi=1 x̂i является нижней оценкой на размер

минимального множества представителей Copt.Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .

Положим C = {i |xi = 1}.

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

Page 86: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Релаксация

РелаксацияИтак, если x1, . . . , xn — оптимальное решение для полученнойзадачи, то C = {i |xi = 1} является минимальным множествомпредставителей.Заменим условие xi ∈ {0, 1} на условие 0 ≤ xi ≤ 1 и решимполученную задачу линейного программирования.Пусть x̂1, . . . , x̂m — найденное оптимальное решение.Ясно, что

∑︀mi=1 x̂i является нижней оценкой на размер

минимального множества представителей Copt.Рассмотрим теперь такой целочисленный набор: присваиваем xiзначение 1 с вероятностью x̂i .Положим C = {i |xi = 1}.

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

Page 87: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Оценка вероятности

Оценка вероятности

Конечно, C может и не быть допустимым решением (то есть несодержать ни одного представителя какого-то множества Sj).Мы хотим оценить сверху вероятность того, что C ∩ Sj = ∅.Пусть |Sj | = k .Мы знаем, что

∑︀i∈Sj

x̂i ≥ 1.

Pr(C∩Sj = ∅) =∏︁i∈Sj

(1−x̂i ) ≤

(︃∑︀i∈Sj

(1− x̂i )

k

)︃k

≤ (1−1/k)k < e−1

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

Page 88: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Оценка вероятности

Оценка вероятностиКонечно, C может и не быть допустимым решением (то есть несодержать ни одного представителя какого-то множества Sj).

Мы хотим оценить сверху вероятность того, что C ∩ Sj = ∅.Пусть |Sj | = k .Мы знаем, что

∑︀i∈Sj

x̂i ≥ 1.

Pr(C∩Sj = ∅) =∏︁i∈Sj

(1−x̂i ) ≤

(︃∑︀i∈Sj

(1− x̂i )

k

)︃k

≤ (1−1/k)k < e−1

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

Page 89: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Оценка вероятности

Оценка вероятностиКонечно, C может и не быть допустимым решением (то есть несодержать ни одного представителя какого-то множества Sj).Мы хотим оценить сверху вероятность того, что C ∩ Sj = ∅.

Пусть |Sj | = k .Мы знаем, что

∑︀i∈Sj

x̂i ≥ 1.

Pr(C∩Sj = ∅) =∏︁i∈Sj

(1−x̂i ) ≤

(︃∑︀i∈Sj

(1− x̂i )

k

)︃k

≤ (1−1/k)k < e−1

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

Page 90: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Оценка вероятности

Оценка вероятностиКонечно, C может и не быть допустимым решением (то есть несодержать ни одного представителя какого-то множества Sj).Мы хотим оценить сверху вероятность того, что C ∩ Sj = ∅.Пусть |Sj | = k .

Мы знаем, что∑︀

i∈Sjx̂i ≥ 1.

Pr(C∩Sj = ∅) =∏︁i∈Sj

(1−x̂i ) ≤

(︃∑︀i∈Sj

(1− x̂i )

k

)︃k

≤ (1−1/k)k < e−1

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

Page 91: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Оценка вероятности

Оценка вероятностиКонечно, C может и не быть допустимым решением (то есть несодержать ни одного представителя какого-то множества Sj).Мы хотим оценить сверху вероятность того, что C ∩ Sj = ∅.Пусть |Sj | = k .Мы знаем, что

∑︀i∈Sj

x̂i ≥ 1.

Pr(C∩Sj = ∅) =∏︁i∈Sj

(1−x̂i ) ≤

(︃∑︀i∈Sj

(1− x̂i )

k

)︃k

≤ (1−1/k)k < e−1

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

Page 92: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Оценка вероятности

Оценка вероятностиКонечно, C может и не быть допустимым решением (то есть несодержать ни одного представителя какого-то множества Sj).Мы хотим оценить сверху вероятность того, что C ∩ Sj = ∅.Пусть |Sj | = k .Мы знаем, что

∑︀i∈Sj

x̂i ≥ 1.

Pr(C∩Sj = ∅) =∏︁i∈Sj

(1−x̂i ) ≤

(︃∑︀i∈Sj

(1− x̂i )

k

)︃k

≤ (1−1/k)k < e−1

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

Page 93: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Повторение эксперимента

Повторение эксперимента

Если взять объединение t = log(2n) таких множеств C , товероятность того, что C не будет содержать ни одногопредставителя множества Sj , будет не более (e−1)log(2n) = 1/2n.Значит, такое объединение с вероятностью хотя бы 1/2 являетсямножеством представителей.Выбор t = log(2n) таких множеств C равносилен присваиванию xiзначения 1 с вероятностью 1− (1− x̂i )

t .Мат. ожидание размера C равно

∑︀mi=1 x̂i ≤ Copt.

Таким образом, мат. ожидание размера построенного множествапредставителей не более чем в log n раз хуже оптимального.

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

Page 94: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Повторение эксперимента

Повторение экспериментаЕсли взять объединение t = log(2n) таких множеств C , товероятность того, что C не будет содержать ни одногопредставителя множества Sj , будет не более (e−1)log(2n) = 1/2n.

Значит, такое объединение с вероятностью хотя бы 1/2 являетсямножеством представителей.Выбор t = log(2n) таких множеств C равносилен присваиванию xiзначения 1 с вероятностью 1− (1− x̂i )

t .Мат. ожидание размера C равно

∑︀mi=1 x̂i ≤ Copt.

Таким образом, мат. ожидание размера построенного множествапредставителей не более чем в log n раз хуже оптимального.

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

Page 95: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Повторение эксперимента

Повторение экспериментаЕсли взять объединение t = log(2n) таких множеств C , товероятность того, что C не будет содержать ни одногопредставителя множества Sj , будет не более (e−1)log(2n) = 1/2n.Значит, такое объединение с вероятностью хотя бы 1/2 являетсямножеством представителей.

Выбор t = log(2n) таких множеств C равносилен присваиванию xiзначения 1 с вероятностью 1− (1− x̂i )

t .Мат. ожидание размера C равно

∑︀mi=1 x̂i ≤ Copt.

Таким образом, мат. ожидание размера построенного множествапредставителей не более чем в log n раз хуже оптимального.

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

Page 96: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Повторение эксперимента

Повторение экспериментаЕсли взять объединение t = log(2n) таких множеств C , товероятность того, что C не будет содержать ни одногопредставителя множества Sj , будет не более (e−1)log(2n) = 1/2n.Значит, такое объединение с вероятностью хотя бы 1/2 являетсямножеством представителей.Выбор t = log(2n) таких множеств C равносилен присваиванию xiзначения 1 с вероятностью 1− (1− x̂i )

t .

Мат. ожидание размера C равно∑︀m

i=1 x̂i ≤ Copt.Таким образом, мат. ожидание размера построенного множествапредставителей не более чем в log n раз хуже оптимального.

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

Page 97: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Повторение эксперимента

Повторение экспериментаЕсли взять объединение t = log(2n) таких множеств C , товероятность того, что C не будет содержать ни одногопредставителя множества Sj , будет не более (e−1)log(2n) = 1/2n.Значит, такое объединение с вероятностью хотя бы 1/2 являетсямножеством представителей.Выбор t = log(2n) таких множеств C равносилен присваиванию xiзначения 1 с вероятностью 1− (1− x̂i )

t .Мат. ожидание размера C равно

∑︀mi=1 x̂i ≤ Copt.

Таким образом, мат. ожидание размера построенного множествапредставителей не более чем в log n раз хуже оптимального.

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

Page 98: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

Повторение эксперимента

Повторение экспериментаЕсли взять объединение t = log(2n) таких множеств C , товероятность того, что C не будет содержать ни одногопредставителя множества Sj , будет не более (e−1)log(2n) = 1/2n.Значит, такое объединение с вероятностью хотя бы 1/2 являетсямножеством представителей.Выбор t = log(2n) таких множеств C равносилен присваиванию xiзначения 1 с вероятностью 1− (1− x̂i )

t .Мат. ожидание размера C равно

∑︀mi=1 x̂i ≤ Copt.

Таким образом, мат. ожидание размера построенного множествапредставителей не более чем в log n раз хуже оптимального.

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

Page 99: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

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

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

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

Page 100: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

Что мы узнали за сегодня?Несколько 2-приближенных алгоритмов для задачи о взвешенномвершинном покрытии.

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

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

Page 101: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

Что мы узнали за сегодня?Несколько 2-приближенных алгоритмов для задачи о взвешенномвершинном покрытии.log n-приближенный алгоритм для задачи о минимальноммножестве представителей.

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

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

Page 102: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

Что мы узнали за сегодня?Несколько 2-приближенных алгоритмов для задачи о взвешенномвершинном покрытии.log n-приближенный алгоритм для задачи о минимальноммножестве представителей.Некоторые из приближенных алгоритмов являютсявероятностными. В таком случае оценивается отношение мат.ожидания результата к оптимальному результату.

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

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

Page 103: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

Что мы узнали за сегодня?Несколько 2-приближенных алгоритмов для задачи о взвешенномвершинном покрытии.log n-приближенный алгоритм для задачи о минимальноммножестве представителей.Некоторые из приближенных алгоритмов являютсявероятностными. В таком случае оценивается отношение мат.ожидания результата к оптимальному результату.Рассмотренные алгоритмы находят вещественное решениесоответствующей задачи линейного программирования, а потомнекоторым образом строят из него целочисленное решение.

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

Page 104: Эффективные алгоритмы, осень 2007: Приближённые алгоритмы

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

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