pipeline.ppt
- Количество слайдов: 7
Разбор задачи Югра. Нефте. Транс
Формулировка задачи Построим граф, где вершинами будут служить станции, а рёбрами – трубопроводы. Требуется найти вершинное покрытие из k вершин: для каждого ребра графа хотя бы один из его концов должен лежать в выбранном множестве.
Переборные решения Переберём все подмножества вершин (2^n). Переберём C(n, k) k-элементных подмножеств. Проверим, является ли kэлементное множество покрытием: – За O(m), перебрав все рёбра – «На лету» - при добавлении вершины в множество количество покрытых рёбер увеличивается на количество её соседей, не добавленных в покрытие.
Ключевая идея Будем повторять такую процедуру: – Выберем непокрытую вершину – Добавим в покрытие либо эту вершину, либо всех её соседей. Придётся сделать не более k таких шагов, на каждом шаге выбор из 2 вариантов. Решение за 2^k 60 баллов
Оптимизации Если у вершины больше k соседей, то мы обязаны добавить её в покрытие. Если у вершины ровно один сосед, то мы можем добавить соседа в покрытие, и исключить эту вершину из рассмотрения. Теперь в графе вершины степени не менее двух и не более k Решение за 1. 6 ^ k
Добавим эвристику Будем на каждом шаге выбирать вершину максимальной степени. Если степень равна 2, то весь оставшийся непокрытый граф – набор простых циклов. Тогда мы можем всегда добавлять в покрытие саму вершину, а не её соседей. Решение за 1. 466 ^ k 100 баллов
Спасибо! Вопросы?
pipeline.ppt