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

Теория алгоритмов. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]