Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
abramov_s_a_lekcii_o_slozhnosti_algoritmov.doc
Скачиваний:
136
Добавлен:
11.05.2015
Размер:
2.74 Mб
Скачать

§ 27. Добавление нулей 175

тогда как обычное раскрытие скобок в (e2l + f)(g2l + К) требует вы­полнения четырех таких умножения:

ab = eg22l + (eh + fg)2l+fh. (27.6)

Мы видим, что формула (27.5) использует произведения eg, fh, (e + /)(g + h), а формула (27.6)—произведения eg,eh,fg,fh.

Небольшая проблема, которая выше была замаскирована слова­ми «половинная длина», состоит в том, что битовая длина любого из чисел e + f, g + h, входящей в произведение (е+ /)(# +ft), может оказаться равной Z +1, а не Z. Но если

e + f = ex2l+fx, g + h = g12l + hi,

где e1,g1 однобитовые числа (0 или 1), то

+ f)ig + K)= elgl221 + (exhx + g1/1)2l + fxhx. (27.7)

Произведение Л 7^ вычисляется рекурсивным обращением к алгорит­му, произведения e1g1,e1h1,g1f1, как и все сложения и сдвиги, тре­буют 0(1) операций.

Равенство (27.5) и предположение, что т = 2к, приводят к рекур­сивному алгоритму Карацубы умножения целых положительных чи­сел (будем обозначать этот алгоритм буквами KM: первая из этих букв — начальная в фамилии автора алгоритма, вторая — в англий­ском слове multiplication —умножение). Предположение т = 2к при­водит к следующему соотношению для битовой сложности умноже­ния Карацубы:

( 1, если т = 1,

ГтЛ (27.8)

ЗГКМ1 у I +ст, еслит>1,

где с — некоторая положительная константа.

Умножение Карацубы при произвольном входе a, b е N+ разме­ра т = шах{А(а), А(Ь)} предполагает, что сначала мы находим к = = [log2ml, затем добавляем спереди каждого из а,Ъ некоторое ко­личество нулей так, чтобы битовая длина каждого из сомножителей стала равной 2к, а после этого используем рекурсивный алгоритм, основанный на (27.5).

Мы можем применить теорему 27.1 (w = 3, d = 1), так как при произвольном meN+ выполняется Гкм(т) = Гкм(2Г1о&т1). Получаем

Гкм(т) = 0(т1о&3), (27.9)

при этом log2 3 = 1,58...

176 Глава 6. Рекуррентные соотношения и сложность алгоритмов

Для m > 1 мы имеем

TKM(m)>G(m), (27.10)

где функция G натурального аргумента такова, что G(m) = G(2n°^m]) для всех m е N+ и

G(2k) =

1, еслиk=0,

3G(2k-1), если k >0,

откуда Tкм(m) = П(m1о&3) по предложению 27.2. Вместе с (27.9) это дает

Tкм(m) = в(m1о&3). (27.11)

При использовании m, равного максимальной из битовых длин двух данных чисел a, beN+ в качестве размера входа битовая сложность умножения Карацубы допускает оценку

Tкм(m) = в(m1о&3),

при том, что Tмм = 6(m2) оценка битовой сложности наивного умноженияг.

Стратегия добавления нулей особенно характерна для исследова­ний, в которых главной целью служит преодоление некоторого слож-ностного барьера; последнее было и остается важным стимулом раз­вития теории сложности.

Пример 27.2. Алгоритм Штрассена умножения двух квадратных числовых матриц A и B порядка n, являющегося степенью двойки, основан на том, что если n = 2l и

A = [A11 A 12Л =(BU B 12Л

A 21 A2> B B 21 B22>

где все Aij,Bij — квадратные матрицы порядка l, то матрицу

C=AB= CC

можно получить, выполнив семь умножений квадратных матриц по­рядка l (при том, что потребовалось бы восемь таких умножений при

1 История создания алгоритма Карацубы и публикации о нем в 1962 г. сообще­ния [15] увлекательно рассказана в статье [17] самого А. А. Карацубы; особенно богат яркими историческими деталями раздел 6 этой статьи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]