русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Задача об ориентированном гамильтоновом цикле (ОГЦ).


Дата добавления: 2015-01-16; просмотров: 902; Нарушение авторских прав


Теорема. Приблема ориентированного гамильтонова цикла NP- полна.

Доказательство. Для доказательства NP-полноты задачи ОГЦ, построим алгоритм полиномиального сведения 3-КНФ к ОГЦ. Пусть F есть 3-КНФ с переменными x1, x 2,…, x n . Покажем, что граф G= (V, E) имеет гамиль- тонов цикл в том и только в том случае, если формула F выполнима.

В доказательстве будут использованы блоки графа, обладающие специальными свойствами (рис. 36.15).

Первый из используемых блоков (A) показан на рис.35.15(a). Предположим, что A входит в граф G, причем лишь вершины a, a,b, bмогут быть соединены с остальными вершинами графа. Тогда гамильтонов цикл в графе G должен проходить через вершины z1, z2, z3, z4 , что возможно двумя способами, изображенными на рис.36.15(б) и (в).

 

Рис.36.15.

Второй блок (B) показан на рис.36.16. Предположим, что блок B входит в граф G, тогда блок B может быть связан с остальной частью графа только через вершины b 1, b 2, b 3, b 4. Можно проверить, что гамильтонов цикл, если он существует, не может проходить одновременно через три ребра (b 1, b 2), (b 2, b 3), (b 3, b 4), поскольку цикл не мог бы пройти через все вершины B. Однако гамильтонов цикл может проходить через любое собственное подмножество этой тройки, как видно из рис.36.16(а-д).

 

Рис.36.16

Граф G, соответствующий формуле F, строится из блоков типа A и B (рис. 36.17). Пусть формула F составлена из k дизъюнкций F1, F2,…,Fk, каждая из которых содержит ровно 3 литерала. Для каждой дизъюнкции Fi строим блок B; обозначим через bi,j соответствующие копии вершин b j. Соединим вершины b i,4и b i+1, 1 для i = 1,2,…,k-1.

Далее, каждой переменной xm формулы F мы поставим в соответствие пару вершин xm , x’’m, которые соединим двумя ребрами e m и em .

(На самом деле это не ребра, а сложные конструкции, так что кратных ребер не будет). Идея состоит в том, что гамильтонов цикл будет проходить через ребро e m , если в выполняющем наборе переменная x m принимает значение 1, и через em , если эта переменная принимает значение 0.



Чтобы дать возможность гамильтонову циклу пройти по e m или em , добавим в граф ребра (x’’m , xm+1) для m = 1,2,…,n-1, а также два ребра:

(b1,1, x1) и (b k,4, x’’4) (верхнее и нижнее ребра, рис.36.17).

Теперь надо связать блоки графа, соответствующие переменным формулы, с блоками, соответствующими ее дизъюнкциям. Если j-й литерал дизъюнкции Fi есть x m , соединим ребро (b i, j ,b i, j+1) с ребром e m с помощью A-блока, а если Øxm – с ребром ēm. Так в примере рис.36.17 для F2 = x1 Ú Øx2 Ú x3 размещаем три A-блока между ребрами:

(b 2, 1, b 2, 2) и e1 ; (b 2, 2, b 2, 3) и ē2; (b 2, 3, b 2, 4) и e3 .

Слова “соединить два ребра с помощью A” означают, что каждое из них заменяется на цепочку из пяти новых ребер и добавляются связывающие их ребра и вершины, как это предусмотрено конструкцией A-блока (рис.36.15).

Если литерал ym встречается в нескольких дизъюнкциях (например,

Ø x 3 на рис.36.17), то к соответствующему ребру “подключается” несколько A-блоков. Это можно сделать, если входящие в A-блоки цепочки из пяти ребер соединить последовательно, как показано на рис.36.18.

Формула F выполнима, если и только если построенный граф имеет гамильтонов цикл. Допустим, что в графе G есть гамильтонов цикл h, и докажем выполнимость формулы F. Цикл h должен быть устроен так:

- сначала проходим ребро (b1,1, x1) слева направо;

- затем для каждого m проходим по одному (и только одному) из ребер

e m , em ;

- проходим по ребру (b k,4, x’’n) справа налево;

- проходим все B-блоки снизу вверх.

Заметим, что, проходя по ребрам e m и ē m, проходят по A-блокам, кото-

рые к ним присоединены, в противном случае переменная x m не входит в формулу и ее можно вообще удалить, так что кратных ребер нет.

 

 

Рис.36.17. Рис.36.18.

 

Укажем выполняющий набор для формулы F: если ребро e m принадлежит гамильтонову циклу h, положим x m = 1, в противном случае h содержит ребро ē m и мы полагаем x m = 0.

Покажем, что построенный набор является выполняющим для формулы F. Рассмотрим дизъюнкцию Fi и соответствующий ей B-блок. Каждое ребро (b i, j ,b i, j+1) связано с помощью A-блока либо с ребром e m, либо с ребром ēm. Цикл h проходит через ребро (b i, j ,b i, j+1), если и только если соответствующий литерал равен 0. Цикл h не может проходить через все три ребра (b i, 1 , b i, 2), (b i, 2 , b i, 3), (b i, 3 ,b i, 4) в B-блоке, поэтому хотя бы одному из этих ребер соответствует истинный литерал дизъюнкции и дизъюнкция Fi истинна. Аналогичное можно сказать про любую дизъюнкцию Fi , так что все они истинны и формула F истинна для построенного набора значений своих переменных.

Обратно, пусть формула F истинна для некоторого набора значений переменных. Построим цикл h по описанным выше правилам: цикл со- держит ребро e m, когда x m = 1, и ребро ē m, когда x m = 0; цикл проходит через ребро (b i, j ,b i, j+1), если и только если j-ый литерал дизъюнкции Fi равен 0 на данном наборе. Очевидно, описанные правила позволяют построить гамильтонов цикл по выполняющему набору.

Граф G имеет полиномиальный размер, т.е. его размер ограничен полиномом от размера формулы F, и построение графа G по формуле F осуществляется за полиномиальное время от входа, т.е. длины представления формулы F). Таким образом, задача 3-КНФ полиномиально сводима к задаче ОГЦ, что и требовалось доказать. “

 



<== предыдущая лекция | следующая лекция ==>
Задача об узельном (вершинном) покрытии | Неориентированный гамильтонов цикл и задача коммивояжера


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.146 сек.