- •Глава 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:
.
