- •Глава 5
- •5.1. Переборные задачи и сложность вычислений
- •Сложность вычислений на машине Тьюринга
- •5.2. Классы задач p и np
- •Недетерминированные вычисления
- •5.3. Класс np-полных задач
- •По современным представлениям более точное соотношение между p, np и npc показано на рис. 5.2.
- •По современным представлениям более точное соотношение между p, np и npc показано на рис. 5.2.
- •5.4. Труднорешаемые задачи
- •Недетерминированное 88
Глава 5
ЭФФЕКТИВНОСТЬ АЛГОРИТМОВ
Сложность вычислений и эффективность алгоритмов составляют одну из важнейших проблем современной теории вычислительных систем. В области теории и практики программирования выработано много различных подходов к проблеме сложности вычислений. Задача настоящей главы – познакомить читателя с основами современных точных методов оценки сложности задач и эффективности алгоритмов. Изучение таких методов полезно для развития интуитивных представлений об эффективном (с точки зрения стоимости) использовании вычислительных машин и для выработки практических навыков оценки потребности в вычислительных ресурсах (таких, как память и время), необходимых при наиболее благоприятных условиях для вычисления функции данной сложности на универсальных вычислительных машинах.
5.1. Переборные задачи и сложность вычислений
Задача распознавания – это множество Zп всевозможных индивидуальных задач и подмножество Zп.да Zп задач с ответом “да”. Задача распознавания называется переборной, если каждая индивидуальная задача z формулируется следующим образом: существует ли такой объект y, что выполняется свойство, выражаемое предикатом R(z,y)? При этом предполагается, что проверка истинности R(z,y) имеет полиномиальную сложность.
Например, задача 3-выполнимости к.н.ф.: дано множество дизъюнкций D={d1,d2,…,dm} на конечном множестве булевых переменных X={x0,x1,…,xn}, таких, что число di переменных каждой дизъюнкции равно 3. Требуется ответить на вопрос: существует ли на X набор значений истинности, при котором выполняются все дизъюнкции из D?
Предполагается, что для представления исходных данных используется алфавит и некоторый естественный способ кодирования , причем длина кода исходных данных задачи z равна l(z).
Введем обозначение * для множества всевозможных цепочек символов (слов) в алфавите . Любое подмножество множества * цепочек называется языком над алфавитом . Множество текстов задачи с ответом из множества Zп.да при выбранном способе кодирования будем рассматривать как язык L(,).
Сложность вычислений на машине Тьюринга
Рассмотрим детерминированную машину Тьюринга (ДМТ) M, вычисляющую рекурсивную функцию
fM: **,
где * и * - множество всевозможных цепочек над алфавитами и соответственно. При начальной конфигурации q1, где *, машина, если когда-либо остановится, завершит работу в конфигурации q0, где = fM()*.
Число тактов работы для получения =fM() назовем временнóй сложностью машины M и обозначим через tM(). Если значение fM() не определено, то временная сложность tM() также не определена. Активной зоной машины M при работе со входом называют множество всех ячеек ленты, участвующих в вычислении =fM(). Длину активной зоны обозачим через sM().
Теорема 5.1. Если ленточный алфавит машины M содержит k символов, а алфавит состояний головки - r символов, то для сложности вычислений справедливы оценки:
sM() +tM(),
,
где - длина цепочки .
Доказательство [14].
В начальной ситуации на ленте записана цепочка , занимающая ячеек. На каждом шаге вычислений добавляется не более одной активной ячейки, поэтому sM() +tM().
Выполним подсчет числа всевозможных конфигураций
K=a(1)…a(i-1)qja(i)…a(s) (s s)
с длиной активной зоны, не превышающей s. Имеется вариантов записи символов на ленте,r вариантов состояния и s s вариантов положения головки, а также s вариантов длины s конфигурации K. Поэтому общее число конфигураций не превосходит rs2ks. Повторение конфигураций возможно только в случае зацикливания машины. Следовательно, для числа тактов можно записать .
Теорема доказана.
Частный случай – машина, вычисляющая характеристическую функцию множества LM*:
M: *{0,1}.
Множество LM называется языком, распознаваемым машиной M:
LM={*, ()=1}.
Временнáя сложность вычисления TM: NN:
.