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

Математическая логика и теория алгоритмов.-7

.pdf
Скачиваний:
28
Добавлен:
05.02.2023
Размер:
2.34 Mб
Скачать

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

1nk1

+

. . .

+

a1n

+

a0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

в силу

(

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

неравенства треугольника: A

 

 

 

B

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aknk

 

 

ak 1nk1

+

. . .

+

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 + an1xn1 + . . . + 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 + an1) + an2) + . . .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].