- •Глава 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
§ 10. Качество оценок
85
Для дальнейшего будет полезным следующее свойство чисел Фибоначчи:
Fn-1Fn+1 = (-1)n, n = 1,2, ... (10.6)
(доказывается индукцией по п). Рассмотрим вложенные отрезки Φ1 э зΦрΦ3э... числовой прямой:
f2„ f2„+1
п = 1,2,
Φn
^2п f2 +1 2n-1 , F 2n
1
Соотношение (10.6) позволяет установить, что ни один из этих
Очевидно,
что
F
2n-1 F 2„
Φ1 = [1, 2] (рис. 15). Далее можно доказать, что если рациональное
F4
Р6
ф
F7
F5
T4
Р3 P2
Рис. 15. Расположение чисел
Fn
и интервалов Φn, n=1, 2,
число
—
принадлежит
Φп,
п
>
2,
то
деление
а0
на
а1
дает
ненулевой
a1
остаток а2, и — принадлежит Φп-1. В самом деле, мы имеем
Р2п-1 «1 Р2п
Следовательно, частное от деления а0 на а1 с остатком равно 1, т. е. а2 = а0 - а1. Далее,
а0 - а1 а0
== — - 1
а1 а1 ,
поэтому
Р2п-1 «1 Р2п
Но
Р2п Р2п-1
1 Р2п-Р2п-1 Р2п-2
Р2п-1 Р2п-1 ,
86 Глава 3. Оценивание числа шагов (итераций) алгоритма
и,
аналогично,
2п+1
-
1 = 2"~г;
мы
имеем,
следовательно,
„2"~2
^ —
^
Р2п F 2n Р2п-1 «1
^и
-^^^-1 (107)
F 2n-i^a 2^F 2n-2- U
Получаем
Mte-te=Φ~
a 2 F 2n_!F 2n_2 F 2n_3 F 2n-2
Отрезки Φ2,Φ3, ... не содержат целых чисел, поэтому из доказанного можно заключить, что если г е Φп n Q, п > 2, то C'E{r) ^ п. Пусть теперь фиксировано аг&П+. Рассмотрим множество
М = \r: r=—, an = ai,ai +1, ... к а1 и 1 1
Точки, соответствующие элементам множества М, расположены на правой полуоси, начиная с 1, с шагом —; хотя бы одна из этих точек
непременно принадлежит отрезку Φ„, коль скоро — меньше длины
отрезка Φп, т. е. — ^ ■= =—, или, что то же самое, аг ^ F2n_iF2n. Пусть
JV — самое большое значение п, для которого выполняется это неравенство (такое JV существует, так как единственной точкой, принадлежащей бесконечному числу отрезков рассматриваемого семейства, является ф £Q). Тогда F2NF2N+1>a1. Из формулы Бине следует, что
f2nF2N+i = |ф4М(1 - (-ФГ4Ы)(.Ф - С-ФГ4АГ_1),
откуда
W2N+1 < СФ4Ы,
где с — некоторая положительная константа. Таким образом, сф4Ы > > аг и
1
с.
1
Имеем С'Е(г) ^ N - 1 > ^ log0 ax - log0 с - 1 по крайней мере для одного рационального числа геМ, откуда следует соотношение (10.4). Переходя к размеру входа т = Х{аг), мы можем воспользоваться теоремой 4.2 из § 4 и получить для сложности Т^{т) по числу
§ 10. Качество оценок
87
делений соотношение T*(m) = в(m). (В силу теоремы 4.2 T*(m) = = n(log2m-1) = n(m) и TE*(m) = O(log2m) = O(m).)
Число шагов расширенного алгоритма Евклида (см. пример 9.1) совпадает с числом шагов обычного алгоритма Евклида. Мы получаем следующее:
Если рассматривать aг как размер входа (a0, aг) расширенного алгоритма Евклида, то для мультипликативной сложности TЕЕ(.aг) этого алгоритма выполнено T^fa^ =Q(loga1). При рассмотрении m = А(aх) в качестве размера входа a0, aг расширенного алгоритма Евклида имеем для мультипликативной сложности оценку T*Е{m) = = в(m). Все это сохраняет силу и для сложности T*{m) «обычного» алгоритма Евклида.
Запись алгоритма Евклида в форме (9.1) далека от записи в виде «приличной» компьютерной программы не только в смысле использованной символики, но, главное, в смысле предписываемого расточительного расхода памяти (использован массив, и при буквальном следовании алгоритму (9.1) мы бы имели SЕ(,aг) = QfJogaJ). С точки зрения программирования более приемлемой будет, например, запись
a:=a0; b:=a1; while b>0 do
d:=rem{a,b); a:=b; b:=d od
(rem—знак операции нахождения остатка). После выполнения алгоритма имеем a = нод(a0, aг). Использовано только три дополнительных переменных (a,b и d), и мы получаем SE(a1) = 3.
Оценку (10.4) можно усилить, показав, что найдется константа у' такая, что
TE(a1)>|log(#,a1+r/ (10.8)
(см. задачу 54). Часто в литературе оценки снизу для сложности в худшем случае алгоритма Евклида по числу делений выводят из оценки, полученной в 1970 г. Г. Хейлбронном для сложности в среднем:
TE(a1) = ^j^lna1+O(l). (10.9)
Последняя оценка обосновывается весьма непросто. Из (10.9) выводится, что
TE(a1)>i^lna1+r//
88 Глава 3. Оценивание числа шагов (итераций) алгоритма
для некоторой константы f. Однако при больших аг оценка (10.8) для ТЕ{аг) является более строгой (ИЩ1 \пф = 0,40554... < |) и вдобавок выводится элементарно г.
Может быть доказано (см. задачу 52), что ТЕ{аг) <\о%ф аг + с, где с —некоторая константа (заметим, что log0 2 = 1,44... < 2) 2.
Рассуждения, сходные с приведенными при доказательстве неравенства (10.4), показывают, что для каждого а0 можно подобрать аъ а0 ^ аъ так, что будет выполняться
CE(a0,a1)>|log(^a0 + /3, (10.10)
где /3 — некоторая константа. В данном случае можно рассмотреть вложенные отрезки Фх э Ф2 D фз D •••:
Ф„=[^2-,%-1], п = 1,2,
(при п> 1 отрезок Ф„ не содержит чисел вида —, meN+); если an не делится нацело на ах и — g Фп, то — е Фп_х и т.д. Мы воспользуемся этим в § 21.
Пример 10.2. Сортировка массива длины п бинарными вставками выполняется за п — 1 шаг, причем на Z-м шаге число сравнений не превосходит [log2(Z + 1)] и, следовательно, не превосходит [log2 п\ на любом из шагов, —это приводит к оценке (9.14). Возникает вопрос, не сможем ли мы получить существенно лучшей оценки сверху, рас-
п-1
смотрев сумму X! riog2CZ + 1)1, которая совпадает со значением Тв{п),
т. е. сложности по числу сравнений (такое число сравнений достигается, например, в случае, когда изначально массив имеет обратную упорядоченность: хг > х2 > ... > хп). Замена переменной суммирования дает
п
rB(n)=^riog2Z<l. (10.11)
fc=i
1 Приведенный выше и дополненный в указании к задаче 54 элементарный вывод оценки (10.8) принадлежит М. Оналбекову; в [19, разд. 4.5.3, упр. 38] со ссылкой на статью Я.Микусинского (1954 г.) приведена оценка, фактически совпадающая с (10.8), но ее вывод опирается на теорию цепных дробей и не столь элементарен и нагляден.
2 Предположение о том, что TE(aj) ~logj, аь насколько известно автору, не доказано и не опровергнуто (2008 г.).