Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
nu
)(
(П.4)
c
2
.
nw
)(
Если неравенства (П.3), (П.4) для
всех n n
верны одновре-
0
менно
)(
то пишут
u(n) = Θ
c
[w(n)], или u(n) w(n), и считают, что функция
nu
)(
nw
(П.5)
,0,0,
>> ccc
2112
u(n) равна w(n) по порядку роста. Эту оценку называют асимпто­тически точной оценкой
имеет конечный и отличный от нуля предел вует вещественная константа
то неравенства (П.5) справедливы и определение
o-малое через предел (П.2), дает возможность применить
для u(n). Заметим, что если отношение (П.1)
при n → ∞, т. е. сущест-
с > 0, такая, что
)(
lim c
n=∞
nu
nw
(П.6)
,
)(
u(n) = Θ
[w(n)]. Этот факт, как и
в анализе алгоритмов аппарат математического анализа для вычисле­ния пределов (например, правило Лопиталя и формулу Стирлинга).
Пример П.3. Пусть u(n) = 3n
2
+ 7n + 2. Тогда u(n) = о (n3), по-
скольку предел
2
nn
273
lim
n
++
3
n
0
=
равен нулю. Подобным образом можно показать, что
u
(n) = о (2n). Кроме того, u(n) = Θ (n2), так как предел
2
nn
273
равен константе. Отсюда
lim
n
u(n) = O
++
2
n
(n2) и u(n) = Ω (n2).
3
=
u(n) = о
(n2 ln
n),
Используя введенные определения асимптотических обозначе­ний, нетрудно доказать справедливость свойств, сформулированных в следующих утверждениях.
131
Утверждение П.1. Для любых функций u(n), w(n) и h(n), не
обращающихся в 0 хотя бы при n n0, справедливы следующие свой­ства асимптотических оценок.
Рефлексивность всех оценок, за исключением о-малое:
1)
u(n) = Θ
[u(n)], u(n) = O [u(n)], u(n) = Ω [u(n)].
2) Симметричность асимптотически точной оценки:
если
u(n) = Θ
[w(n)], то w(n) = Θ [u(n)].
3) Транзитивность всех оценок:
если u(n) = o [w(n)] и w(n) = o [h(n)], то u(n) = o [h(n)];
если
если
если
u(n) = Θ u(n) = O u(n) = Ω
[w(n)] и w(n) = Θ [h(n)], то u(n) = Θ [h(n)]; [w(n)] и w(n) = O [h(n)], то u(n) = O [h(n)]; [w(n)] и w(n) = Ω [h(n)], то u(n) = Ω [h(n)].
Утверждение П.2. Для любых двух функций u(n) и w(n), не
n n
обращающихся в 0 хотя бы при
1) Если
u(n) = o
[w(n)], то u(n) = O [w(n)] (o-малое влечет O-
, справедливы высказывания.
0
большое), но обратное не всегда верно.
u(n) = Θ[w(n)] тогда и только тогда, когда u(n) = O
2)
u
(n) = Ω [w(n)] (Θ-оценка влечет O-оценку и Ω-оценку).
3) Если
(n) = Ω [w(n)], то w(n) = O [u(n)].
u
u(n) = O
[w(n)], то w(n) = Ω [u(n)], и наоборот, если
[w(n)] и
Утверждение П.3. Для любых функций, не обращающихся в 0
n n
хотя бы при
1)
Правило суммы: если u(n) = Θ
w
(n) w1(n), то u(n) + h(n) = Θ [w1(n)].
2
, справедливы высказывания.
0
[w1
(n)], h(n) = Θ [w2(n)] и
2) Правило произведения: если u(n) = Θ [w1(n)], h(n) = Θ [w2(n)],
u(n) h(n) = Θ
то
Правила 1 и 2 верны и для
(n) w2(n)].
[w1
О-оценки.
В анализе алгоритмов принято сравнивать алгоритмы между собой по порядку роста их функций сложности. Пусть функции временной сложности алгоритмов
Считают, что алгоритм
A
, если t1(n) t2(n), т. е. t1(n) = o [t2(n)].
ма
2
A
асимптотически быстрее алгорит-
1
A
и A
соответственно.
1
2
132
t
(n), t2(n) –
1
A
Алгоритм
t
(n) t2(n), т. е. t1(n) = O [t2(n)].
ли
1
При
t
2
птотически не быстрее
Алгоритмы
выполнения
, если t1(n) t2(n), т. е. t1(n) = Θ [t2(n)].
t(n) = Θ
При
асимптотически не медленнее алгоритма A2, ес-
1
(n) t1(n), т. е. когда t1(n) = Ω [t2(n)], алгоритм A1 асим-
алгоритма A2.
A
, A
асимптотически равнозначны по времени
1
2
(1) алгоритм сводится к выполнению постоянного
числа элементарных операций. Время выполнения такого алгоритма ограничено сверху константой, не зависящей от объема обрабатывае­мых данных. При анализе конкретного алгоритма всегда стремятся получить асимптотически точную Если это не удается, то ограничиваются тературе по анализу алгоритмов
Θ-оценку его функции сложности.
O-оценкой. В обширной ли-
O-оценка наиболее употребительная.
Эта оценка позволяет «похвалить» исследуемый алгоритм, указав, что он работает не медленнее, чем некоторый другой алгоритм.
Замечания
1. С позиции асимптотического подхода шаг алгоритма элемен-
тарный, если он состоит из конечного числа операций, выполняемых
Θ
за время
(1). К таким операциям традиционно относят:
арифметические операции (+, –,
×, /), осуществляемые над посто-
янным числом (обычно 2) операндов фиксированного размера;
– операции присваивания, выполняемые над одним операндом
фиксированного размера;
– операции сравнения (
<, , >, , =, ), применяемые к двум опе-
рандам фиксированного размера;
– логические операции (AND, OR, NOT), осуществляемые над
постоянным числом операндов фиксированного размера;
– побитовые (поразрядные) операции, выполняемые над посто-
янным числом операндов фиксированного размера;
– операции ввода
вывода, используемые для чтения или записи
/
постоянного числа элементов данных фиксированного размера;
условные операции ветвления, когда проверяемое условие
представлено логическим выражением над постоянным чис­лом операндов фиксированного размера;
условные операции ветвления.
133
2. При оценке времени выполнения элементарных функций сле-
ϕ
|.
ϕ
ϕ
дует проявлять осторожность. Например, если значение функции sin надо вычислить при небольшом значении
Θ
мени
(1), необходимом для реализации этой операции, разумно. Од-
нако при очень больших значениях |
ϕ, то предположение о вре-
| для нахождения значения sin
ϕ
потребуется цикл, число повторений которого будет зависеть от |
3. Операнд фиксированного размераэто операнд, для хране-
Θ
ния которого достаточно
(1) памяти.
Пример П.4.
Рассмотрим пример, иллюстрирующий сравнение
двух алгоритмов решения одной и той же задачи.
Пусть требуется для заданного значения ние полинома
P(x) = an x
n
+ a
n – 1
x
n – 1
+ … + a
данными этой задачи являются значение полинома и значения
становкой
a
, a
, …, a1, a0. Пусть для хранения каждого коэффициента
n
n – 1
b достаточно одной условной единицы памяти.
Проанализируем алгоритм
x = b в P(x) и алгоритм A
A1 вычисления значения P(b) под-
вычисления того же значения при
2
x = b вычислить значе-
2
x
+ a
x + a
1
. Исходными
0
2
b и значения коэффициентов
помощи схемы Горнера. Считаем, что длина входа этих алгоритмов определяется значением n (точнее, равна n = n + 2). Выразим функции временной сложности этих алгоритмов через
Для нахождения a
i
b
надо выполнить i операций умножения.
i
Общее число операций умножения, которые выполняет алгоритм
n.
A
1
определяет формула
,
)1(
+
.
2
Для вычисления суммы
12...)1(
=++++nnnn
n + 1 слагаемых требуется выполнить
n операций сложения. Таким образом, общее число операций алго-
ритма
A
равно
1
1
2
)1(
nn
+
)(
nt Θ=
=
Для вычисления значения
P(b) = b(b(…(b(an b + a
n – 1
n
=+
P(b) по схеме Горнера
) + a
)3(
nn
+
2
) + … + a2) + a1) + a0
n – 2
2
(П.7)
).(
n
134
достаточно выполнить ния, так что общее число операций для алгоритма
Таким образом, алгоритм ритма
A
, поскольку
1
lim
t
(n) t1(n). Заметим, что согласно утверждению П.3 переход от
т. е.
2
n операций умножения и n операций сложе-
A
составит
2
t
(n) = 2n = Θ(n). (П.8)
2
A
асимптотически быстрее алго-
2
)(
nt
2
lim
=
)(
nt
1
2
n
=
2/)3(
+
lim
nnn
4
+
nnn
,0
=
3
n к n не изменяет оценки (П.7), (П.8) и результат сравнительного
A
анализа алгоритмов
и A2.
1
Далее приведем известные оценки, которые часто используют в анализе алгоритмов [13]. Здесь
i, n, k ∈ Z
.
+
Оценки формул суммирования:
i
i
n
=
n
=
i
=
1
1
i
n
n
i
=
1
i
=
2
i
=
n
3
i
=
=
1
k
i
=
k
0
n
0
i
=
n
i
=
1
nn
+
2
6
nn
4
n
1
+
1
1
k
ni
+
1
i
+
1 n
ni
+
)1(
nnn
1 n
n
2
);(
n
Θ=
)12)(1(
++
22
)1(
n
Θ=
4
);(
n
Θ=
n
Θ=
kk
);2(122
Θ==
nni Θ=+=
Θ+=
);1(ln
3
);(
;1),(
);2(22)1(2
135
+
i
n
1
ii
+
=
1
n
=
Θ=
n
+
1)1(
).1(
Оценки комбинаторных чисел:
n
n
nn
=
e
Θ+
⎟ ⎠
Стирлинга;формула)),/1(1(π2! n
);(!nnon =
!
k
C
n
n
=
knk
2
n
C
n
⎛ ⎜
Θ=
)!(!
2
Θ=
⎜ ⎝
n
)(π2
knk
n
⎞ ⎟
2/π
n
n
n
n
⎞ ⎟
;
knk
)(
knk
.четногодля,
Оценки для экспоненты и логарифма:
n
;1 nen+
1nnn
.)1(ln
+
П.4. Полиномиальные и экспоненциальные
алгоритмы
Традиционно для классификации алгоритмов используют асим­птотический подход, а в качестве
ют множество алгоритмов ций сложности.
Выделяют два сложностных класса: низкозатратные
(полиномиальные) алгоритмы и высокозатратные (экспоненциальные)
алгоритмы.
Алгоритм называют время его работы
сложностного класса рассматрива-
с характерным порядком роста их функ-
полиномиальным, если при длине входа n
t(n) n
c
,
т. е.
t(n) = O
(nc), где c – неотрицательное вещественное число. Значит,
вычислительная сложность полиномиальных алгоритмов ограничена полиномом, быть может, очень большой, но конечной степени.
136
Полиномиальные алгоритмы принято считать
эффективными,
поскольку на практике они обычно работают довольно быстро. Между тем, если степень полинома значительная, то и полиномиальный алго­ритм может работать неприемлемо долго. Поэтому при решении прак­тических задач всегда отдается предпочтение полиномиальному алго­ритму меньшей степени.
Поскольку сумма, произведение и композиция полиномов есть снова полином, то классу полиномиальных алгоритмов
присуще
свойство замкнутости:
– можно комбинировать полиномиальные алгоритмы (один по-
линомиальный алгоритм может вызывать другой полиноми­альный алгоритм в качестве «подпрограммы»), при этом в це­лом время работы алгоритма остается полиномиальным;
– можно выполнять полиномиальные преобразования входа ал-
горитма (например, переходить от одного алфавита к друго­му), оставаясь в границах полиномиальных затрат
на вычис-
ления.
Второй класс алгоритмов – это алгоритмы, функция сложности которых растет быстрее любого полинома: для любого неотрицатель­ного вещественного числа
c всегда
nc t(n).
Такие алгоритмы принято называть
номиальными
).
экспоненциальными (или неполи-
Строго говоря, функция сложности экспоненциальных алго­ритмов может отличаться от экспоненты. Например, алгоритм с функцией сложности
t(n) = Θ
(n!) считают экспоненциальным, учи-
тывая, что
λn
nc e
n!, c > 0, λ > 0.
Ясно, что при
n → ∞ никакое быстродействие современных компью-
теров пока не в силах справиться за реальное время с подобной экс­поненциальной сложностью алгоритма.
Что касается емкостной сложности, то с прикладной точки зре­ния наибольший интерес представляют полиномиальные оценки от длины входа. Ясно, что если алгоритм полиномиальный по времени, то
137
∞=∞
=
он так же является полиномиальным и по памяти: короткое вычисле­ние не может использовать слишком большую память.
Для установления принадлежности функции сложности алго­ритма к одному из двух указанных сложностных классов полезны сле­дующие две леммы, хорошо известные в математическом анализе [9].
Лемма П.1 (о логарифмическом пределе). Пусть
.)(lim,)(lim
nwnu
nn
Тогда если ln
u(n) ln w(n), то u(n) w(n).
Лемма П.2. Для произвольных вещественных положительных
ξ
констант
, ξ2, ξ3, τ1, τ2, τ3 отношение
1
ξξ
21
справедливо, если и только если
ξ
если
= τ1, ξ2 = τ2, ξ3 < τ3.
1
ξ
3
ξ
< τ1, или если ξ1 = τ1, ξ 2 < τ2, или
1
ττ
21
τ
3
)ln(ln)(ln)ln(ln)(ln nnnnnn
Пример П.5. Покажем, что алгоритм с функцией временной
сложности
ξ1ξ
)(ln
nna
aent
1ξ00,,)(
<<>=
является экспоненциальным. Действительно, для произвольных кон­стант
a > 0, 0 < ξ < 1, λ > 0 всегда (1 ξ) > 0 и справедливы пределы
lim
n
c
)ln(
n
nna
e
lim
ξ1ξ
)(ln
)ln(
ln
nc
nan
lim
ξ1ξ
nn
)(ln
ξ
nc
)(ln
ξ
na
.0
===
Следовательно, по лемме П.1
c
).(ntn
Это означает, что рассматриваемый алгоритм экспоненциальный по времени выполнения.
138
П.5. Немного о сложности задач
В общем случае для алгоритмически разрешимой задачи может существовать несколько алгоритмов. С практической точки зрения важно не просто их существование, а поиск среди них наиболее эф­фективного. Под сложностью задачи принято понимать минимальную из сложностей алгоритмов, решающих эту задачу
Обширная алгоритмическая практика свидетельствует, что для некоторых задач удается построить эффективные алгоритмы алго­ритмы полиномиальной сложности. Такие задачи называют
ально разрешимыми
Для многих практически важных задач до сих пор эффективные алгоритмы не найдены, но и не доказана невозможность их существо­вания. Их принято называть мыми)
. Для решения трудноразрешимых задач используют алгоритмы
неполиномиальной сложности. Большинство таких алгоритмов – это варианты полного перебора.
К классу трудноразрешимых задач относится большое число задач алгебры, математической логики, теории графов, теории автоматов и про­чих разделов дискретной математики. В книге М. Гэри и Д. Джонсона [10] приведен список, включающий более чем 300 трудноразрешимых задач, а в настоящее время их известно в несколько раз больше.
Возникает вопрос: неудача в нахождении для трудноразреши­мой задачи полиномиального алгоритма является следствием неуме­ния разработчиков или результатом особого свойства задачи. Ответ на этот вопрос дает теория сложности вычислений:
мость – это свойство самой задачи
Приведенное здесь разбиение множества задач на полиноми­ально разрешимые и трудноразрешимые не является математически точным. В самом деле, используемое словосочетание «алгоритм не удается найти» допускает различное толкование: «алгоритм не суще­ствует вообще» или «алгоритм существует, но пока не найден».
Формальное разделение задач на классы по достижимой эф­фективности их решения познавательным задачам. При этом вместо РАМ использовано точное определение алгоритма в виде машины Тьюринга [1, 15]. Определены два основных класса сложности задач
(или эффективно разрешимыми).
трудноразрешимыми (или труднорешае-
.
осуществлено только применительно к рас-
P и NP.
.
полиноми-
трудноразреши-
139
P (Deterministic Polynomial, детерминированная полино-
Класс
миальная сложность
торых существует алгоритм с полиномиальным временем работы. Существование такого алгоритма подразумевает наличие детермини­рованной машины Тьюринга полиномиальной временной сложности.
Класс
NP (Nondeterministic Polynomial, недетерминированная
полиномиальная сложность
которые могут быть решены за полиномиальное время с помощью недетерминированного алгоритма, т. е. алгоритма, представляемого недетерминированной машиной Тьюринга.
В детерминированной машине Тьюринга вычислительный про­цесс не зависит от случайных факторов и всегда развивается по одной траектории, определяемой исходными данными. Поведение недетер­минированной машины Тьюринга также не зависит факторов. В ней процесс вычислений распадается на два этапа: пер­вый этап состоит в угадывании варианта решения, а второй – в про­верке (верификации) решения, предложенного некоторым угадываю­щим устройством. Для задач класса зуемы за полиномиальное время.
Разница между классом случае у нас имеются разрешающие полиномиальные алгоритмы, а во втором случае мы таких алгоритмов не знаем. Зато знаем, как за по­линомиальное время проверить,
условиям задачи миально проверяемыми
Таким образом, интуитивно класс множество задач, которые можно «быстро» (за полиномиальное время) решить, а класс проверить. Понятно, что решить задачу намного труднее, чем проверить готовое решение. Поэтому очевидно, что P NP. К настоящему времени пока не удалось строго доказать или опровергнуть более сильные соот­ношения: что верно строгое включение: существование в классе полными. Универсальность этих задач состоит в том, что построение по­линомиального алгоритма для любой такой задачи повлечет за собой воз­можность построения полиномиального алгоритма для всех остальных
P = NP, P NP. Однако большинство специалистов полагают,
) – множество распознавательных задач, для ко-
) множество распознавательных задач,
от случайных
NP оба этапа должны быть реали-
P и NP состоит в том, что в первом
удовлетворяет ли готовое решение
. Поэтому задачи класса NP называют также полино-
.
P можно представить себе как
NP – множество задач, решения которых можно «быстро»
P NP. Основанием для этого является
NP универсальных задач, которые названы NP-
140
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]