Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретная математика & математическая логика

..pdf
Скачиваний:
48
Добавлен:
15.11.2022
Размер:
19.42 Mб
Скачать

Иногда используют оценки асимптотической эквивалентно-

сти f (n) ↔ g(n):

lim f (n) =1.

n→∞ g(n)

Функция

f (n) = Ω (g(n)),

если

lim

f (n)

= ∞ .

 

n→∞

g(n)

Классы сложности алгоритмов

Итак, есть классы Р, Е. Идём дальше:

NP-сложные задачи. Вспомним задачу коммивояжёра из теории графов. Перебор всех маршрутов в графе из n вершин требует рассмотрения n! вариантов. Однако n! растет даже быстрее, чем 2

встепени n.

Втак называемом недетерминированном алгоритме (существует и недетерминированная машина Тьюринга – НДМТ) варианты «угадываются» случайным образом, тогда, если повезет, можно относительно быстро найти вариант, удовлетворяющий заданным ограничениям. Иногда представляют НДМТ проверяющей все альтернативы одновременно.

Такие задачи, имеющие недетерминированное решение, которое иногда удается найти за полиномиальное время, называются недетер-

минировано полиномиальными – NP (Nondeterministic Polynomial).

Преобладает мнение, что детерминированных алгоритмов решения таких задач не существует. Для сокращения перебора вариантов при решении таких комбинаторных задач (задач комбинаторной сложности) предлагаются различные способы «борьбы с перебором», «борьбы с проклятием размерности».

241

Например, при решении задачи коммивояжёра решение задачи – совокупность рёбер. За полиномиальное время можно убедиться, что найденный цикл – гамильтонов. Но лучший ли это вариант? Вопрос открытый…

Р NP? Р = NP?

Большинство практически важных задач относится к классу NP. Поиск «хороших» алгоритмов – благородная задача, но для многих задач их найти не удаётся. Вопрос Р NP? Р = NP? Более тридцати лет ждёт своего решения.

Математический институт Clay Mathematics Institute, USA,

предлагает приз 1 000 000 долл. за решение этой проблемы.

NP-полные задачи

Для некоторых NP-задач было обнаружено удивительное свойство. Оказалось, что они универсальны в том смысле, что построение полиномиального алгоритма для них влечёт автоматически возможность построения такого же алгоритма для всех задач NP. Такие задачи называют NP-полными.

Всякий алгоритм обладает свойством массовости – он решает не одну задачу, а некоторый класс задач. Множество конкретных, или индивидуальных, задач (instances) называют массовой задачей

(decision problem).

Пусть имеются две массовые задачи Z1, Z2 из NP, Z1 полиномиально сводится к Z2, если:

1.Для любой индивидуальной задачи из Z1 можно за полиномиальное время построить соответствующую индивидуальную задачу Z2.

2.Решение построенной индивидуальной задачи из Z2 за полиномиальное время может быть преобразовано в решение Z1.

Массовую задачу Z называют NP-полной, если любая задача из класса NP полиномиально сводится к задаче Z.

Исторически первой NP полной задачей является задача выполнимости КНФ – SAT (Satisfiability). В настоящее время найдены сотни таких задач.

242

Задача выполнимости булевых формул (SAT или ВЫП) – задача распознавания, важнаядлятеориивычислительной сложности.

Экземпляром задачи SAT является булева формула, состоящая только из имен переменных, скобок и операций (И), (ИЛИ)

и← (HE). Задача заключается в следующем: можно ли назначить всем переменным, встречающимся в формуле, значения ЛОЖЬ

иИСТИНА так, чтобы формула стала истинной. Согласно теореме Кука, доказанной Стивеном Куком (рис. 9.1), американским учёным в области теории вычислительных систем в 1971 году, задача

SAT NP-полна.

Рис. 9.1. Стивен Артур Кук

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

Равенство классов P и NP

Втеории алгоритмов вопрос о равенстве классов сложности P

иNP (рис. 9.2) является одной из центральных открытых проблем уже более трех десятилетий. Если на него будет дан утвердительный ответ, это будет означать, что теоретически возможно решать многие сложные задачи существенно быстрее, чем сейчас.

243

Рис. 9.2. Классы сложности при условии P NP

Эвристические алгоритмы

Одним из путей к решению NP-полных задач является разработка приближённых, эвристических алгоритмов.

В эвристических алгоритмах используют для этого некоторую дополнительную информацию – эвристики, позволяющие находить решения, лишь на 10–15 % хуже оптимальных. Эвристики – совокупности разумных соображений, использование которых предположительно позволяет получить решение, близкое к оптимальному.

Тем не менее NP-сложные задачи не имеют гарантированных оценок времени решения. Даже незначительное изменение исходных данных приводит к его резкому увеличению.

Генетические алгоритмы

В настоящее время активно развивается направление так называемых генетических алгоритмов («эволюционных вычислений»). Это направление использует в борьбе с перебором вариантов опыт развития природы и человека. При этом применяется и соответствующая терминология: «популяция» – некоторое множество вариантов; «скрещивание» вариантов путем определенного комбинирования «хромосом особей» из исходной популяции и получение «потомков»; «эволюция» сцельюполучениялучшихрешений(см. подразд. 4.5).

244

10. ПРИМЕРЫ ПРОГРАММИРОВАНИЯ АБСТРАКТНЫХ МАШИН

10.1. ПРОГРАММИРОВАНИЕ МАШИНЫ ТЬЮРИНГА

Задача. Будем представлять некоторое число а в виде а символов 1, например, λ 111λ – число 3, λ 11111λ – число 5. Алфавит содержит кроме символов пробела λ символ 1.

Задание – построить машину Тьюринга, увеличивающую записанное число на единицу.

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

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

Головка установлена у начала числа, поэтому необходимо двигаться вправо (петля в состоянии у1k) до первой пустой ячейки λ справа от числа, потом в состоянии у2 – двигаться влево до пустой

245

ячейки λ слева от числа. При обнаружении λ происходит сдвиг вправо к началу числа и останов.

Программа – это список меток дуг графа:

y 1

y1

 

 

,

 

 

 

 

1

1R

 

 

 

y1λ

y2

 

,

1L

 

 

y21

y2

 

,

1L

 

 

y2 λ

yk

.

λR

 

 

10.2. ПРОГРАММИРОВАНИЕ МАШИНЫ ПОСТА

Задача. Написать программу увеличения числа на единицу (инкремента) для машины Поста.

Алфавит А = {λ,1}.

1. R,2; это сдвиг вправо к началу числа, сдвиг, если не λ

1,1; 2. λ,3; Ветвление

3. 1, 4; запись 1, если λ , т.е. прибавление 1 к числу. 4. HLT; стоп.

Это программа так называемого инкремента, т.е. число, записанное «зарубками», «черточками», увеличивается на одну «черточку» при движении вправо.

Если же после прибавления двигаться влево к началу числа, как это обычно требуется, то

4. L,5;

1,4; 5.

λ,6;

246

6.λ,7;

7.R,8;

8.HLT.

10.3. ВЫЧИСЛЕНИЕ ЛОГИЧЕСКОЙ ФУНКЦИИ

Задача 1. Построить граф машины Тьюринга для вычисления конъюнкции двух переменных х1х2. После х1х2 на ленте записана *, после которой надо записать значение функции. Головка установлена перед х1. Алфавит А = {λ, 1, *}.

Надо помнить, что на ленте записаны значения х1х2 некоторым входным вектором, например 11.

Для построения графа машины построим вначале граф вычислений конъюнкции (рис. 10.2):

Рис. 10.2. Граф вычисления конъюнкции двух переменных

Граф показывает, что если х1 = 0, то функция равна 0, независимо от значения х2. Функция равна 1, если и х1 и х2 равны 1.

247

Соответственно строится граф переходов машины Тьюринга (рис. 10.3). Для упрощения не будем возвращать головку в исходное положение.

Рис. 10.3. Граф переходов машины Тьюринга, вычисляющей конъюнкцию

Задача 2. Написать программу вычисления конъюнкции двух переменных х1 х2 для машины Поста. После х1 х2 на ленте записана *, после которой надо записать значение функции. Головка установлена перед х1.

Алфавит А = {λ,1,*}.

1.1,2; Ветвление по значению х1, «пропишем» единичный

0,?;

путь, пока не знаем, к какой команде переходить, если х1 = 0 2. R,3; это сдвиг вправо к следующей ячейке – х2

248

3.1,4; Ветвление по значению х2

0,?;

4.R,5; это сдвиг вправо к следующей ячейке – *

5.R,6; это сдвиг вправо к следующей ячейке – λ 6.1, 7; запись значения функции = 1

7.HLT; стоп.

Теперь будем прописывать «нулевой путь», вместо знака во-

проса в первой команде ставим 8. Независимо от х2 значение конъюнкции равно 0, поэтому

8.R,9; это сдвиг вправо к следующей ячейке – х2

9.R,10; это сдвиг вправо к следующей ячейке – *

10.R,11; это сдвиг вправо к следующей ячейке – λ

11.0, 7; запись значения функции = 0, переход на конец. Теперь мы знаем, куда адресовать ветвление по нулю в ко-

манде 3 – к команде 9.

Вся программа выглядит так:

1,2; 1. Ветвление по значению х1

0,8;

2. R,3; это сдвиг вправо к следующей ячейке – х2

1,4; 3. Ветвление по значению х2

0,9;

4.R,5; это сдвиг вправо к следующей ячейке – *

5.R,6; это сдвиг вправо к следующей ячейке – λ

6.1, 7; запись значения функции = 1

7.HLT; стоп.

8.R,9; это сдвиг вправо к следующей ячейке – х2

9.R,10; это сдвиг вправо к следующей ячейке – *

10.R,11; это сдвиг вправо к следующей ячейке – λ

11.0, 7; запись значения функции = 0, переход на конец.

249

10.4. ЗАДАЧА РАСПОЗНАВАНИЯ ПОСЛЕДОВАТЕЛЬНОСТИ СИМВОЛОВ НА ЛЕНТЕ

Задача 1. Построить граф машины Тьюринга для распознавания последовательности символов 013 на ленте в потоке символов λ, 0, 1, 2, 3, *, после которой надо записать символ * и остановиться. Остановку следует выполнить и при обнаружении пустой ячейки (с символом λ).

Алфавит А = {λ, 0, 1, 2, 3, *}.

Тогда при обнаружении λ необходим переход в конечное состояние.

Для фиксации последовательности 013 необходимо 4 состояния. При нарушении последовательности следует выполнять возврат в первое состояние (рис. 10.4):

Рис. 10.4. Граф переходов машины Тьюринга для распознавания последовательности 013

Задача 2. Написать программу для машины Поста, распознающей последовательность 013 при условиях, описанных в задаче 1.

«Пропишем» в начале заданную последовательность 013:

250

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]