
Математическая логика и теория алгоритмов.-7
.pdf
8.5 Некоторые алгоритмически неразрешимые проблемы |
211 |
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Теорема 2. Проблема остановки неразрешима.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Этот результат, доказанный впервые независимо друг от друга Тьюрингом (используя машины Тьюринга) и Чёрчем (с помощью ламбда-исчисления) точно формулируется в следующем виде.
Не существует никакого общего алгоритма, позволяющего установить, остановится ли некоторая конкретная программа (на любом языке программирования), запущенная после введения в неё некоторого конкретного набора данных. Смысл этого утверждения для теоретического программирования очевиден: не существует совершенно общего метода проверки программ на наличие в них бесконечных циклов.
С использованием аналогичных идей получены и следующие результаты о неразрешимости. Не существует никакого общего алгоритма, позволяющего установить, вычисляет ли некоторая конкретная программа (на любом языке программирования) постоянную нулевую функцию [3, с. 110]. То же самое справедливо и для любой другой конкретной вычислимой функции. И как следствие, можно утверждать, что вопрос о том, вычисляют ли две данные программы одну и ту же одноместную функцию, также неразрешим. Тем самым получаем, что в области тестирования компьютерных программ мы имеем принципиальные ограничения.
Диофантовы уравнения
Пусть p(z1, . . ., zn) — полином с целыми коэффициентами типа
p(z1, z2) = z15 − 4z1z23 + 32.
Диофантовы уравнения p(z1, . . ., zn) = 0 подразумевают решение в целых числах. Первым диофантовые уравнения систематизировал и изучил греческий математик Диофант в третьем веке нашей эры. Ниже приводится пример системы диофантовых уравнений:
6w + 2x2 − y3 = 0,
5xy − z2 + 6 = 0,
w2 − w + 2x − y + z − 4 = 0.
Вот еще один пример:
6w + 2x2 − y3 = 0,
5xy − z2 + 6 = 0,
w2 − w + 2x − y + z − 3 = 0.
Решением первой системы является, в частности, следующее:
w = 1, x = 1, y = 2, z = 4,
тогда как вторая система вообще не имеет решения. В самом деле, судя по первому уравнению, число y должно быть четным, судя по второму уравнению, число z также должно быть четным, однако это противоречит третьему уравнению, причем при любом w, поскольку значение разности w2 − w — это всегда четное число, а число 3 нечетно.

212 |
Глава 8. Алгоритмы и вычислимые функции |
Со времени Диофанта специалисты по теории чисел нашли решения огромного количества диофантовых уравнений и установили отсутствие решений у массы других уравнений, однако при этом для разных классов уравнений или даже отдельных уравнений приходилось изобретать свой особый метод.
В 1900 году на Парижском международном математическом конгрессе Давид Гильберт выступил с докладом, в котором перечислил 23 наиболее сложные, по его мнению, не решенные на тот момент математические проблемы. В 10-й проблеме предлагалось найти универсальный метод для распознавания разрешимости диофантовых уравнений.
После 20-летних усилий многих математиков советский математик Ю. Матиясевич в 1970 году доказал:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Теорема 3 (отрицательное решение 10-й проблемы Гильберта). Существует такой полином P(x1, x2, . . ., xk), что неразрешимость уравнения
P(x1, x2, . . ., xk) − y = 0
по x1, x2, . . ., xk при любом положительном y алгоритмически непроверяема.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Для таких полиномов можно указать следующие значения (суммарной) степени n и числа m переменных x: (n = 9, m ≈ 1,6 1045 ), (58,4), (38,2), (32,12), (24,36), (19,2668).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Контрольные вопросы по главе 8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.Почему медицинские и кулинарные рецепты во многих случаях нельзя рассматривать как алгоритмы?
2.Покажите, что функция rm(x, y) из параграфа 8.2 главы 8 действительно вычисляет остаток от деления.
3.Существует ли примитивно-рекурсивная функция для вычисления неполного частного при делении с остатком натуральных чисел?
4.Тезис Чёрча говорит о вычислимых функциях. Справедливо ли аналогичное утверждение об алгоритмах?
5.Существует ли какое-нибудь ограниченное множество программ, для которых проблема остановки разрешима?

Рекомендуемая литература к главе 8 |
213 |
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Рекомендуемая литература к главе 8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
[1]Манин Ю. И. Вычислимое и невычислимое / Ю. И. Манин. — М. : Советское радио, 1980. — 128 с.
[2]Мендельсон Э. Введение в математическую логику / Э. Мендельсон. — М. : Наука, 1976. — 320 с.
[3]Катленд Н. Вычислимость. Введение в теорию рекурсивных функций : пер. с англ. / Н. Катленд. — М. : Мир, 1983. — 256 с.
[4]Справочная книга по математической логике : в 4 ч. : пер. с англ. / под ред. Дж. Барвайса. –– М. : Наука, 1982. — Ч. 3: Теория рекурсии. — 360 с.
[5]Барендрегт Х. Ламбда-исчисление. Его синтаксис и семантика / Х. Барендрегт. — М. : Мир, 1985. — 606 с.
[6]Марков А. А. Теория алгоритмов // Труды Мат. ин-та АН СССР. — 1954. — Т. 42.

Глава 9
СЛОЖНОСТЬ ВЫЧИСЛЕНИЙ
Применение математики во многих приложениях требует, как правило, использования различных алгоритмов. Для решения многих задач нетрудно придумать комбинаторные алгоритмы, сводящиеся к полному перебору вариантов. Но здесь вступает в силу различие между математикой и информатикой: в информатике недостаточно высказать утверждение о существовании некоторого объекта в теории и даже недостаточно найти конструктивное доказательство этого факта, т. е. алгоритм. Мы должны учитывать ограничения, навязываемые нам миром, в котором мы живем: необходимо, чтобы решение можно было вычислить, используя объем памяти и время, приемлемые для человека и компьютера.
Если дана задача, как найти для её решения эффективный алгоритм? А если алгоритм найден, как сравнить его с другими алгоритмами, решающими ту же задачу? Как оценить его качество? Вопросы такого рода интересуют и программистов, и тех, кто занимается теоретическим исследованием вычислений.
9.1 Асимптотические обозначения
Введем в первую очередь обозначение, связанное с асимптотической оценкой функций. Хотя во многих случаях эти обозначения используются неформально, полезно начать с точных определений (см. [1] или [2]).
Пусть даны две функции f (n) и g(n) натурального аргумента n, значениями которого являются положительные действительные числа. Говорят, что функция g мажорирует функцию f (или «f растет не быстрее g»), если существует действительное положительное число c и натуральное число n0, такое, что f (n) cg(n) для всех n n0. Если g мажорирует f , это обозначается как f (n) = O(g(n)). Символ O(g(n)) читается как «O большое от g(n)»; при этом говорят, что f (n) имеет порядок O большое от g(n). Также говорят, что функция g является асимптотически верхней оценкой для функции f .

9.1 Асимптотические обозначения |
215 |
Другими словами, f = O(g) означает, что отношение f (n)/g(n) ограничено сверху некоторой константой.
. . . . . . . . . . . . . . . . . . . . . . Пример 9.1 . . . . . . . . . . . . . . . . . . . . .
Проверим, что (1/2)n2 − 3n = O(n2). Согласно определению надо указать положительную константу c и число n0 так, чтобы неравенство
n2 − 3n cn2
2
выполнялось для всех n n0. Разделим на n2:
12 − 3n c.
Видно, что для выполнения неравенства достаточно положить c = 1/2 и n0 = 1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . Пример 9.2 . . . . . . . . . . . . . . . . . . . . .
При a > 0 можно записать an + b = O(n2) (положим, c = a + b и n0 = 1).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . Пример 9.3 . . . . . . . . . . . . . . . . . . . . .
Покажем, что 6n3 ≠ O(n2). В самом деле, пусть найдутся такие c и n0, что 6n3 cn2 для всех n n0. Но тогда n c/6 для всех n n0, что невозможно.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Определение O(g(n)) предполагает, что функции f (n) и g(n) асимптотически неотрицательны, т. е. неотрицательны для достаточно больших значений n. Заметим, что если f и g строго положительны, то можно исключить n0 из определения (изменив константу c так, чтобы для малых n неравенство также выполнялось).
Отыскивая асимптотически верхнюю оценку для суммы, мы можем отбрасывать члены меньшего порядка, которые при больших n становятся малыми по сравнению с основным слагаемым. Заметим также, что коэффициент при старшем члене роли не играет (он может повлиять только на выбор константы c). Например, рассмотрим квадратичную функцию f (n) = an2 + bn + d, где a, b и d — некоторые константы и a > 0. Отбрасывая члены младших порядков и коэффициент при старшем члене, находим, что f (n) = O(n2). Чтобы убедиться в этом формально, можно положить c = 3 × max(a, b, d) и n0 = 1.
Упомянем важный частный случай использования O-обозначений: O(1) обозначает ограниченную сверху функцию.

216 Глава 9. Сложность вычислений
Обозначение O( ) можно считать аналогом . Аналоги для и = также существуют: f (n) = Ω(g(n)) (f растет не медленее g, с точностью до константы) означает g(n) = O(f (n)); f (n) = Θ(g(n)) (f и g имеют одинаковый порядок роста) означает что f (n) = O(g(n)) и g(n) = O(f (n)).
Работая с символами O, Ω и Θ, мы имеем дело с односторонними равенствами — эти символы могут стоять только справа от знака =.
Отношение «O большое» для функций обладает рефлексивностью и транзитивностью: f (n) = O(f (n)), f (n) = O(g(n)) и g(n) = O(h(n)) влечет f (n) = O(h(n)). Очевидно, такие же свойства у отношений f (n) = Ω(g(n)) и f (n) = Θ(g(n)), но последнее еще симметрично.
Рассмотрим отношение «O большое» для сравнения асимптотического роста конкретных функций.
Для положительных целых чисел r и s следующую теорему можно доказать методом индукции. Справедливость утверждения теоремы для положительных рациональных чисел r и s можно показать, не используя логарифмы.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Теорема 1. Если r и s — действительные числа, r s и n > 1, тогда nr ns. Следовательно, nr = O(ns).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Доказательство. Функция ln(x) — возрастающая, поэтому a b тогда и только тогда, когда ln(a) ln(b). Отсюда nr ns тогда и только тогда, когда ln(nr) ln(ns), что, в свою очередь, выполняется тогда и только тогда, когда r ln(n) s ln(n), т. е. тогда и только тогда, когда r s, поскольку ln(n) для n > 1 — величина положительная.
Следующие теоремы показывают, что свойство функции иметь порядок O(g(n)) замкнуто относительно операций сложения и умножения на число.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Теорема 2. Если f (n) = O(g(n)), то kf (n) = O(g(n)).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Доказательство. По определению, f (n) cg(n) для некоторого положительного действительного числа c и всех n n0. Поэтому
kf (n) ckg(n)
и cf (n) = O(g(n)).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Теорема 3. Если f (n) = O(g(n)) и h(n) = O(g(n)), то (f + h)(n) = = O(g(n)).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Доказательство. По определению, для некоторого постоянного k и некоторого целого числа m1 имеем f (n) kg(n) для всех n > m1. Опять же по определению, для некоторого постоянного l и некоторого целого числа m2 имеем h(n) lg(n) для всех n > m2. Пусть m = max(m1, m2). Следовательно, для всех n > m

9.1 Асимптотические обозначения |
217 |
f (n) + h(n) kg(n) + lg(n) = (k + l)g(n)
и (f + g)(n) = O(.g. (. n. .).).. |
. |
. |
. |
|
|
. |
|
. |
. |
|
. |
. . |
. |
|
. |
|
.(. |
n. |
). =. . |
O. . |
(. |
g. |
(. |
n. |
).). |
. |
и h. . . |
(. |
n. |
). .=. . |
|
O. . |
(. |
.(. .).). |
,.то. . . |
(. |
f. |
.×. |
h. . |
)(. . |
n. |
). =. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O g e n . |
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Теорема 4. Если f |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
e n |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
=. . |
. . |
(. |
. |
|
. |
×. . )(. . . .). |
. . |
. |
. |
|
|
. . |
|
|
. |
|
. |
|
|
. |
|
. |
. |
|
. |
|
. |
|
|
. |
. |
. |
|
. . |
|
|
. |
|
. |
. . |
. |
|
. |
|
. |
. |
. |
. |
|
|
. |
. |
|
. . |
. |
. . |
. |
. . . |
. |
. |
|
. . |
. |
. |
. |
. |
|
. |
. |
. . |
|||||||||||||
|
|
|
Доказательство. По определению, для некоторого постоянного k и некоторого |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
целого числа m1 имеем f |
|
|
|
n |
|
|
|
|
kg n |
|
|
|
|
для всех n |
|
|
|
m1. Опять же по определению, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
для некоторого |
постоянного l и некоторого целого числа m |
|
|
имеем h n |
|
|
|
le n |
|
|
для |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
) |
|
|
|
( ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
m ( |
|
) |
|
( |
) |
|
|
|||||||||||||||||||||||||||||||
всех n |
> |
m2. Пусть m |
|
|
|
max |
|
m1, m2 |
) |
. Следовательно, для всех n |
> |
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f= n |
|
|
|
|
|
(h n |
|
|
|
|
|
|
|
|
|
n |
|
|
le |
|
|
n |
|
|
|
|
|
kl |
|
g |
|
n |
|
|
|
|
e |
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(n) |
.× ( ) |
|
kg |
( |
) |
( |
) = ( |
) |
( |
) × |
( |
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||
и |
( |
f |
× |
g |
)( |
n |
) = |
O |
( |
g |
× |
e |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
)( |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
Следующая теорема устанавливает мажоранту для полинома. |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Теорема 5. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 + |
|
|
|
+ a.1.n + a. |
0.,. .то p(n) = O(n.k) |
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.Если. . . . .p.(.n. ). .=. .a.k.n.k.+. .a.k.−.1 |
.n.k−. |
.. |
.. |
. |
. |
. |
. |
. |
|
. |
. |
. . |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Доказательство. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p n |
) |
aknk |
|
+ |
ak |
− |
1nk−1 |
+ |
. . . |
+ |
a1n |
+ |
a0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
в силу |
( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
неравенства треугольника: A |
|
|
|
B |
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
aknk |
|
|
ak 1nk−1 |
+ |
. . . |
+ |
a1n + a0 + ) |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
k |
|
|
|
|
k |
|
|
|
|
|
|
k 1 |
|
+ |
|
nk |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ |
|
|
= |
|
|
|
|
|
|
a nk |
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
nk |
|
|
a |
|
−. |
|
nk |
|
1 |
|
|
−. |
|
. |
|
. |
|
|
|
|
|
|
a1 |
|
n |
|
|
a0 |
|
|
(по теореме 1) |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
ak n |
|
|
= ak |
|
1 |
|
n+ |
|
|
. |
|
|
|
|
a1 |
|
+ +0 |
|
|
|
|
|
+ |
|
k |
|
|
k |
|
1 |
+ + |
1 |
+ |
|
0 |
) |
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||
и p n |
|
|
|
O |
|
nk |
) |
. + |
|
− |
|
|
|
+ |
|
|
+ |
|
|
|
|
|
|
+ |
|
|
|
|
|
|
|
|
|
= ( |
|
|
+ |
|
|
|
− |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||
|
|
( |
) = |
( |
|
|
|
Теорема. . . . . . . . . .6...Для. . . . .целых. . . . . . .чисел. . . . . .a. . и. . .b., .больших. . . . . . . . . .единицы,. . . . . . . . . .log. . . |
a(. |
n. . |
). =. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= |
O |
( |
logb |
( |
n |
).) |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. . |
. |
|
. |
. |
. |
|
. |
|
. |
. . |
. |
. |
|
|
. . |
|
|
. |
|
. |
|
|
. |
|
. |
. |
|
. |
|
. |
|
|
. |
. |
. |
|
. . |
|
|
. |
|
. |
. . |
. |
|
. |
|
. |
. |
. |
. |
|
|
. |
. |
|
. . |
. |
. . |
. |
. . . |
. |
. |
|
. . |
. |
. |
. |
. |
|
. |
. |
. . |
||||||||||
|
|
|
Доказательство. Следует непосредственно из равенства |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logb |
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
loga |
( |
n |
) = |
|
loga |
(b) |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
. |
. . |
|
. |
. |
|
. |
. |
. |
. |
|
|
. |
|
. |
. |
|
. |
. . |
. |
. |
|
|
. . |
|
|
. |
|
|
. |
. |
|
. |
|
|
. |
. |
. |
(. . |
). |
|
. |
. . |
. |
|
. |
|
. |
. |
. |
. |
|
|
. |
. |
|
. . |
. |
. . |
. |
. . . |
. |
. |
|
. . |
. |
. |
<. . |
2.n. .и,. |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Теорема 7. Пусть n — неотрицательное целое число. Тогда n |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
следовательно,. . . . . . . . . . . . . . . .n. .=.O. .(.2.n.)... |
|
. |
|
|
. |
. |
. |
|
. . |
|
|
. |
|
. |
. . |
. |
|
. |
|
. |
. |
. |
. |
|
|
. |
. |
|
. . |
. |
. . |
. |
. . . |
. |
. |
|
. . |
. |
. |
|
. |
. |
. . |
Доказательство. Воспользуемся индукцией, имея для n = 0, 0 < 20 = 1. Допустим, что k < 2k , тогда

218 Глава 9. Сложность вычислений
и, по индукции, n |
|
2n . |
|
|
k + 1 k + k 2k + 2k = 2k+1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||
|
|
Следующие |
теоремы дают ответ на вопрос о том, какие функции могут высту- |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
< |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
пать в роли мажорант для других функций. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |
|||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
.Теорема. . . . . . . .8. |
. . Для. . . . .целых. . . . . .чисел. . . . . .a. ,. .больших. . . . . . . . .единицы,. . . . . . . . .log. . .a.(.n.). .=.O. .(.n.)... . |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
Доказательство. Согласно теореме 7 имеет место неравенство n |
|
2n . Поэтому |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
log2 |
|
n |
|
|
|
log2 |
|
2 |
n |
|
|
n и log2 |
|
|
n |
|
|
|
|
|
O |
|
n |
|
. Поскольку по теореме 6 |
имеем log |
|
|
|
n |
||||||||||||||||||||||||||||||
( |
) |
2< |
|
( |
|
) = |
( |
) = |
( |
) |
|
|
< |
|
|
|
|
|
a |
( ) = |
||||||||||||||||||||||||||||||||||||||||
O |
|
|
n |
)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
a |
|
n |
|
O |
|
n |
|
|
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
= |
|
log |
( |
, то по транзитивности получаем log |
|
( |
) = |
( |
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||||||
( |
|
|
|
|
|
|
|
. |
. . |
. |
. |
. . |
. . . . |
. |
. |
|
. |
. |
. |
. |
. |
|
. |
. |
|
. |
. . |
. |
. . . . . . . . . |
. |
. |
. . |
. |
. |
. |
. |
. . |
. |
. |
. |
. |
. . |
. |
. |
. . |
<. . |
. . . . |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Теорема 9. Пусть n — неотрицательное целое число, тогда n! |
nn и, |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
следовательно, n! |
|
|
O nn . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Теорема 10. Пусть=a |
|
|
и n — неотрицательное целое число, тогда |
||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
(1 ) |
|
|
|
|
|
( |
|
|
). = |
|
( |
|
|
|
( |
|
).) |
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
. . . . |
(. |
. . |
). . . . |
n.log. . .a. |
(. |
. |
|
). . |
и,.>.следовательно,. . . . . . . . . . . . . . .log. . .a. |
. |
. |
. . |
. |
. |
. . |
. |
. |
|
. |
|
. . . . |
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
loga |
|
n! |
|
|
n |
|
|
|
n! |
|
|
|
|
O n loga |
|
n |
|
. |
|
|
|
||||||||||||||||||||||||||
|
|
Благодаря введенной символике мы можем заменить 7n2 |
|
|
3n 1 на Θ n , прене- |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
правил такого рода замен: |
|||||||||||||||||||||
брегая остальными слагаемыми. Вот несколько общих |
|
|
|
+ |
|
n |
2+ |
|
|
n |
3 |
|
( |
|
) |
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||
|
|
1. |
Постоянные множители можно опускать. Например, |
|
π |
+ ε |
|
можно заме- |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
нить на n3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
n |
рас- |
|||||||||||||||||||
|
|
2. Любая экспонента растет быстрее любого полинома. Так, например, 2 |
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
тет быстрее n1000. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
3. |
Любой полином растет быстрее любого логарифма. Например, n (и даже |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
√ |
|
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
|
|
) |
3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
n) растет быстрее |
log n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
|
Покажем теперь, как мы можем использовать O-обозначения для оценки коли- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
чества определенных действий в алгоритмах. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||
. . . . |
|
. |
. . |
. |
. . |
|
. |
|
. . |
. |
. |
. |
. |
. . |
. |
. |
. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример 9.4 |
|
|
|
|
. . . . . . . . . . . . . . . . . . . . . |
Определим число арифметических операций, необходимых для сложения двух матриц.
Пусть матрицы имеют размеры m×k. Тогда алгоритм сложения матриц A+B = C можно описать на Паскале следующим образом:
for i := 1 to m do for j := 1 to k do
C[i, j] := A[i, j] + B[i, j];
Как видим, сложение выполняется для каждого i и каждого j. Поскольку i принимает m значений, а j принимает k значений, то выполняется mk операций сложения. Пусть n = max(m, k). Тогда число выполняемых арифметических операций имеет порядок O(n2).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.1 Асимптотические обозначения |
219 |
. . . . . . . . . . . . . . . . . . . . . . |
Пример 9.5 . . . . . . . . . . . . . . . . . . . . . |
Определим число арифметических операций, необходимых для умножения двух матриц.
Пусть матрицы A и B имеют размеры m × p и p × k соответственно. Тогда алгоритм умножения матриц A × B = C можно описать на Паскале следующим образом:
for i := 1 to m do for j := 1 to k do
begin C[i,j] := 0;
for s := 1 to p do
C[i, j] := C[i, j] + A[i, s] * B[s, j]; end;
Поскольку s принимает значения от 1 до p, то выполняется p операций сложения и p операций умножения. Величина s изменяется от 1 до p для каждого i и каждого j, поэтому s пробегает значения от 1 до pmk раз. Таким образом, выполняется mkp операций сложения и столько же операций умножения. Следовательно, всего выполняется 2mkp операций. Пусть n = max(m, k, p). Тогда число выполняемых арифметических операций имеет порядок O(n3).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . |
Пример 9.6 . . . . . . . . . . . . . . . . . . . . . |
Сравним количество операций, которое требуется для непосредственного вычисления значения многочлена традиционным способом и по схеме Горнера.
Пусть требуется вычислить p(c), где p(x) = anxn + an−1xn−1 + . . . + a1x + a0. Если p(c) вычисляется непосредственно, то для подсчета ck требуется выполнить k − 1 операций умножения. Еще одна операция нужна для умножения на ak, так что
вычисление akxk требует k операций умножения. Таким образом, нужно выполнить 1 + 2 + . . . + n = n(n − 1)/2 умножений. Для того чтобы найти сумму n + 1 слагаемых, требуется выполнить n сложений, так что общее число арифметических операций равно n(n − 1)/2 + n и имеет порядок O(n2).
При вычислении полинома a4x4 + a3x3 + a2x2 + a1x + a0 по схеме Горнера мы переписываем полином в виде x (x (x (a4x + a3) + a2) + a1) + a0 и замечаем, что выражение включает четыре операции умножения и четыре операции сложения. Очевидно, в общем случае
p(x) = x (x (. . .(x (anx + an−1) + an−2) + . . .a2) + a1) + a0
включает n операций сложения и n операций умножения. Таким образом, общее число арифметических операций равно 2n и имеет порядок O(n).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

220 Глава 9. Сложность вычислений
9.2 Алгоритмы и их сложность
Класс однородных вычислительных задач мы будем называть проблемой (также используется понятие «массовая задача» или «абстрактная задача»). Индивидуальные случаи проблемы Q мы будем называть частными случаями проблемы Q. Мы можем, например, говорить о проблеме умножения матриц. Частные случаи этой проблемы суть пары матриц, которые нужно перемножить.
Более формально мы принимаем следующую абстрактную модель вычислительной задачи. Абстрактная задача есть произвольное бинарное отношение Q между элементами двух множеств — множества условий (или входных данных) I и множества решений S. Например, в задаче умножения матриц входными данными являются две конкретные матрицы-сомножители, а матрица-произведение является решением задачи. В задаче поиска кратчайшего пути между двумя заданными вершинами некоторого неориентированного графа1 G = (V, E) условием (элементом I) является тройка, состоящая из графа и двух вершин, а решением (элементом S) — последовательность вершин, составляющих требуемый путь в графе. При этом один элемент множества I может находиться в отношении Q с несколькими элементами множества S (если кратчайших путей между данными вершинами несколько).
Нам бы хотелось связать с каждым частным случаем проблемы некоторое число, называемое его размером, которое выражало бы меру количества входных данных. Например, размером задачи умножения матриц может быть наибольший размер матриц-сомножителей. Размером задачи о графах может быть число ребер данного графа.
Решение задачи на компьютере можно осуществлять с помощью различных алгоритмов. Прежде чем подавать на вход алгоритма исходные данные (т. е. элемент множества I), надо договориться о том, как они представляются «в понятном для компьютера виде»; мы будем считать, что исходные данные закодированы последовательностью битов. Формально говоря, представлением элементов некоторого множества M называется отображение e из M во множество битовых строк. Например, натуральные числа 0, 1, 2, 3, . . . обычно представляют битовыми строками 0, 1, 10, 11, 100, . . . (при этом, например, e(17) = 10001).
Фиксировав представление данных, мы превращаем абстрактную задачу в строковую, для которой входным данным является битовая строка, представляющая исходное данное абстрактной задачи. Естественно считать размером строковой задачи длину строки.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Будем говорить, что алгоритм A решает строковую задачу за время O(T(n)), если на входном данном битовой строки длины n алгоритм работает время O(T(n)). Будем называть оценку O(T(n)) асимптотической временной сложностью алгоритма A.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1О графах смотрите, например [3].