- •Глава 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
§ 25. Об одном классе нелинейных рекуррентных соотношений 165
Имеем
F(n)=vF2 +wf2 +<p(ri)2
>vFlL21 +wFIL-2~ +4>(n-1)=F(n-1).
Неравенство (25.6) доказано.
Аналогичным образом по индукции докажем, что
f(n)^F(n) (25.7)
для п=г 1. Очевидно, /(1) ^u = F(1). Пусть п> 1 и неравенство (25.7) выполнено для 1, 2, ...,п- 1; докажем, что тогда оно верно и для п. В силу (25.2) мы имеем при п > 1
и так как при п > 1 выполняются неравенства 2kn-1 и 2 ^ ^ п - 1, то по предположению индукции
V^Q2J) +М^(Т21) +(/>(")^vi7Q2J) +wF([2l) + ¥>("). (25.9)
2
Правая часть последнего неравенства есть F(n). Это доказывает (25.7).
Свойства (25.6), (25.7) дают нам
/(n) ^ F (n) ^ F (2гlog2 nl) (25.10)
для п^1. Исследуем функцию t(fc) = F(2fc), fc = 0,1, ... В силу (25.5)
F(2fc) =
и, если к = 0,
(v + w)F(2fc-1) + ^(2fc), если)с>0,
и, следовательно, t(fc) удовлетворяет линейному рекуррентному урав нению (25.4). Отсюда и из (25.10) следует требуемое. □
Определение 25.1. Рекуррентное уравнение (25.4), включающее в себя начальное условие £(0) = и, мы назовем уравнением, ассоциированным с рекуррентным неравенством (25.2).
Если u,v,Lp(n) удовлетворяют условиям, сформулированным в предложении 25.1, то решение ассоциированного уравнения — неотрицательная функция (см. задачу 125).
166 Глава 6. Рекуррентные соотношения и сложность алгоритмов
Продолжение примера 25.1. Уравнением, ассоциированным с (25.1), будет
t k = 1°' k еслиk = 0' (25.11)
2t(k-l)+2-l, еслиk>0.
Отвлекаясь временно от начального значения t(0) = 0, мы замечаем, что правая часть в
t{k)-2t{k-l) = 2k-l (25.12)
является суммой квазиполиномов 2k и —1; первый из них, т.е. 2k, интересен тем, что 2 является корнем характеристического уравнения А - 2 = 0, и поэтому рекуррентное уравнение t(k) - 2t{k - 1) = 2k имеет частное решение вида p{k)2k, где p(k)— полином первой степени. Подстановка (p1k + p0)2k в рекуррентное уравнение дает
{pгk + p0)2k - (piCk - 1) + p0)2k = 2k,
откуда получаем, что p1 = 1, p0—любое. Итак, k2k является частным решением рекуррентного уравнения с правой частью 2k. Слагаемое -1 правой части исходного уравнения можно переписать в виде (-1) • 1k, единица не является корнем характеристического уравнения, поэтому рекуррентное уравнение t(k) - 2t{k) = -1 имеет в качестве частного решения некоторую константу, значение которой определяется без труда — это 1.
Таким образом, любое решение рекуррентного уравнения (25.12) может быть записано в виде
c2k+k2k + 1
с некоторым конкретным c. Из условия t(0) = 0 находим c = —1 и
t(k) = k2k-2k + l. (25.13)
По предложению 25.1
TMS(n) *S [log, n!2П°&n1 - 2^n1 + 1 = = ([log2nl-l)2rlo&nl + l^ ^log2n-2lo^n+1 + l = = 2n log2 n + 1.
Мы еще раз прервем рассмотрение примера 25.1 и сформулируем следующее предложение.
§ 25. Об одном классе нелинейных рекуррентных соотношений 167
Предложение 25.2. Пусть вещественная функция f натурального аргумента удовлетворяет неравенству
и, еслип = 1,
Q§J) +м//([§1) +У(п), еслип>1,
где u,v,w — неотрицательные вещественные числа, причем v +w ^ 1, а функция у —неотрицательная неубывающая. Тогда
/(n)^t(Llog2nJ), (25.15)
где t—решение рекуррентного уравнения (25.4).
Доказательство получается заменой знака ^ на ^ в (25.7), (25.8) и (25.9), а также переходом от (25.10) к
/(n)^F(n)^F(2Ll0&"J).
Сохраняя введенную терминологию, рекуррентное уравнение (25.4) будем называть ассоциированным с рекуррентным неравенством (25.14).
Если же возникает соотношение со знаком = вместо ^ или ^, то мы можем рассматривать его как систему двух рекуррентных неравенств (25.2), (25.14). Тогда получим оценки
taiog2n|)sS/(n)sSt(riog2nl).
Завершим рассмотрение примера 25.1. Можно доказать (см. задачу 133), что для сложности по числу сравнений рекурсивной сортировки слияниями выполнено
0, еслип = 1,
Гш§ +Гш§ +п-1' еслип>1>
и прийти к справедливым для всех п оценкам
(Llog2 п\ - l)2Ll0&nJ + 1 s= Тш{п) s= aiog2 п] - l)2rl0&nl + 1. (25.17)
Для исследования сложности Тш (п) рекурсивной сортировки слияниями по числу перемещений рассмотрим рекуррентное уравнение
„0, если п = 1,
( \j
)
+ ?MS
(
5 ) + п>
если
п>1
168 Глава 6. Рекуррентные соотношения и сложность алгоритмов
(при слиянии массивов, содержащих соответственно ^ и ^ элементов, требуется ровно п перемещений элементов). Решением ассоциированного уравнения
«в=
О, если/с = 0,
2t{k-l) + 2k, если)с>0,
является k2k, что дает нам
Llog2 nj2^"J ^ fMS(n) ^ [log2 п^Ч (25.19)
Пространственная сложность этой сортировки есть П(п), ибо слияние упорядоченных массивов выполняется с получением результата на новом месте. (Дополнительно к этому будет использоваться стек отложенных заданий.) Рассмотрение примера 25.1 закончено.
Интересно посмотреть на результаты применения разобранного метода на каком-нибудь примере, для которого мы знаем точное значение сложности алгоритма, — сколь далеки будут получаемые оценки от известного точного значения?
Пример 25.2. Вернемся к бинарному алгоритму вычисления а" (пример 4.2), который можно легко описать рекурсивно. Для его сложности по числу умножений имеем
(О, если п = 1,
Г\п\Л (25.20)
TRSI - I + 2, если п > 1,
и
(0, еслип = 1,
Гцк(п)И Г\п\Л (25.21)
7rs(L§JJ+1, еслип>1.
о, t(fc- |
D + 2, |
если если |
fc = 0, fc>l, |
о, t(fc-l) + l, |
если если |
fc = 0, fc>l, |
и
Соответствующими ассоциированными уравнениями будут t(fc) =
t(fc) =
их решения суть 2fc и fc. Отсюда
Llog2 nJ s= TRS (n) s= 2 riog2 n]. (25.22)
Эти оценки не сильно расходятся с точной формулой TRS(n) = A(n) + + А*(п)-2.