- •Глава 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. Качество оценок
83
получаются оценки числа итераций для классических методов (алгоритмов) приближенного решения уравнений. Вспомним две такие оценки.
Пусть корень уравнения /(х) = 0 разыскивается на отрезке [а,Ъ], на котором функция /(х) непрерывна, /(а)/(Ь) «SO. Ошибка не должна превышать данного е > 0. При е^О и фиксированных f(x),a,b число итераций метода делений пополам есть
log,- + 0(1). (9.15)
Метод же Ньютона (касательных) требует
О flog log -) (9.16)
s
итераций при соблюдении ограничений на функцию /(х), обеспечивающих сходимость метода.
§ 10. Качество оценок
После вывода оценки сложности алгоритма часто возникает вопрос о том, насколько эта оценка хороша и нельзя ли входящие в оценку константы и функции заменить другими так, чтобы оценка стала более точной, и, как следствие, несущей больше информации об исследуемом алгоритме.
Пример 10.1. В примере 9.1 для сложности ТЕ{аг) по числу делений алгоритма Евклида мы легко получили верхнюю оценку аъ а затем, после некоторых усилий, пришли к логарифмической верхней оценке (9.6). Отвлекаясь от значений констант, перейдем от (9.6) к
rE(a1) = 0(loga1). (10.1)
Нами пока не доказано, что оценка (10.1) является точной, и, как следствие, что не верна, скажем, оценка O{\f\oga1) или CKlogloga^) и т.д. Чтобы доказать точность (10.1), достаточно подобрать для алгоритма Евклида последовательность входов
{а^,а^), (а™,а™), ...
таких, что последовательность а^ (последовательность размеров входа) неограниченно возрастает и СЕ(,а^\ а^) = f2(loga^n)) при п—><*>; тогда, очевидно, будем иметь ТЕ(а^) = U(loga^).
Фактически, нам нужна последовательность таких входов возрастающего размера, для каждого из которых алгоритм Евклида работает медленно. Подойдет, например, последовательность входов
84 Глава 3. Оценивание числа шагов (итераций) алгоритма
UWbFJ, п = 0,1, ..., где Fq,^,^, ... —числа Фибоначчи, определяемые равенствами F0 = О, Fx = 1 и правилом «каждое следующее число равно сумме двух предыдущих», т. е. рекуррентным соотношением Fn+2 = Fn+i +Fn. Из определения чисел Фибоначчи следует, что применение алгоритма Евклида к Fn+1,Fn при п ^ 1 требует п делений (все частные будут равны единице), поэтому CE(Fn+1,FJ = п.
По индукции доказывается, что для всех неотрицательных п справедлива формула Бине:
J7 -_к(фл_(_ф)-л) (Ю.2)
V5
где
ф=
1
+
A/g
=
1,61803...
(деление отрезка в отношении 1 : ф называют золотым сечением). Так как ф > 1, то из (10.2) получаем
0" = A/5Fn(l+o(l)), (10.3)
и, поскольку log0(1 +о(1)) = о(1), с помощью логарифмирования (10.3) по основанию ф имеем
СеС^п+i» Рп) = п = log<p Fn + 0(1) = n(logFn),
откуда следует, что оценка (10.1) точная. Мы докажем более сильное утверждение:
ТЕ{а1)>^\о%фа1+Г, (10.4)
где у— некоторая константа. Это вместе с (10.1) даст
rE(a1) = e(loga1). (10.5)
Приступая к доказательству, мы перейдем от функции CE(a0,ai), имеющей два аргумента, к функции одного аргумента. Каждому входу (an, сь), an ^ сь > 0, мы сопоставим рациональное число г = — ^ 1, которое однозначно определяет число шагов алгоритма Евклида для
an, а-.. (Пусть - = ^, апиа, взаимно просты, an = uan, сь = ua-i; то- uj i Q^ at
гда остатки a2, a3, ... и a2, a3, ..., возникающие в ходе применения алгоритма Евклида к а0,аг и соответственно к а0,аг, отличаются лишь множителем и.) Будем обозначать это число шагов через С'Е{г). Таким
образом, если г = ^, то С'(г) = CE(a0,ai).