- •Глава 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. Длина числа как возможный размер входа
31
Рис. 5. Граф с одной вершиной и произвольным заданным числом ребер.
Если рассматривать два параметра |V|, |Е| размера входа, то сложностью алгоритма VL будет функция 7^(1П \Е\) двух переменных. Для того чтобы устанавливать для нее асимптотические оценки, эта функция должна быть определена для всех (или, по крайней мере, всех достаточно больших) натуральных значений |V|, \L\. Это значит, что для всех таких |V|, |Е| должен существовать граф, имеющий |V| вершин и\Е\ ребер. Проблема будет снята, если, например, допустить к рассмотрению и такие ориентированные графы, которые
имеют кратные ребра. Оценка 7^(1 V|, \Е\) = 0(|Е|) будет, очевидно, выполняться. Можно обосновать и оценку T^(\V\,\E\) = П(\Е\): достаточно рассмотреть имеющий |Е| ребер граф в виде цветка (рис. 5), добавив к нему |V| — 1 изолированных вершин (подобных вершине 7 на рис. 3) и взяв в качестве v вершину в центре «цветка». В итоге ^(|Щ£|) = в(|Е|).
§ 4. Длина числа как возможный размер входа
Часто, хотя и не всегда, для алгоритмов целочисленной арифметики, входом которых является целое неотрицательное число п, размером входа выбирают не само п, а его битовую длину, или, иными словами, количество А(п) цифр в его двоичной записи:
А(п) =
1,
Llog2 п\ +1,
если n= 0, если n> 0.
Выражение Llog2 п\ + 1 во второй строчке этого определения можно заменить на [log2(n + 1)1 — см. задачу 2.
32 Глава 1. Сложности алгоритмов как функции числовых аргументов
Пример 4.1. Вернемся к алгоритму пробных делений (пример 1.2). Наряду с его уже рассмотренной сложностью TTD(n) введем еще одну сложность (также по числу делений) TT*D(m), m = A(n). Легко обнаружить, что эта новая функция ведет себя не так, как функция TTD(n), для которой характерны резкие скачки. Для начальных значений т имеем
т: |
2 |
3 |
4 |
5 |
6 |
7 |
п: |
2—3 |
4—7 |
8—15 |
16—31 |
32—63 |
64—127 |
п: |
3 |
7 |
13 |
31 |
61 |
127 |
7?D(m): |
1 |
1 |
2 |
4 |
6 |
10 |
(в строке т указывается битовая длина входа; в строке п указывается диапазон, в котором располагаются значения п, битовая длина т которых равна числу в предыдущей строке; в строке п указывается одно из тех чисел этого диапазона, на которых достигается максимум числа делений; в последней строке указано значение сложности TjD(rri)). В поведении 73^(т) не видно резких скачков. Переход от размера ||п|| = п к размеру ||п||* = т = А(п) влечет более основательное преобразование функции Т{п), чем простая замена переменной. Теперь одним и тем же размером m обладают несколько входов п, затраты для которых, вообще говоря, различны, и, в соответствии с определением сложности, мы должны брать максимум этих затрат. Данным размером m обладают все целые п такие, что
2m-1^n<2m. (4.1)
Согласно постулату Бертрана, при m > 1 в таком диапазоне обязательно встретится простое число.
Постулат Бертрана.г При любом целом N > 1 имеется простое число, принадлежащее интервалу (JV, 2JV).
С помощью постулата Бертрана мы можем доказать, что T*D(m) = = 6(2m/2). В самом деле, обозначим через рт наибольшее простое число битовой длины т. Количество делений, требующееся алгоритму для работы с рт, будет равно LVP^J - 1- В силу (4.1) имеем L2&"-U/2j - 1 ss LVP^J - 1. Таким образом,
T*D(m) > L2(m-1)/2j - 1 > j=2m'2 - 2 = (J= - ^r)2m/2,
V2
1 Сформулирован Ж.Бертраном в 1845 г. и доказан П.Л.Чебышевым в 1852 г. Обсуждение доказательства выходит за рамки этого курса, доказательство Чебышева см. в [38] (статья «О простых числах»). Доказательства, использующее лишь элементарные средства, можно найти в [35] (приложение «Доказательство постулата Бертрана (теоремы Чебышева)») и в [11, § 5].