- •Глава 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
§ 20. Наивная арифметика: умножение
137
в § 20 и 21, мы займемся битовой сложностью наивного умножения и деления.
Еще одно замечание в заключение этого параграфа. Битовый анализ может учесть мельчайшие затраты, связанные с выполнением алгоритма. Вопрос в том, нужен ли настолько детализированный подход, коль скоро компьютеры выполняют операции над основными структурами данных на уровне слов, длина же слова—это, как правило, 64 бита. В связи с этим иногда вместо битовой рассматривается так называемая словесная сложность1. Но принципиальной разницы между битовой и словесной сложностью нет. Можно сказать так, что битовая сложность предполагает использование системы счисления с основанием 2, а словесная — с основанием 64. Анализ словесной сложности не является, в сравнении с анализом битовой сложности, ни более легким, ни более информативным.
§ 20. Наивная арифметика: умножение
Предложение 20.1. Пусть T*м(m) — временная битовая сложность наивного умножения при использовании m в качестве размера входа, а T^mmJ —временная битовая сложность этого же алгоритма при использовании mъ m2 в качестве двух параметров размера входа. Тогда
T*M(m) = Q(m2), T*ll(m1,m2)=Q(m1m2). (20.1)
Доказательство. Затраты наивного умножения a на b связаны с суммированием m, чисел n-i,n?,...,nm , где каждое ni равно 0 или a ■ 2i-1 в зависимости от соответствующей цифры в двоичной записи b. Несложной индукцией доказывается, что для si = nг + n2 + ... ...+ni, i = l,2,...,m2, выполнено X{si)^m1 + i. Если ni+1ф0, то последние i цифр числа ni+1 суть нули, и при вычислении si+1 = si + ni+1 мы не притрагиваемся к этим цифрам, а преобразуем si в si+1 сложением двух чисел, первое из которых образовано всеми разрядами числа si, кроме i последних (согласно сказанному, битовая длина этого числа не превосходит mг), второе же слагаемое есть a, и его битовая длина равна mг. Число битовых операций, требующихся для преобразования si в si+1, не превосходит c{mг +1) для некоторой положительной константы c. В том случае, когда все цифры числа b равны 1, это число при любом i не меньше, чем mъ по лемме 19.1.
1 См., например, книгу [50]. В литературе на английском языке, в частности в книге [50], используется термин «word complexity».
138
Глава 5. Битовая сложность
Поэтому битовые затраты, связанные с наивным умножением а на Ъ, не превосходят с{тг + 1)т2, а при Ъ = 2т? - 1 (двоичная запись этого Ъ состоит только из единиц) затраты не меньше, чем тгт2. Это дает оценку Щ1[{тът2) = 6(m1m2).
Рассмотрим теперь т как размер входа. Так как тг ^ т и т2 ^ т, то затраты не превосходят c(m + l)m, это дает оценку Т*м(т) = 0(,т2). С другой стороны, если тг = т2 = т и а = Ъ = 2т - 1, то затраты не могут быть меньше, чем т2, и, следовательно, Г*(т) = Г2(т2). Таким образом, Гм*м(т) = в (т2). □
Для пространственной битовой сложности наивного умножения мы имеем, очевидно, оценки
S*NM(m) = 2т + 0(1), S^Qnlt т2) = тг + т2 + 0(1).
Обсудим переход от параметров тъ т2 размера входа к параметрам а, Ъ (можно считать, что и к параметрам logo, logЪ—между а, Ъ и log a, log Ъ в этом смысле нет принципиальной разницы, так как одни параметры однозначно определяют другие; в то же время мы не можем восстановить а,Ъ по riog2(a + l)l, [log2(b +1)1).
Для перехода в верхних оценках сложности от A(fc) к log2 к, fee gN*, часто оказывается удобным простое неравенство |"log2(fc + 1)] ^ ^ 2 log2 к, справедливое для всех к ^ 2:
[log2(fc + 1)1 = Llog2 fcj + 1 ^ log2 к+ 1^2 log2 к.
Поэтому, например,
т1 ^ 2 log2 a, m2 ^ 2 log2 b
и
тгт2^ 4 log2 a log2b (20.2)
для всех a, b ^ 2. Имеем для достаточно больших тъ т2 и некоторой положительной константы с
Clu{a, Ъ) s= Т^Л{тъ т2) s= стгт2 s= Ac log2 a log2 Ъ.
Мы можем написать C^M(a, b) = 0(loga logb), считая, что выражение под знаком О рассматривается как функция двух переменных а, Ъ, при этом а, Ь—>оо; считаем также, что логарифмы имеют общее основание (подобные предположения будут подразумеваться и в дальнейшем). Остается заметить, что битовая временная сложность при использовании самих а, Ъ в качестве параметров размера входа совпадает с битовыми временными затратами. Это позволяет получить из оценки Т**м(.тът2) = 0(.т1т2) оценку TNM(a, Ь) = О (log a logb) для