- •Тема 1. Основные понятия и определения дисциплины.
- •1.1 История развития теории алгоритмов.
- •1.2 Роль алгоритмов в науке и технике.
- •1.3 Понятие алгоритма.
- •1.4 Алгоритмический процесс.
- •1.5 Алгоритмы и языки.
- •1.6 Основные вопросы теории алгоритмов.
- •1.7 Классификация алгоритмов.
- •1.8 Свойства алгоритмов.
- •1.9 Методы доказательства корректности алгоритмов.
- •1.10 Сложность алгоритмов.
- •Можно показать, что нижняя граница
- •Сложность рекурсивных алгоритмов.
- •Тема 2. Традиционные подходы в теории алгоритмов.
- •2.1 Рекурсивные функции.
- •Операторы рекурсии.
- •2.2 Нормальные алгорифмы Маркова.
- •2.3 Машина Тьюринга.
- •Тема 3 Алгоритмически неразрешимые проблемы
- •Тема 4 Классы p- (polynomial) и np- (nondeterminated polynomial) задач.
- •4.1 Понятие р- и np-задач.
- •4.3 Примеры задач np-класса.
4.3 Примеры задач np-класса.
Задача о выполнимости.
Пусть х1, х2, …, хn – множество логических переменных; – их отрицания или дополнения.
if xi = true then = false
- И; - ИЛИ.
Дизъюнкция: х1 х5 …
Конъюнкция: х4 х3 …
Конъюнктивная нормальная форма:
E*(x1, …, xn) = (x1 x2 x3) (x1 ) ( x4) ( ) (*)
Задача о выполнимости заключается в определении, является ли булевская функция, записанная в КНФ, выполнимой.
Любая булевская функция может быть представлена в КНФ по правилу Де Моргана:
А(ВС)=( АВ)(АС)
Говорят, что булевская функция выполнима, если существует некоторое присваивание переменным true или false, при этом функция должна быть равна true.
Для функции (*) она будет выполнима, если ввести следующие присваивания:
(*)
Например:
Функция
f2(xi)=(x1 x2)( )( )
не является выполнимой, т. к. при любых xi f2(xi)=false.
Теорема:
Задача о выполнимости является NP-полной.
for i=1 to N do
xi выбор (true, false)
if E(x1, x2, …, xN) then успех
else неудача
Используя преобразование задачи Р1 в Р2, можно показать, что даже ограниченный случай задачи о выполнимости является NP-полным.
К-выполнимость.
К-выполнимость означает, что любой дизъюнкт, входящий в КНФ, содержит не более К логических переменных.
Минимальный случай К=3. Для булевской функции, представленной в КНФ, за полиномиальное время можно найти функцию Е*(х2), содержащую не более трех переменных в каждом дизъюнкте. Тогда Е выполнима, если выполнима Е*.
E*(x1, x2,…, xn)E*(xi)
Для этого используется метод уменьшения порядка дизъюнкта
(1 2 … k)=(1 2 z) (3 4 … k )
Применяя итерационный процесс разложения, можно получить Е*.
Найти алгоритм решения Е* проще, чем функции Е. Но при этом доказав выполнимость Е*, докажем выполнимость исходной функции Е.
Частный случай: при К=2 функция Е входит в Р.
Примерами задач NP-класса могут послужить также задачи на графах:
Определение максимума клик неориентированного графа (NP-трудная задача).
Задача определения полного подграфа (NP-полная задача).
Определение вершинного покрытия мощности L для неориентированного графа (NP-полная задача).
Определение максимума вершинных покрытий неориентированного графа (NP-трудная задача).
Задача определения существования Гамильтонова цикла для графа (NP-полная задача).
Задача коммивояжера: определение оптимального движения по графу с единым вхождением в каждую вершину (NP-трудная задача).
Задача составления расписания (NP-полная задача).