- •Глава 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
Глава 7. Сводимость
сектора пространства Ж". В примере 14.2 говорилось, что при фиксированном п любую сортировку массивов длины п можно представить в виде дерева, каждой не являющейся листом вершине v которого приписано сравнение вида xt < х;-, а выходящие из нее ребра имеют метки 1 («да») и 0 («нет»); при этом каждому листу Z приписан набор х; ,х< ,...,х; , где (b,i2, ...,*„) — некоторая перестановка чисел 1,2,...,п.
Алгоритм сортировки массивов длины п c помощью сравнений и четырех арифметических операций представляется деревом D, которое можно считать таким, что каждой не являющейся листом вершине v приписано сравнение Fv(x1,x2,...,xn) с нулем, где Ру(хъх2,...,хп) — некоторая рациональная функция, а выходящие из вершины ребра имеют метки 1 («да») и 0 («нет»). При этом каждому листу Z приписаны рациональные функции
Gll{x1,x2,...,xn), Gl2{x1,x2,...,xn), ..., Gln(x1,x2,...,xn), (29.2)
значения которых для исходных хъх2, ...,хп определяют требуемый
порядок X; , X; , ...,Х; :
х =G,1(x1,x2,...,xn), х =G,2(x1,x2,...,xn),
- =G,n(x1,x2,...,xn).
Можно считать, что числитель каждой из функций Fv(xl5x2, ...,хп) не является нулевым полиномом, — в противном случае вершину v можно было бы удалить из дерева вместе с выходящей из нее ветвью, начинающейся с помеченного единицей ребра. Множество JV тех точек Ж", в которых обращается в нуль числитель хотя бы одной из рациональных функций Fv(xl5x2, ...,хп), в силу свойства (R1) является замкнутым, причем это множество не может покрывать целиком ни один из секторов. Иначе в силу свойства (R2) произведение всех числителей рассматриваемых рациональных функций было бы нулевым полиномом, а это означало бы, что один из сомножителей этого произведения—нулевой полином.
Таким образом, каждое из множеств
S; = S;\JV, i = l,2,...,n!,
есть непустое открытое множество. Покажем, что для массивов, соответствующих точкам из S't, i = l,2,..., п\, рассматриваемая сортировка в худшем случае требует не менее [log2n!l сравнений.
§ 30. Классы PиNp
195
Будем говорить, что точка (xъx2, ...,xn) некоторого сектора согласуется с листом l дерева D, если соответствующая дереву D сортировка массива xъx2, ...,xn заканчивается в листе l.
В том случае, когда D имеет не менее n\ листьев, мы, рассуждая так же, как в примере 14.2, получаем, что высота дерева D (сложность сортировки по числу сравнений) не может быть меньше чем [log2 n\]. Допустим, что число листьев дерева D меньше чем n\. Тогда найдется лист l такой, что имеются точки в двух разных множествах S[, S'j, согласующиеся с l. В силу свойства (R1) найдутся непустые открытые множества Uг с S[, U2 с S' такие, что любая точка, принадлежащая какому-то одному из них, согласуется с листом l. Если листу l приписан массив (29.2), то для некоторых целых k,s, t, не меньших единицы и не превосходящих n, таких, что s^t, будем иметь Gk(x1,x2,...,xn) = xs при (x1,x2,...,xn)&U1 и Gk(x1,x2,...,xn)=xt при {xъx2,...,xn)&U2. Но значения рациональной функции на одном из множеств Uъ U2 однозначно определяют значения этой рациональной функции всюду на Uг и U2 (это выводится из свойства (R2)), поэтому из того, что, например, Gk(xls x2, ...,xn) = xs на Uъ следует, что Gk(xl5x2, ...,xn) = xs на U2. Но мы знаем, что Gk(xl5x2, ...,xn) =xt на U2. Так как s/t, то в любом секторе xsфxt, в частности, это так и в секторе, подмножеством которого является U2. Противоречие. □
Из доказанного предложения следует, что f(n) = nlogn является асимптотической нижней границей сложности алгоритмов сортировки массивов длины n попарно различных вещественных чисел c помощью сравнений и четырех арифметических операций. По теореме 29.1 эта функция является также асимптотической нижней оценкой для алгоритмов построения выпуклой оболочки.
Любой алгоритм построения выпуклой оболочки с помощью арифметических операций и сравнений, который имеет сложность O(nlogn), является оптимальным по порядку сложности по общему числу операций, и его сложность есть G(nlogn). Алгоритм Грэхема построения выпуклой оболочки (пример 3.1) является оптимальным по порядку сложности по общему числу операций, коль скоро используемая им сортировка имеет сложность O(nlogn) по числу сравнений.