Читать книгу Вычислительные машины и труднорешаемые задачи. Русский метод. Русская машина - Геннадий Степанов - Страница 4
Задача о вершинном покрытии
ОглавлениеЗадача о вершинном покрытии – NP-полная задача информатики в области теории графов.
Часто используется в теории сложности для доказательства NP-полноты более сложных задач.
Вершинное покрытие для неориентированного графа G = (V,E) – это множество его вершин S, такое, что, у каждого ребра графа хотя бы один из концов входит в вершину из S.
Размером (size) вершинного покрытия называется число входящих в него вершин.
Задача о вершинном покрытии состоит в поиске вершинного покрытия наименьшего размера для заданного графа (этот размер называется числом вершинного покрытия графа).
NP-полнота задачи о вершинном покрытии.
Поскольку задача о вершинном покрытии является NP-полной, то, в настоящее время считается, что неизвестны алгоритмы для её решения за полиномиальное время.
Однако существуют алгоритмы, дающие«приближённое» решение этой задачи за полиномиальное время.
С их помощью можно найти, например, вершинное покрытие, в котором число вершин не более чем вдвое превосходит минимально возможное.
Безпереборный метод (русский метод) решения задачи о вершинном покрытии графа.
Мной предлагается следующий способ решения задачи о вершинном покрытии:
Этап1.
Выберем интервал изменения числа угадывания (N уг) для данной конкретной задачи. Этот интервал зависит от характеристик этой задачи.
Он изменяется от 1 до определённого, предварительно, для этой задачи значения (N макс).
Процесс изменения можно осуществлять, например, путём прибавления 1 к значению N уг.
Это не является принципиально важным.
Этап2.
Осуществим сортировку вершин графа, в соответствии с числом входов в вершину графа рёбер графа.
Этап3.
Выберем из отсортированного множества вершин графа N уг «лучших» вершин (больше количество входов рёбер графа в вершину), в соответствии с числом входов в вершину графа рёбер графа.
Этап4.
Объединим каждую вершину графа с другой каждой вершиной графа во множества по две вершины.
Определим число входов в вершину графа рёбер графа для данного множества по два, которые запомним для этого множества.
Получим множество подмножест по два.
Определим, получен ли искомый результат или нет.
Если получен, то заканчиваем поиск.
Переход к этапу12.
Иначе переходим к следующему этапу.
Этап5.
Осуществим сортировку подмножеств по два, в соответствии с числом входов в вершину графа рёбер графа.
Этап6.
Выберем из отсортированного множества подмножеств по два графа N уг лучших подмножеств, в соответствии с числом входов в вершину графа для этих подмножеств.
Этап7.
Объединим каждое подмножество по два в подмножества по три или четыре в зависимости от условий задачи.
Так, как осуществляется склейка путей графа русским методом в задаче коммивояжера.
Определим число входов в вершину графа рёбер графа для данного множества вершин по три или четыре, которые запомним для этого подмножества.
Получим множество подмножеств по три или четыре.
Если множество подмножеств по три или по четыре оказывается пустым, то увеличиваем N уг, допустим на 1, и переходим к этапу3.
Определим, получен ли искомый результат или нет.
Если получен, то заканчиваем поиск.
Переход к этапу12.
Иначе переходим к следующему этапу.
Этап8.
Осуществим сортировку подмножеств вершин по три или четыре, в соответствии с числом входов в вершину графа рёбер графа, русского метода.
Этап9.
Выберем из отсортированного множества подмножеств вершин по три или четыре N уг лучших подмножеств, в соответствии с числом входов в вершину графа для этих подмножеств.
Этап10.
Объединим каждое подмножество вершин по три в подмножество вершин по шесть или пять.
Или подмножество вершин по четыре во множества подмножеств по восемь или семь.
В полном соответствии с правилами русского метода, указанными в задаче коммивояжера.
Определим число входов в вершину графа рёбер графа для данного множества подмножеств по пять, или шесть, или семь, или восемь, в зависимости от условий задачи, которые запомним для этого множества подмножеств.
Определим, получен ли искомый результат или нет.
Если получен, то заканчиваем поиск.
Переход к этапу12.
Иначе переходим к следующему этапу.
Этап11.
Данную процедуру повторяем, пока число вершин в подмножествах не сравняются с числом вершин графа. Так, как осуществляется эта процедура, примерно, в задаче коммивояжера русским методом.
Определим
N уг = N макс.
Если равен то переходим к этапу 12.
Иначе увеличиваем N уг, допустим, на 1 и переходим к этапу 3.
Этап12.
Анализ полученного результата.
Оценка полученного решения.
Если не удовлетворяет то уточняем N уг и N макс.
Переходим к этапу 2.
Иначе заканчиваем работу.