Наивная арифметика: умножение

Предложение 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».



Глава 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) для


§ 20. Наивная арифметика: умножение



временной битовой сложности при использовании двух параметров размера входа a, b. Итак:

При использовании самих положительных целых a,b в качестве параметров размера входа сложность наивного умножения a на b по числу битовых операций допускает оценку O(logalogb).

Выше наивное умножение (умножение «столбиком») понималось так, что если какая-то цифра числа b равна нулю, то, несмотря на это, построение соответствующих ni и si требует не менее mг би­товых операций. При таком взгляде сложность будет величиной 6(loga log b). Но можно считать, что в рассматриваемом случае бито­вые затраты на получение si не зависят от a и ограничены констан­той. Тогда оценка n(logalogb) места не имеет: если a = 2k\b = 2k, где kг,k2—положительные целые, то битовые затраты будут ограни­чены линейной функцией от kъ k2.

Пример 20.1.Покажем, что битовая временная сложность алго­ритма вычисления n\с помощью пошаговых наивных умножений

2-3, (2-3)-4, ..., (2-3...(n-1))-n

при использовании n в качестве размера входа допускает верхнюю оценку O((n logn)2). В силу предложения 20.1 и неравенства (20.2) рассматриваемая сложность не превосходит cf{n), где c — некоторая положительная константа, а значение f(n) равно

log2 2 log2 3 + log2(2 3) log2 4 + ... + log2(2 3... (n - 1)) log2 n.

Имеем

f(n) s=log2(2 3... (n - l))(log2 2 + log2 3 + ... + log2 n) s=log2(n!).

Одним из следствий формулы Стирлинга является оценка log2(n!) = = O(n log n), откуда log2(n!) = O((n log n)2), иf(n) = O((n log n)2).

Пример 20.2.Мы упоминали о том, что для алгоритма, входом которого является несколько целых чисел, можно в некоторых случа­ях определять размер входа как суммарную битовую длину всех этих чисел. Предположим, что имеется несколько целых чисел aг, a2, •••, an, каждое из которых ^ 2, и с помощью пошаговых наивных умножений

aгa2, {aгa2)a^ ..., {aгa2...an-г)an (20.3)

вычисляется произведение A = aгa2...an. Пусть суммарная битовая длина чисел равна M, и число M рассматривается как размер вхо­да алгоритма (20.3). Покажем, что тогда битовая сложность этого



Глава 5. Битовая сложность


алгоритма допускает верхнюю оценку O{M2), — примечательно, что число n, т. е. общее количество сомножителей, в этой оценке не по­является.

В силу предложения 20.1 и неравенства (20.2) битовые затраты на вычисление aъa2, ■■■an не превосходит cF{aг,a2, ...,an), где c—неко­торая положительная константа, а значение F{aг, a2,..., an) равно

log2 aг log2 a2 + log2(aia2) log2 a3 + ... + log2(a1a2...an_1) log2 an

(использовано предположение, что aъa2,..., an ^ 2). Мы легко полу­чаем

F(aъ a2,...,an) s= log2(a1...an_1)aog2 a2 + ... + log2 an)

и

F{aъ a2,..., an) s= (log2 aг + log2 a2 + ... + log2 an)2.

Последнее неравенство позволяет перейти к рассмотрению M в ка­честве размера входа, так как, очевидно,

F(a1,a2,...,an)^(riog2(a1 + l)l + riog2(a2 + l)l+...+ riog2(an + l)l)2 =M 2 ,

что дает нам требуемое.

Доказанное утверждение справедливо и в том случае, когда сре­ди aг,a2, ...,an имеются единицы, если считать, что умножение на 1 требует одной битовой операции. Если среди aъa2,...,an имеются k единиц, то из M ^ k следует (M - k)2 + k s= M2.