- •Глава 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
§ 27. Добавление нулей 179
выполненное в случае m = sk, fceN, и равенство
r«(m) = rW(s'l0&ml)J
выполненное при произвольном meN+, приводят к оценке Т^(т) = = 0(mlogs(2s-i:)) для битовой сложности алгоритма, использующего разбиение на s частей. Может быть также показано, что
r(s)(m) = e(mlog»(2s-1)). (27.14)
Очевидно,
logs(2s - 1) = logs 2s(l - ^) = 1 + logs 2 + logs(l - ^) •
Отсюда
limlog,(2s-l) = l.
Это означает, что для любого е > О можно найти целое s ^ 2 такое, что умножение Тоома с разделением на s частей (битовая длина числа предполагается равной sk, fceN) будет иметь битовую сложность, допускающую оценку 6(т1+5) при некотором 5 таком, что 0 < 5 ^ е; разумеется, для битовой сложности этого алгоритма справедлива оценка 0(.т1+П.
Скажем коротко об основной идее алгоритма Тоома, приводящей к неравенству (27.13). Если, как предполагалось, битовая длина каждого из сомножителей а,Ъ есть sk, fceN, то последовательность двоичных цифр каждого из сомножителей а, Ъ можно разбить на s групп по s-1 цифр:
а3-ъ ■■■> ai> ао> bs-1, ...,Ьг,Ъ0. Сами сомножители а, Ъ суть значения полиномов
А(х) = а-х"-1 + ...+а1х + а0, В(х) = Ь-х*-1 + ... + Ъгх + Ъ0
в точке х0 = 2s*-1. Полином С(х), равный произведению А(х)В(х), есть полином степени не выше чем 2s - 2 (мы не утверждаем, что эта степень равна 2s - 2, так как возможно, что к изначально заданным целочисленным сомножителям спереди дописывались нули), и достаточно знать значения С (х) в 2s- 1 точках (узлах интерполяции) для того, чтобы затем, например, с помощью интерполяционной формулы Лагранжа найти значение
СС2**-1), (27.15)
180 Глава 6. Рекуррентные соотношения и сложность алгоритмов
равное ab. Тоом показал, что если в качестве узлов интерполяции xъ x2,..., x2s-i взять числа
-(s-l),-(s-2),...,-l,0,1, ...,s-2,s-l,
рекурсивно с помощью рассматриваемого алгоритма найти
A(xi\ B{xi), C{xi)=A{xi)B{xi), i = l,2,...,2s-l,
и затем, пользуясь интерполяционной формулой Лагранжа, найти значение (27.15), то это приведет к (27.13), (27.14). Такое использование интерполяции заключает в себе требуемое обобщение алгоритма Карацубы.
В 1972 г. Шенхаге и Штрассен, основываясь на идее Тоома использования интерполяции полиномов в алгоритмах умножения целых чисел, получили алгоритм умножения, битовая сложность которого допускает оценку O{m log m log log m), мы уже упоминали этот алгоритм в §21. Функция m log m log log m растет медленнее, чем m1+5 при любом 5 > 0. Улучшение достигнуто за счет привлечения интерполяции специального вида — так называемого быстрого преобразования Фурьег. До настоящего времени результат Шенхаге—Штрассе-на остается рекордным. Шенхаге на основе этого алгоритма умножения предложил алгоритм2 нахождения нод(a0,aг), сложность которого допускает оценку O{m log2 m log log m), где m — битовая длина большего числа a0 (в примере 21.2 было показано, что алгоритм Евклида имеет сложность Θ(m2)).
Необходимо сказать, что преимущества по времени выполнения рассмотренных алгоритмов перед наивным умножением и алгоритмом Евклида проявляются лишь при очень больших значениях m.
С умножением матриц положение таково, что обобщения алгоритма Штрассена в духе обобщения, предложенного Тоомом для алгоритма Карацубы, до сих пор не найдено. Используя другие идеи, Д. Коп-персмит и С. Виноград в 1987 г. предложили алгоритм со сложностью O(n2,376), где n—порядок перемножаемых квадратных матриц3. Этот результат остается рекордным по сей день. Существует ли для любого s > 0 алгоритм умножения матриц со сложностью O{n2+е)—это открытый вопрос.
Об алгоритме Шенхаге—Штрассена см., например, [5, разд. 7.5]. См., например, [5, разд. 8.10]. См. [47].
Задачи
181
Задачи
122. Игра «Ханойские башни». К горизонтальной доске приделаны три вертикальных столбика. На первый нанизано n дисков, диаметры которых убывают вверх (рис. 21). Требуется, перекладывая диски
V/////A |
V/////////A |
V///////////A |
///////////A |
///// |
///// |
Рис. 21. Игра «Ханойские башни». Исходное положение.
по ке.
одному, расположить их в прежнем порядке на третьем столби-
Ограничение состоит в том, что больший диск никогда не может располагаться над меньшим. Разработать рекурсивный алгоритм решения этой задачи и определить его временную сложность по числу перекладываний дисков.
123. (Продолжение предыдущей задачи.) Требуется определить временную сложность алгоритма перекладывания дисков в игре «Ханойские башни» при условии, что затраты на перекладывание со столбика на столбик i-го по величине диска равна а) i; б) i2; в) У.
Y2A. Сформулировать правило нахождения частного решения рекуррентного уравнения ady{n) + ad-iy{n - 1) + ... + a0y(.n - d) = f(n) для случая, когда f(n) принимает постоянное значение c.
125. Пусть функция f(n) определена для всех n е N+ и пусть a — ненулевое число. Любое определенное для всех neN решение рекуррентного уравнения y(n) - ay{n - 1) =f(n) имеет вид y(n) =
f(k) ak
n
= an(y(0) + 2
Указание. Индукция по n.
k=i
\1Ь. Для чисел Фибоначчи выполнено равенство £ Fi = Fn+2 - 1,
n= 1,2,3,
i = l
Указание. Решением рекуррентного уравнения y(n)- y(n - 1)= Fn, y(0) 1, является y(n)= Fn+2.
182 Глава 6. Рекуррентные соотношения и сложность алгоритмов
Верно ли, что для любого полинома р{п) найдется полином q{n) (оба с вещественными коэффициентами) такой, что q(n + l)-— q{n) =р{п), и если да, то как различаются степени полиномов р{п) и q{n)?
Найти множество всех вещественных последовательностей, удовлетворяющих рекуррентному уравнению у(п + 1) + у{п) = 0.
Вернемся к алгоритму VRec из § 24. Пусть 1 s= k s= п. Сколько раз при построении множества Vn будет выполнено построение множества Vk?
Ответ. Fn_k.
Найти общее решение рекуррентного равенства (24.11) при к = 1. Найти частное решение, удовлетворяющее условию у(0) = 0. (При к = 1 рекурсия (24.10) не приводит к избыточным вычислениям значений U.)
Назовем перестановку гъг2, ...,z„ чисел 1, ...,п критической длины п, если на ней достигается максимум числа сравнений, требуемых рекурсивной сортировкой слияниями для массивов длины п. Пусть п > 1, а хъ ...,X|n/2j и Уг> ■■■>У\п/2\ суть некоторые критические перестановки длины ^ и ^ . Тогда числа z1,z2, ■■■,zn, равные, соответственно,
2хъ ..., 2xLn/2J, 2уг - 1,..., 2у[п/21 - 1
образуют критическую перестановку длины п (рис. 22).
|
|
|
|
|
1 |
Рис. 22. Случай, когда при п = 7 для сортировки слияниями потребуется максимальное число сравнений.
132. Как выглядят критические перестановки длины 6, 7, 8 и 9, полученные с помощью предложенного в предыдущей задаче подхода?
Задачи
183
133. Имеет место равенство (25.16). Указание. См. задачу 131.
(Продолжение задачи 131, в которой фактически в рекурсивной форме описан алгоритм построения некоторой критической перестановки длины п.) Исследовать сложности описанного алгоритма построения некоторой критической перестановки длины п по числу умножений на два и по числу вычитаний единицы. Предложить нерекурсивный алгоритм (например, можно рассмотреть последовательное построение критических перестановок, длины которых суть соответственно 1, 2,..., п) и исследовать его сложности по названным операциям.
Чему равно наименьшее п вида 2к, для которого число сравнений при рекурсивной сортировке слияниями превосходит [log2 nil?
Оценка (25.22) является следствием оценки TRS(n) = A(n) + + А*(п)-2.
Для сложности алгоритма бинарного поиска места элемента в упорядоченном массиве обосновать рекуррентное неравенство
( 1, еслип = 1,
TnsM^ г\п\Л
tbsIIj\)+1> еслип>1,
не прибегая к известному явному выражению для TBS(n). Из этого рекуррентного неравенства получить оценку для TBS(n).
138. Указать алгоритм построения пересечения п полуплоскостей
щх + Цу + с^О, i = l, 2,..., п,
имеющий временную сложность G(nlogn) по общему числу операций.
Указание. Пересечением будет выпуклый многоугольник (возможно, неограниченный). Опираясь на алгоритм Шеймоса—Хоя (задача 14), использовать стратегию «разделяй и властвуй».
139. По сравнению с теоремами 26.1, 26.2 предложения 25.1, 25.2 представляют собой более сильные утверждения, имеющие к тому же более широкое применение. Используя эти предложения, получить асимптотические оценки для
(О, если п = 1,
Kill) +K\l]) +LP^' еслип>1, при If (П) = l0g2 П и If (n) = n log2 n.
184 Глава 6. Рекуррентные соотношения и сложность алгоритмов
Рекуррентное неравенство вида (26.1) может иметь более одного решения, однако во всех трех случаях, предусмотренных формулой (26.2), по крайней мере для одного решения соответствующая оценка из (26.2) является точной.
Обобщить предложенную в этой главе технику решения рекуррентных неравенств на случай, когда задача с размером входа п
разбивается на s задач, размер каждой из которых — это - или
- , где s — некоторое натуральное число ^2. Как будут выглядеть теоремы 26.1, 26.2 в этом случае?
142. Доказать соотношение (27.10).
Указание. Рассмотреть количество умножений чисел битовой длины 1 в процессе применения алгоритма Карацубы к входу размера т и показать, что G(m) является для него нижней оценкой.
143. а) Для любого е > 0 можно указать JV > 0 такое, что ЗГкм(т) < < Гкм(2т) < (3 + е)Ткм(т) при всех т ^ N.
б) Для любого е>0 можно указать JV > 0 такое, что 7TSt(n) < <rSt(2n)<(7 + e)TSt(n) при всех n^N.
Указание. См. (27.10), (27.8) и, соответственно, (27.12).
144. Теоремы о рекуррентных неравенствах часто формулируются иначе. Например, в [4] и [5] теорема дается, с точностью до обо значений и используемых слов, в следующем виде. Пусть s — целое ^ 2, и при любом п вида sk, k = 1, 2, ..., вещественная функция /(п) натурального аргумента удовлетворяет неравенству
f(n)^wf(-) +cnd, s
где w,c,d — константы, причем w > 0, о 0, d ^ 0. Пусть при этом /(п) не убывает на каждом отрезке [s^ + l.s*]. Тогда
(o(nd log n), еслиd = logsw,
f(n) = \0{nd), еслиd>logsw,
[о(п1о&№), еслиd<logsw.
Доказать эту теорему. (Заметим, что в условии теоремы 26.1 нет требования неубывания /(п) на каждом отрезке [sk + l,sk], но зато требуется, чтобы, например, неравенство (26.1) выполнялось для всех п, а не только для п вида 2fc.)