- •Глава 1
- •§ 1. Затраты алгоритма для данного входа, алгебраическая сложность
- •§ 1. Затраты алгоритма для данного входа
- •§ 1. Затраты алгоритма для данного входа
- •§ 1. Затраты алгоритма для данного входа
- •§ 1. Затраты алгоритма для данного входа
- •§ 2. Асимптотические оценки (формализм)
- •§ 2. Асимптотические оценки (формализм)
- •§ 2. Асимптотические оценки (формализм)
- •§ 3. Асимптотические оценки (два примера) 23
- •§ 3. Асимптотические оценки (два примера)
- •§ 3. Асимптотические оценки (два примера)
- •§ 3. Асимптотические оценки (два примера)
- •§ 3. Асимптотические оценки (два примера)
- •§ 4. Длина числа как возможный размер входа
- •§ 4. Длина числа как возможный размер входа
- •§ 4. Длина числа как возможный размер входа
- •§ 4. Длина числа как возможный размер входа
- •Глава 2
- •§ 5. Понятие сложности в среднем
- •§ 5. Понятие сложности в среднем
- •Глава 2. Сложность в среднем
- •§ 5. Понятие сложности в среднем
- •Глава 2. Сложность в среднем
- •§ 6. Сортировка и конечные вероятностные пространства.
- •§ 6. Сортировка и конечные вероятностные пространства 47
- •Глава 2. Сложность в среднем
- •§ 6. Сортировка и конечные вероятностные пространства 49
- •Глава 2. Сложность в среднем
- •§ 6. Сортировка и конечные вероятностные пространства 51
- •Глава 2. Сложность в среднем
- •§ 7. Пример медленного роста сложности в среднем
- •§ 7. Пример медленного роста сложности в среднем в сравнении со сложностью в худшем случае
- •Глава 2. Сложность в среднем
- •§ 7. Пример медленного роста сложности в среднем 55
- •Глава 2. Сложность в среднем
- •§ 7. Пример медленного роста сложности в среднем
- •Глава 2. Сложность в среднем
- •§ 8. Функция затрат рандомизированного алгоритма
- •§ 8. Функция затрат рандомизированного алгоритма
- •Глава 2. Сложность в среднем
- •§ 8. Функция затрат рандомизированного алгоритма
- •Глава 2. Сложность в среднем
- •§ 8. Функция затрат рандомизированного алгоритма
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 2. Сложность в среднем
- •Глава 3
- •§ 9. Функции, убывающие по ходу выполнения алгоритма
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 75
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 77
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 79
- •§ 9. Функции, убывающие по ходу выполнения алгоритма 81
- •§ 10. Качество оценок
- •§ 10. Качество оценок
- •§ 10. Качество оценок
- •§ 10. Качество оценок
- •§ 11. Завершимостъ работы алгоритма
- •§ 11. Завершимость работы алгоритма
- •§ 11. Завершимостъ работы алгоритма
- •§ 11. Завершимостъ работы алгоритма
- •§ 12. Вложенные циклы (дополнительные примеры)
- •§ 12. Вложенные циклы (дополнительные примеры)
- •§ 13. Нецелые размеры входа и непрерывные оценочные функции 97
- •§ 13. Нецелые размеры входа и непрерывные оценочные функции
- •§ 13. Нецелые размеры входа и непрерывные оценочные функции 99
- •Глава 4
- •§ 14. Понятие нижней границы сложности
- •§ 14. Понятие нижней границы сложности
- •§ 15. Оптимальные алгоритмы
- •§ 15. Оптимальные алгоритмы
- •§ 15. Оптимальные алгоритмы
- •§ 15. Оптимальные алгоритмы
- •§ 16. Асимптотические нижние границы. Алгоритм, оптимальный по порядку сложности
- •§ 16. Асимптотические нижние границы
- •§ 16. Асимптотические нижние границы
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем
- •§ 17. Нижняя граница сложности в среднем 125
- •§ 18. Нижние границы сложности рандомизированных алгоритмов. Принцип Яо
- •§18. Нижние границы сложности рандомизированных алгоритмов 127
- •Глава 5
- •§ 19. Битовые операции
- •Глава 5. Битовая сложность
- •§ 19. Битовые операции
- •Глава 5. Битовая сложность
- •§ 20. Наивная арифметика: умножение
- •§ 20. Наивная арифметика: умножение
- •Глава 5. Битовая сложность
- •§ 20. Наивная арифметика: умножение
- •Глава 5. Битовая сложность
- •§ 21. Наивная арифметика: деление с остатком
- •§ 21. Наивная арифметика: деление с остатком
- •Глава 5. Битовая сложность
- •§ 21. Наивная арифметика: деление с остатком
- •Глава 5. Битовая сложность
- •§ 22. Модулярная арифметика
- •§ 22. Модулярная арифметика
- •Глава 5. Битовая сложность
- •§ 22. Модулярная арифметика
- •Глава 5. Битовая сложность
- •§ 22. Модулярная арифметика
- •Глава 5. Битовая сложность
- •§ 23. Булева арифметика
- •§ 23. Булева арифметика
- •Глава 5. Битовая сложность
- •§ 23. Булева арифметика
- •Глава 5. Битовая сложность
- •Глава 5. Битовая сложность
- •Глава 6
- •§ 24. Простейшие рекуррентные уравнения
- •§ 24. Простейшие рекуррентные уравнения
- •§ 24. Простейшие рекуррентные уравнения
- •§ 25. Об одном классе нелинейных рекуррентных соотношений 163
- •§ 25. Об одном классе нелинейных рекуррентных соотношений
- •§ 25. Об одном классе нелинейных рекуррентных соотношений 165
- •§ 25. Об одном классе нелинейных рекуррентных соотношений 167
- •§26. Асимптотические оценки решений рекуррентных неравенств 169
- •§ 26. Асимптотические оценки решений рекуррентных неравенств
- •§ 26. Асимптотические оценки решений рекуррентных неравенств 171
- •§ 27. Добавление нулей
- •§ 27. Добавление нулей 173
- •§ 27. Добавление нулей 175
- •§ 27. Добавление нулей
- •§ 27. Добавление нулей 179
- •Глава 7 Сводимость
- •§ 28. Линейная сводимость
- •Глава 7. Сводимость
- •§ 28. Линейная сводимость
- •Глава 7. Сводимость
- •§ 28. Линейная сводимость
- •Глава 7. Сводимость
- •§ 29. Линейная сводимость и нижние границы сложности
- •§ 29. Линейная сводимость и нижние границы сложности 191
- •Глава 7. Сводимость
- •§ 29. Линейная сводимость и нижние границы сложности 193
- •Глава 7. Сводимость
- •§ 30. Классы PиNp
- •§ 30. Классы р и np
- •Глава 7. Сводимость
- •§ 30. Классы PuNp
- •Глава 7. Сводимость
- •§ 30. Классы PuNp
- •Глава 7. Сводимость
- •§ 31. Существование задач распознавания, не принадлежащих р 201
- •§ 31. Существование задач распознавания, не принадлежащих р. Связь моделей мт и рам
- •Глава 7. Сводимость
- •§ 31. Существование задач распознавания, не принадлежащих р 203
- •Глава 7. Сводимость
- •§ 32. Полиномиальная сводимость. Np-полные задачи
- •§ 32. Полиномиальная сводимость. Np-полные задачи
- •Глава 7. Сводимость
- •Глава 7. Сводимость
- •Глава 7. Сводимость
- •Глава 7. Сводимость
- •Глава 1. Сложности алгоритмов как функции числовых аргументов. Сложность в худшем случае
- •119002, Москва, Большой Власьевский пер., 11. Тел. (499) 241-74-83
§ 4. Длина числа как возможный размер входа
35
дущего), и подсчету произведения и тех q, для которых /3; = 1:
q:=a; и:=1;
for i = 0 to fc-1 do
if /3i = l then u:=u-q fi;
q :=q2 od u:=u- q
Например, a11 = a8 • a2 • a (5 умножений), так как (11)10 = (1011)2.
Займемся сложностью по числу умножений этого алгоритма. Используя А(п) для обозначения битовой длины п и обозначение А*(п) для числа единиц в двоичной записи п, мы легко получаем следующее.
Если рассматривать п как размер входа бинарного алгоритма вычисления ап, neN+, то сложность TRS(n) по числу умножений для этого алгоритма равна А(п) + А*(п) - 2. Если в качестве размера входа рассматривать т = Х{п), то сложность Т^{т) по числу умножений равна 2т - 2.
Для 7^s(m) и TRS(n) имеем очевидные асимптотические оценки
rR*s(m) = e(m), rRS(n) = e(logn).
Заметим, что мы не можем вывести из 7^ (т) = 2т - 2 равенство TRS(n) = A(n) + A*(n) - 2, хотя обратный вывод очевиден.
В рассмотренном алгоритме предполагается, что показатель степени п задан как массив двоичных цифр. Если показатель п задан как число, то его двоичные цифры 130,13г, ... могут быть получены одна за другой нахождением соответствующих частных и остатков от деления на 2. Это не изменит оценок 6(logn), 6(m) как для общего числа операций, так и для числа мультипликативных операций. Но при этом бинарный алгоритм возведения в степень может быть использован, например, для вычисления Ап, где А—матрица большого порядка и т. д. В этом смысле те операции, которые подразумеваются в командах u:=u-q и q:=q2, естественно подсчитывать отдельно и именно их считать составляющими главные затраты алгоритма.
Задачу вычисления ап в некотором множестве с ассоциативным умножением (т. е. в полугруппе) часто формулируют как задачу об аддитивных цепочках для п, т. е. о наборах целых чисел пг < п2 < ... < пк, в которых
пг = 1, пк = п;
для каждого i, 1 < i ^ к, найдутся s, t такие, что l^t^s<i и щ + + ns = щ.
36 Глава 1. Сложности алгоритмов как функции числовых аргументов
Каждая аддитивная цепочка для n задает способ вычисления an. Например, аддитивная цепочка 1,2,3,4,8,11 для 11 задает тот способ, который соответствует бинарному алгоритму возведения в степень. Задача быстрого возведения в степень n с помощью умножений—это фактически задача построения короткой аддитивной цепочки для n.
Обозначение l(n) закреплено за длиной самой короткой аддитивной цепочки для n. Бинарный алгоритм возведения в степень использует свою специфическую аддитивную цепочку (назовем ее бинарной). Бинарная цепочка не для всех n имеет длину l(n) (см. задачу 19). Но, как мы выясним несколько позже, длина бинарной цепочки и l(n) имеют одинаковый порядок. Помимо этого бинарные цепочки легко и быстро строятся, чего в общем случае нельзя сказать об аддитивных цепочках длины l(n).
Некоторые предположения относительно функции l(n) до настоящего времени не доказаны, хотя и подтверждены проверкой для многих n. К числу таковых относится, например, гипотеза Шольца—Брау-эра: l(2n-1)^n-1 + l(n) для всех n > 0.г
Задачи
Для любого neZ выполнено n = I n 2 I + Гn 21, для любого aеЖ выполнено \a]=-[-a\.
Для любых k, n GN+, k > 1, выполнено Llogk n\ + 1 = [logk(n + 1)1.
Указание. Пусть mеN+ таково, что km-1 Цn<km, тогда km-1 <n + 1Цkm. Прологарифмировать по основанию k обе системы неравенств.
3. Предположим, что в нашем распоряжении нет операции обмена a <—>b и мы заменяем ее тремя присваиваниями:
c:=a; a:=b; b:=c;
чему в этом случае равны сложности первого и второго варианта сортировки простыми вставками по суммарному числу сравнений и присваиваний?
4. Пусть полином f(n) = amnm + ... + a1n + a0 имеет ненулевой старший коэффициент am. Тогда
а) f(n) = O(nk)<=>k:?m,
б) f(n) = n(nk)<=>k^m,
в) f(n) = 6(nk)<=>k = m, при k = m также выполнено f(n)~amnm.
Подробнее об аддитивных цепочках см. в [19, разд. 4.6.3].
Задачи
37
Пусть Р(п)—количество простых множителей целого числа п > 1 с учетом кратности. Имеет место точная оценка Р{п) = О (log п).
(Продолжение предыдущей задачи.) Пусть
Р*(т)= шах Р(п),
т = 2,3, ... Верно ли, что P*(m) = 6(m)?
7. Указать все вещественные значения 5, при которых справедлива оценка
а) TTD(n) = 0(.n5),
б) Гтп(п) = П(п5),
в) rTD(n) = 6(n5),
где TTD(n)—сложность алгоритма пробных делений (пример 1.2).
8. Железнодорожный сортировочный узел устроен так, как пока зано на рис. 6. На правой стороне собрано некоторое число вагонов
МИМО
вСЗСТИ»
тупик
Рис. 6. Сортировочный узел.
двух типов (на рис. 6—черные и белые), по п штук каждого типа. Тупик может вместить все 2п вагонов. Требуется, пользуясь тремя сортировочными операциями В, ИЗ, МИМО, собрать вагоны на левой стороне так, чтобы типы вагонов чередовались. Указать такой алгоритм решения этой задачи, сложность которого по числу сортировочных операций при рассмотрении п в качестве размера входа равнялась бы Зп-1.
9. Хорошо известно, что мультипликативная сложность метода Гаусса решения системы п линейных уравнений с п неизвестными допускает оценки
1) 0(п3), 2)|п3+0(п2), 3) в(п3).
38 Глава 1. Сложности алгоритмов как функции числовых аргументов
а) Из какой оценки (указать номер) следуют две остальные?
б) Можно ли из приведенных оценок выбрать такую, которая яв ляется следствием любой из остальных?
в) Является ли оценка П(п3) следствием какой-либо из оценок 1, 2, 3?
10. Для сложности TqS (п) быстрой сортировки выполняется оценка TQS(n) = в(п2). (Обозначение QS происходит от английского названия быстрой сортировки —quick sort.)
Указание. Оценка TQS(n) = fi(n2) устанавливается предъявлением примера. Неравенство TQS(n)<n2 можно доказать индукцией по п, используя то, что при фиксированном neN+ квадратичная функция (т - I)2 + (п - т)2 от т принимает на отрезке [1, п] свое максимальное значение в одном из концов этого отрезка.
11. Алгоритм, использующий только аддитивные операции и срав нения целых чисел для проверки того, является ли данное целое по ложительное п точным квадратом, может быть основан на вычисле нии последовательности значений 1,1 + 3,1 + 3 + 5, ... до появления в ней первого большего или равного п элемента. Сложность по числу аддитивных операций и операций сравнения этого алгоритма (назо вем его sqx) допускает оценку 6(л/п). Сохранится ли эта оценка, если дополнительно использовать операцию нахождения целой части по ловины числа (считается, что затратность этой операции такая же, как у аддитивных операций) для того, чтобы предварительно выяс нять, на какую максимальную степень двойки — четную или нечет ную—делится п (алгоритм sq2)?
12. (Продолжение предыдущей задачи.) Пусть Tsqi(n), Tsq2(n) — сложности, соответственно, первого и второго вариантов рассмотрен ного алгоритма и
Т*(т)= max Tsa(n), Г* (m) = max Tsa (n),
m = 2,3, ...
а) Как связаны значения функций Ts*qi(m) и Ts*2(m)?
б) Имеются ли среди оценок 6(m), O(logm), в(2т/2), 0(2т) такие, которые верны для Ts*2(m), и если да, то какие именно?
13. Изменим в алгоритме Грэхема (пример 3.1) этап удаления вдавленных вершин: будем обходить — возможно, многократно — против часовой стрелки вершины построенной несамопересекающей- ся ломаной и удалять вдавленные вершины до тех пор, пока при очередном обходе не окажется безуспешной попытка найти хотя бы
Задачи
39
одну вдавленную вершину. Сложность этого варианта рассматриваемого этапа алгоритма Грэхема есть Г2(п2), где п — начальное число вершин ломаной (в то время как сложность этого этапа в алгоритме Грэхема есть 0(п)).
14. Рассмотрим в главных чертах алгоритм Шеймоса—Хоя1 построения пересечения Р n Q двух выпуклых многоугольников Р и Q содержащих соответственно Z и т вершин. Считаем, что многоугольники задаются массивами P1,P2,...,Pi и Qi,Q2, •••jQm координат своих последовательных вершин.
Упорядочим множество всех абсцисс обоих многоугольников по возрастанию (для простоты считаем, что абсциссы попарно различны, хотя это и несущественно), в результате получим абсциссы аг < а2 < ... < а1+т (рис. 7). Теперь для каждого i = 1, 2,..., Z + т - 1
a1 a2 a3 ... ai ai+1 ... am+l
Рис. 7. Алгоритм Шеймоса—Хоя (1 = 5, т = 4).
строим пересечение трапеций, вырезаемых прямыми x = at,x = ai+1 в заданных многоугольниках. (В вырожденном случае такая трапеция превращается в треугольник.) Из получившихся пересечений трапеций можно собрать Р n Q, удаляя лишние вершины.
Привлекая дополнительно те или иные структуры данных (массивы, списки, ...) и уточняя по мере надобности какие-то этапы алгоритма, добиться того, чтобы в итоге алгоритм (обозначим его буквами SH) имел следующие сложностные характеристики. Если размер входа — это г = 1 + т, то TSH(r) = 6(г); если размер входа — это s = max{Z, т}, то rs'H(s) = 6(s); если размер входа имеет два параметра
См. [30, гл. 7].
40 Глава 1. Сложности алгоритмов как функции числовых аргументов
I и т, то Tg'ti(l,m) = Q(l + m)—мы рассматриваем операции сравнения и перемещения элементов, арифметические операции, как мультипликативные, так и аддитивные, все вместе. Для пространственной сложности—SSH(г), S'SH(s) или S'^a, т) в зависимости от выбора размера входа — получаем те же оценки в(г), 6(s) или 6(Z + m).
Указание. Если исходные многоугольники представить, например, двунаправленными списками координат последовательных вершин, то список абсцисс (а1,а2, ...,а!+т), аг < а2 < ... < а1+т, можно получить с временными затратами, не превосходящими с0(1 + т).
При определении пространственной сложности можно заметить, что общее число вершин искомого пересечения не превосходит 3(1 + т)—это следует непосредственно из самого алгоритма Шеймоса—Хоя: при построении пересечения двух трапеций может возникнуть не более двух дополнительных вершин.
Расширить алгоритм построения вояжа в ориентированном графе G = (V, Е) с выделенной начальной вершиной v (пример 3.2) так, чтобы помимо вояжа алгоритм выдавал также информацию о том, охватил ли вояж все ребра графа. Размер входа имеет два параметра m=|V|, п = \Е\. Для графов, не содержащих изолированных вершин, т. е. вершин, подобных вершине 7 на рис. 3, сложность расширенного алгоритма должна быть 0(,п).
Задача распознавания существования и фактического построения эйлерова цикла в данном графе для ориентированного случая выглядит так: выяснить, имеется ли в данном ориентированном графе цикл, проходящий по всем ребрам графа по одному разу, и если существует, то построить этот цикл. Воспользовавшись рассмотренным алгоритмом построения вояжа (пример 3.2), дать алгоритм решения этой задачи. Размер входа имеет два параметра m= \V\, п = \Е\. Для графов, не содержащих изолированных вершин, сложность предлагаемого алгоритма должна быть 0(,п).
Путник столкнулся со стеной, простирающейся бесконечно в обе стороны. Имеется дверь в этой стене, но путник не знает ни расстояния до двери, ни направления к ней. Предложить позволяющий добраться до двери алгоритм, сложность которого допускает оценку 0{п), где п — число шагов (неизвестное путнику), изначально отделяющее путника от двери.
Указание. Сумма sk = 1 + q + ... + qk, q > 1, есть величина порядка qk, т.е.sk = e(qk).
18. Будем считать затратностью любого построения на плоскости с помощью циркуля и линейки количество линий (окружностей или
Задачи
41
прямых), проводимых в ходе построения. Рассмотрим задачу построения отрезка, длина которого равна 1/п от длины исходного отрезка, считая п размером входа. Предложить для этой задачи такой алгоритм решения, сложность которого допускает оценку O(logn).1
При п = 15 возможно вычисление ап с меньшим числом умножений, чем требуется бинарному алгоритму возведения в степень.
Пусть двоичная запись числа neN есть ft...ft/Зо. Алгоритм
и:=1;
for i = k downto 0 do
и:=и-и;
if Pi = l then u:=u-afi od
вычисляет an. Сравнить сложность этого алгоритма по числу умножений с аналогичной сложностью бинарного алгоритма возведения в степень, рассмотренного в примере 4.2, при использовании п или соответственно т = А(п) в качестве размера входа. (Описанный в этой задаче алгоритм является еще одним вариантом бинарного алгоритма возведения в степень.)
Для функции Z(n), определенной в конце § 4, выполнено 1{аЪ) s= sSZ(a)+Z(b)-l для всехa,beN+.
(Продолжение предыдущей задачи.) Можно ли утверждать, что Z(ab) = Z(a)+Z(b)-l для всехa,beN+?
1 Разбор задач на построение с точки зрения их сложности содержится, например, в [11, §15].