- •Глава 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
§ 16. Асимптотические нижние границы. Алгоритм, оптимальный по порядку сложности
Известно не очень много алгоритмов, оптимальных в смысле определения 15.1. Рассмотрим дополнительно понятие алгоритма, оптимального по порядку сложности.
Определение 16.1. Пусть .s4 — класс алгоритмов решения некоторой задачи. Пусть принято соглашение о том, в чем измеряются затраты алгоритмов и что считается размером входа, и пусть n—обозначение размера входа. Функция f(n) называется асимптотической нижней границей сложности принадлежащих .s4 алгоритмов, если для сложности TA(n) любого Aе^мы имеем TA ( n) = П(f(n)). (Если используются несколько параметров n1, n2, ..., nk размера входа, то асимптотическая нижняя граница—это, соответственно, функция аргументов n1, n2, ..., nk.) Алгоритм Aе .s4 называется оптимальным по порядку сложности в .s4, если TA(n) является асимптотической нижней границей сложности алгоритмов из .s4.
Очевидно, что любая неотрицательная нижняя граница сложности является и асимптотической нижней границей, и что любой оптимальный алгоритм является оптимальным по порядку сложности.
Ниже в примере 16.4 мы увидим, что может существовать несколько оптимальных по порядку сложности в .s4 алгоритмов. Однако сложности таких алгоритмов оказываются величинами одного порядка.
Теорема 16.1. Пусть A,B&.s4 оптимальны по порядку сложности в .s4. Тогда TA(n)=е(TB(n)).
Доказательство. Так как алгоритм A оптимален по порядку слож ности, имеем TB (n) = П( TA ( n )) или, что то же самое, TA(n) = O(TB(n)), что вместе с TA(n) = О( TB(n)) (алгоритм B оптимален по порядку сложности) дает TA(n) = в(TB(n)). □
§ 16. Асимптотические нижние границы
115
Укажем достаточное условие оптимальности алгоритма по порядку сложности.
Теорема 16.2. Если функция f(n) является асимптотической нижней границей сложности принадлежащих классу .s4 алгоритмов и если алгоритм A&.s4 таков, что TA(n) = O{f(n)), то этот алгоритм оптимален в .s4 по порядку сложности и TA(n) = 6(f(n)).
Доказательство. Для произвольного Bел? имеем TB{n) = П(f(n)); учитывая, что TA{n) = O{f{n)), получаем TB{n) = П{TA{n)), т.е. алгоритм A оптимален по порядку сложности.
Из TA(n)=П(f(n)) и TA{n) = O{f{n)) получаем TA{n) =в(f(n)). □
Пример 16.1. Из предложения 14.5 следует, что функция f(n) = = log2 n является асимптотической нижней границей сложности алгоритмов вычисления an с помощью умножений (эта функция даже является нижней границей в смысле определения 14.1). Для сложности бинарного алгоритма вычисления an мы имеем TRS(n) = O(logn) (см. пример 4.2). Из теоремы 16.2 теперь получаем:
Бинарный алгоритм возведения в степень является оптимальным по порядку сложности в классе алгоритмов вычисления an с помощью умножений.
Иногда, хотя не часто, из совершенно элементарных соображений удается найти такую нижнюю границу сложности, что далее по теореме 16.2 оказывается возможным обосновать оптимальность некоторого известного алгоритма по порядку сложности. Рассмотрим два примера из теории графов.
Пример 16.2. Вопрос о существовании и построении эйлерова цикла данного ориентированного графа сформулирован в задаче 16. Остановимся на случае связного графа. Очевидно, что если избрать число ребер |E| в качестве размера входа, то |E| является нижней границей сложности класса всех алгоритмов построения эйлеровых циклов, так как, во-первых, любой эйлеров цикл содержит по определению все ребра графа и на любое ребро уйдет по крайней мере одна операция, и, во-вторых, для любого натурального n существует граф с \E\ = n, содержащий эйлеров цикл. Поэтому тот алгоритм со сложностью O(|E|), который требуется дать в задаче 16, будет оптимальным по порядку сложности.
Пример 16.3. Рассмотрим задачу построения минимального остов-ного (покрывающего) дерева данного связного графа, каждое ребро
116 Глава 4. Нижняя граница сложности. Оптимальные алгоритмы
которого имеет некоторый неотрицательный вес. Имеется в виду дерево:
которое охватывает все вершины данного графа,
все ребра которого являются ребрами данного графа,
которое среди всех деревьев, обладающих свойствами (a), (b), имеет минимальный суммарный вес ребер Ч
Будем считать, что граф не содержит кратных ребер. Пример графа с соответствующим остовным деревом дан на рис. 19. Для построения минимального остовного дерева известны остроумные алгоритмы, например, алгоритм Р.Прима2 с оценкой сложности
O(|E| + |V|log|V|). (16.1)
3
6
2
Рис. 19. Граф с приписанными ребрам весами и его остовное дерево.
В этой оценке |V| и |E| рассматриваются как два параметра размера входа. Не обсуждая вопрос, является или нет алгоритм Прима оптимальным по порядку сложности при таком выборе параметров размера входа и не рассматривая детали алгоритма Прима, мы покажем, что этот алгоритм оптимален по порядку сложности при использовании |V| как размера (единственного параметра размера) входа. Так как среди всех графов без кратных ребер, имеющих |V| вершин, наибольшее число ребер
|V|(|V|-1)
|(|V
2
имеет полный граф, то оценка (16.1) имеет следствием оценку O(|V|2). С другой стороны, асимптотическая нижняя граница Г2(|V|2) для алгоритмов такого рода получается тривиально: эту оценку допускает число ребер полного графа, а на каждое ребро графа алгоритм затрачивает по крайней мере одну операцию (он не может не принять в расчет вес какого-либо ребра).
Если использовать для входов алгоритмов построения остовного дерева размер \V\, то \V\2 даст асимптотическую нижнюю границу сложности этих алгоритмов, и алгоритм Прима будет оптимальным по порядку сложности (его сложность, соответствующая этому размеру входа, есть 6(|V|2)).
:См. [21, гл. 24].
2 Этот алгоритм описан, например, в [21, разд. 24.2].