Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория алгоритмов. Учебное пособие
.pdf
5.1. Введение в теорию сложности вычислений
Что здесь происходит с позиции теории вычислений?
Если у нас имеется какой-то алгоритм, который использует t операций, то от улучшения быстродействия наше-
го процессора время решения нашей задачи умножается
на некоторую константу.
Поэтому, и это очень важно, в теории сложности вы-
числений сложилась традиция измерять время работы
алгоритма с точностью до муль типликативной константы («с точностью до О(.)»). Такой подход позволяет нам
абстрагироваться от выбора конкретной модели вычислительного устройства от того, сколько времени занимает выполнение одной операции, какую систему команд
имеет используемая нами машина и т.п. Данный подход
чаще всего используется для оценки сложности алгоритмов.
Стандартный способ определения вычислительной
модели состоит в том, что для исполнения алгоритма у нас
имеется некоторая машина с адресуемой памятью, ячейки
которой индексируются натуральными числами; в каждой
ячейке можно хранить натуральные числа; можно выполнять арифметические действия и т.п. Детали здесь мало
интересны, потому что наше О(.)-соглашение позволяет
о них заботиться не слишком. Если же заменить «с точностью до О(.)» на слегка более грубое «с точностью до полинома», то вообще все реальные вычислительные устройства оказываются эквивалентными.
Третий принцип. Особое внимание уделяется алгорит-
мам, время работы которых ограничено некоторым полиномом от п. Допускается, что в подавляющем большинстве
случаев требование полиномиальность достаточно адекватно отражает «практическую осуществимость» алгоритма. Наиболее известное исключение: метод эллипсоидов Л.
Хачияна для линейного программирования, алгоритм полиномиальный, но не слишком практичный.
— 161 —

Глава 5. ВВЕДЕНИЕ В ТЕОРИЮ СЛОЖНОСТИ АЛГОРИТМОВ
nn n n
−− ≥
= =
( ) ( )
= −+ − ≥
nn n n
−− >
= =
22
nn
+−
( )
11
22
nn
++
+−
= −−
Очевидно, на практике важны только те алгоритмы,
которые являются реально выполнимыми.
Существуют задачи, для которых имеется полиномиальный и не полиномиальный алгоритм. В качестве примера приведем алгоритм вычисления последовательности
чисел Фибоначчи (ПЧФ).
При этом рассмотрим два алгоритма ПЧФ.
Алгоритм 1.
0, 1
FF
01
FF F
= +
1 2, 2
(*)
Определим, сколько операция сложения выполняется
при вычислении числа Фибоначчи с номером n в соответствии с этим алгоритмом.
0 0, 1 0
tt
tntn tn n
= =
Fib Fib
( ) ( ) ( )
Fib Fib Fib
1 2 , 2
Из курса дискретной математики известно, что решением рекуррентные соотношения
0, 1
FF
01
FF F
= +
1 2, 1
(**)
является последовательность, задаваемая формулой
115 15
F
= −
n
5
Сравнивая (*) и (**), получим, соответственно
0, 0, 1,2, 4, 6, …
0, 1, 1,2, 3, 5, 8,….
т.е.
t nF
Fib n
следовательно
tn
Fib
115 15
( )
5
— 162 —
= − ,
1
1
+
1

5.1. Введение в теорию сложности вычислений
1515
++
( )
1.
tn n
Из последнего равенство получаем, что
n
tn
Fib
( )
≅
5
,
2
т.е. алгоритм имеет экспоненциональную сложность.
Алгоритм 2.
function Fib n
1 : 0; 2 : 1;
for i to n do
: 1 2;
xx x
= +
2 : 1;
xx
1: ;
xx
Fib x
xx
= =
: 1
=
=
=
:
=
Очевидно, число сложений для вычисления числа
Фибоначчи с номером n, согласно алгоритму 2, является
n
полиномиальным и
Fib
( )
= =
∑
1
=
i
Поскольку числа Фибоначчи возрастают очень быстро, например 15F уже не входит в регистр машины,
поэтому машина это число будет укорачивать. Чтобы
избежать этого, мы рассматриваем вычисление чисел
Фибоначчи по mod 10. (Исходный код программы смотрите в Приложении 2.)
Как известно, виртуальная реальность оказалась намного сложнее прогнозов, сделанных на заре компьютерной эры, и классические вычисления оказались далеко
не единственной сферой применения компьютеров. Все
большее место завоевывала идея использования вычислительной техники в качестве удобного инструмента для
реализации разнообразных интерактивных процессов:
сетевых и криптографических протоколов, баз данных
и т.д. Развитие ТВС внесет большой вклад в решение этих
проблем.
— 163 —

Глава 5. ВВЕДЕНИЕ В ТЕОРИЮ СЛОЖНОСТИ АЛГОРИТМОВ
Точно так же, как в реальном мире в настоящий момент наблюдается огромное стилевое разнообразие приложений, для которых используются компьютеры, ТВС
является весьма протяженной и в некотором смысле буферной дисциплиной, непрерывно заполняющей целый
спектр между чистой логикой/математикой, с одной стороны, и, скажем, реальными задачами, решаемыми системщиками — с другой. Наиболее существенная разница
между настоящими вычислительными процессами и их
теоретическими моделями, в какой бы части спектра это
ни происходило, состояла (и состоит) в том, что все достижения ТВС по определению имеют форму математических теорем, удовлетворяющих всем стандартам строгости
классической математики.
Принципы, сформулированные выше для классических вычислений, как мы показываем дальше, в общем
и целом являются вполне адекватными для изучения интерактивных процессов вычисления. Справедливости ради,
впрочем, следует отметить, что чем менее математичными
являются потребители идей и результатов данной области
ТВС, тем более низкий уровень абстрагирования характерен для самой области. Поэтому по мере продвижения
от математического конца спектра к прикладному происходит определённая ревизия сформулированных выше основных принципов. Например, сделав всего один шаг в сторону от теории сложности (классических) вычислений,
мы оказываемся в области построения алгоритмов для конкретных задач дискретной оптимизации. Здесь наш третий принцип (полиномиальные алгоритмы тождественны
практичным) уже не имеет такого решающего значения, и,
соответственно, огромное внимание уделяется улучшению
уже имеющихся полиномиальных алгоритмов.
Таким образом, применяя подход классического вычисления, можно измерять время, требуемое для
— 164 —

5.1. Введение в теорию сложности вычислений
( )
nn
PP
tx fx
n
P
f
x
число элементарных шагов, сделанных при вычислении
не определена в противном случае
по программе Р, если определена,
( )
( )
( )
( )
( )
( )
( )
( )
nn
ee
,ne∈Ν
( )
вычисления значения функции по конкретному алгоритму в предположении, что каждый шаг работы алгоритма
совершается за единицу времени. Таким образом, время
вычисления является примером меры вычислительной
сложности, отражающей сложность или эффективность
используемого алгоритма.
Сделаем одно важное замечание: ранее, мы говорили
о равносильности рассматриваемых подходов к понятию
«алгоритм» и, следовательно, к равносильности соответствующих моделей вычислений в том смысле, что все они
задают один и тот же класс функций. Но с точки зрения
теории сложности, которая будет рассмотрена в этой главе,
это далеко не так.
Меры сложности
граммы P через
через индекс программы:
1
t .
P
ром меры вычислительной сложности. Некоторые простые, но важные свойства этих функций приводятся в следующей теореме.
ная арифметическая функция вычислима на машине
Тьюринга.
Введем следующие обозначения: для каждой про-
Для удобства функцию
Семейство временных функций
n
t обозначим функцию
P
n
t для eP будем обозначать
P
e
n
t . Как обычно Pt обозначает
e
t является приме-
e
n
Теорема 1.
1.
Dt DF= для всех
, где
— 165 —
n
F -n-мест-
e

Глава 5. ВВЕДЕНИЕ В ТЕОРИЮ СЛОЖНОСТИ АЛГОРИТМОВ
( )
( )
( )
R exy t x y
( )
( )
F xy
( )
( )
( )
Rn u
nn≥
( ) ( )
( ) ( )
( )
( )
Fn
( ) ( ) ( )
2. Для каждого n предикат
,,
n
= = разре-
e
шим.
Примечание. Второе свойство часто используется в те-
ории сложности, и оно явно контрастирует с тем фактом,
что
n
= является неразрешимым предикатом.
e
Часто в теории сложности рассматриваются свойства,
справедливые для достаточно больших чисел n, но не обязательно для всех n.
Определение. Предикат
всех n, если
Rn выполняется для всех n, кроме конеч-
Rn выполняется для почти
ного множества (включая пустое) натуральных чисел (или
эквивалентно, если существует 0n такое, что
всех
).
0
= для
Теперь можно установить существование произвольно
сложных вычислимых функций.
Теорема 2. Пусть g — всюду определенная рекурсивно вычислимая функция. Существует всюду определенная рекурсивная вычислимая функция f , принимающая
только значения 0 и 1, такая, что если е — индекс для f то
t n gn> почти всюду.
e
Доказательство. Необходимую функцию f мы полу-
чим с помощью диагонального метода. Построение должно
обеспечить следующее: если
t m gm≤ для бесконечно
i
многих m, то f отличается от iF хотя бы в одном из этих
значений.
Определим f следующим образом. На каждом шаге п
построения f мы либо определяем индекс ni , либо за конечный промежуток времени решаем, что ni не определено. Затем полагаем
fn отличающейся от
i
n
, если ni
определено.
Более подробно, предполагая, что значения
, 1 ,..., 1fo f fn−
определены, полагаем
— 166 —

5.1. Введение в теорию сложности вычислений
[,
],
nki
ii ni
iitn gn
отличается от всех ранее определенных значений
и
если такое i существует
не определена в противном случае.
0
ni
iF
fn
( ) ( )
( ) ( )
( )
( )
tn y
( )
Fn
fF=
( ) ( )
ei
Fn F n
ei≠
( ) ( )
ii=
ie≠
( ) ( )
( ) ( )
{ }
1 max |
kk
p ki i i=+<
ii<
( ) ( )
,
i
n i n p t n gn≥≥ ≤
( ) ( )
ii≠
kn<
in≤
( ) ( )
t n gn
1,
если определено и
0, противном случае.
n
n
Существует конечная процедура, которая для
данного i определяет, будет ли
t m gm≤ тогда и только тогда, когда
i
что
= .
i
t m gm≤ , так как
i
y gn∃≤ такой,
Предикат в правой части разрешим по второй части теоремы 1. Следовательно, существует эффективная процедура для решения вопроса о том, определено ли ni , и если
определено, то для нахождения этого числа. Кроме того,
если ni определено, то определена и функция
i
n
в том
смысле, что мы знаем ее номер. Следовательно, f — всюду
определенная рекурсивная вычислимая функция. Значит,
существует такое е, что
По построению
и
, если ni определено. Покажем теперь, что если i яв-
n
ляется таким индексом, что
многих т, то
для некоторого п, и, следовательно,
n
Этого достаточно, чтобы показать, что
.
e
≠ , а, следовательно,
n
t m gm≤ для бесконечно
i
t m gm> для
i
почти всех т.
Пусть
t m gm≤ для бесконечно многих т.
i
Пусть также
определено и
если же нет ни одного определенного
k
,
, то положим
р=0.
Возьмем такое п, что
Предположим, что
для всех
k
шаге построения функции f получаем:
ся от всех ранее определенных ki и
и
i
.
. Тогда на n-м
и i отличает-
≤ . Значит,
i
.
— 167 —

Глава 5. ВВЕДЕНИЕ В ТЕОРИЮ СЛОЖНОСТИ АЛГОРИТМОВ
ii≤
np≥
ii≥
ii=
( ) ( )
( )
( )
( )
aR→
( )
>+
( ) ( )
( ) ( )
t n gn
величина iп определена и
то должно быть
. Следовательно,
n
. Но поскольку
n
n
.
Вообще говоря, нельзя усилить эту теорему так, чтобы
получить в заключение
et n gn> для всех п. Это связано
с тем, что для каждой функции f всегда можно написать
программу, быстро вычисляющую f на некотором конкретном значении аргумента a, просто внося значение
fa
в программу.
Пусть, например,
1fa= . Пусть P — программа, вы-
числяющая f. Тогда программа 1P , основанная на приводи-
мой блок-схеме, также вычисляет функцию f . Очевидно,
что
taa= + (так как действие
F
1
3
требует a шагов).
2
,
Таким образом, если g — такая вычислимая функция, что
заключение теоремы 2 с
3gx x
для некоторого х, то нельзя получить
t n gn> для всех п.
e
Используя аналогичную идею, можно написать
программу, которая быстро вычисляет f для любого данного конечного числа значений. Это показывает, что
«
> почти всюду» является наилучшим возмож-
e
ным заключением теоремы 2.
Существуют другие способы измерения сложности
вычисления.
— 168 —

5.1. Введение в теорию сложности вычислений
,,abc R∈
,,abc
Традиционно при изучении теории сложности вычисления принято различать массовые и индивидуальные
алгоритмические задачи. Массовая задача (в дальнейшем
будем говорить просто задача) обычно содержит несколько параметров, или свободных переменных, конкретные
значения которых не определены. Индивидуальная задача получается из массовой, если ее параметрам присвоены конкретные значения. Например, задача с решением
2
являются
0ax bx c+ += является массовой задачей, параметрами
. Если присвоить
конкретные значения из R, то получим индивидуальную задачу. Как правило, существует бесконечно много индивидуальных задач, которые получаются из множество R.
Будем говорить, что алгоритм A решает задачу Г,
если он решает любую индивидуальную задачу ГI, полученную из задачи Г заданием конкретных значений всем
ее параметрам.
Сложность алгоритма можно задавать различными
способами, однако их можно разделить на два больших
типа: статические (не зависимые от индивидуальных задач) и динамические (зависимые от индивидуальных задач). Примером статических мер сложности алгоритма является число команд, при помощи которых записывается
данный алгоритм, число команд определенного вида и т.д.
К наиболее важным динамическим мерам сложности относятся время и объем памяти, затраченные алгоритмом для
получения решения. Очевидно, эти величины существенно
зависят от индивидуальной задачи, которую решает алгоритм в данный момент. Поскольку ограничения по времени часто являются доминирующим фактором, определяющим пригодность конкретного алгоритма для практики,
в данной главе будем рассматривать только время работы
алгоритма и выражать его в терминах числа элементарных
шагов, которые необходимо выполнить, чтобы получить
— 169 —

Глава 5. ВВЕДЕНИЕ В ТЕОРИЮ СЛОЖНОСТИ АЛГОРИТМОВ
( )
AI
( )
tn
( )
tn
( )
tn
ответ. Конечно, эта величина зависит от системы команд
данного вычислительного устройства, однако мы не будем
уточнять, какое именно вычислительное устройство имеется нами в виду, а под элементарными шагами будем понимать арифметические операции, сравнения, команды
ветвления и т.д. Поскольку число элементарных шагов,
выполняемых алгоритмом, зависит от входа, то время работы алгоритма мы измеряем функцией от размера входа.
Входом алгоритма является индивидуальная задача.
Чтобы ввести этот вход в вычислительное устройство необходимо каким-то образом закодировать или представить
его в виде конечной последовательности символов (слово),
взятых из некоторого конечного множества, называемого алфавитом. Длина слова, то есть число входящих в нее
символов, называется размером входа.
Определение. Временной сложностью алгоритма А,
решающего задачу Г, называют такую функцию
t Γ ,
что любая индивидуальная задача ГI решена алгоритмом
А за число элементарных шагов, не превышающее
и существует индивидуальная задача Г
для своего решения требует ровно
Обычно функция
зависит от способа представ-
A
размера n, которая
I
шагов.
A
,
A
ления индивидуальной задачи ГI. Однако мы будем часто
задавать размер индивидуальной задачи неформально.
Например, под размерностью графа мы будем понимать
число его вершин, а под размером массива понимаем количество его элементов.
В задаче о коммивояжере (одна из самых известных
задач комбинаторной оптимизации, заключающаяся
в отыскании самого выгодного маршрута, проходящего
через каждый город ровно один раз с последующим возвратом в исходный город. В условиях задачи указываются
критерий выгодности маршрута и соответствующие
матрицы расстояний, стоимости и т. п.), например, для
— 170 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
