Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

А ОЛ (В ОЛ (АВ О

Добавление нулей

Ряд алгоритмов целочисленной арифметики и теории матриц оказы­вается достаточным (без нанесения сколь-либо существенного ущер­ба идее алгоритма и его качеству) описать для случая, когда размер

!См., например, [4].


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

входа есть число вида 2к. При использовании стратегии «разделяй и властвуй» это облегчает и описание алгоритма, и анализ его слож­ности. С теоретической точки зрения для задачи умножения двух це­лых чисел а и Ъ мы можем предполагать, что битовая длина каждого из данных чисел равна 2к, где

fc = max{[log2 А(а)1, flog2A(b)l}, (27.1)

так как всегда возможно добавить спереди любого из данных чисел некоторое количество нулей. Если речь идет об умножении квадрат­ных матриц А и В произвольного порядка п, то мы можем добавить к матрицам несколько нулевых строк и столбцов так, чтобы сделать их порядки равными 2Г1о&п1:

A 0 B 0 AB 0 00 00 00

О 00 00 О (27.2)

(нулями обозначены нулевые блоки соответствующего размера). Несмотря на переход от начальных данных к более громоздким, неко­торые из алгоритмов, основанных на стратегии «разделяй и власт­вуй» и использующих этот переход, имеют существенно меньшую сложность, чем наивные алгоритмы.

Предложение 27.1. Пусть вещественная функция f натурального аргумента такова, что /(п) =/(2г1о&"1) для всех n eN+ и


/(2fc)^


u, если k =0,

wf (2 k -1) + ϕ (2 k), если k > 0,


при fceN, где u,w — вещественные числа, причем и^О, w^l, a ip — неотрицательная функция, определенная для всех п е N+. Тогда при всех п е N+ выполняется неравенство (и, если п = 1, /Тп-П Пое.п ___________ (27.3)
^/gij^ +^(2nog2 n i)) еслип>1_

Доказательство. Легко видеть, что

|"log2|"|]]=riog2 n l-l. (27.4)

В самом деле, если 2к-г < п s= 2к, к > 1, то 2к-2 < Г|1 s= 2к-х, т. е. ес­ли [log2 n l=fc, то riogJ|ll =к-1. Для случая n = 2rlo& n l неравен­ство (27.3) выполнено по условию, для остальных случаев используем равенства /(n) = /(2rlo& n l), /ГГ-11 = /(г1"10^1"" / 2"1"1) = /(2rlog2п_|-1). □


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

Теорема 27.1. Пусть вещественная функция f натурального аргу­мента такова, что /(п) =/(2г1о&"1) для всех n eN+ и


Я2Ц

и, если к = 0,

wf (2fc-1)+ c (2fc) d, еслик>0,

при fc е N, где и,d ^ О, о О, w ^ 1. Тогда при рассмотрении f как функции, определенной для всех п е N+ выполняются оценки

(o(nd log n), если d = log2w,

f(n) = \o{nd), если d> log2 w,

[о(п1о&), если d< log2 мл

Доказательство следует из предложения 27.1 и теоремы 26.1. □

Подобно тому, как доказательство теоремы 26.1 было преобразо­вано в доказательство теоремы 26.2, из приведенного выше доказа­тельства мы можем получить доказательство следующей теоремы

Теорема 27.2. Пусть вещественная функция f натурального аргу­мента такова, что /(п) =/(2г1о&"1) для всех n eN+ и


/<2Ц

и, если к = 0,

wf (2fc-1)+ c (2fc) d, еслик>0,

где и, d ^ 0, о 0, w^ 1. Тогда для функции f{n), при рассмотрении ее как функции, определенной для всех п е N+ выполнено

fn(nd log n), если d =log2 w,

f{n) = I П(п1о& w), если d > log2 w,

[n(nd), если d<log2w.

Перейдем к примерам.

Пример 27 .1 (умножение Карацубы). Пусть а и Ъ — целые по­ложительные числа битовой длины т = 2к. Положив Z = 2fc-1, можем записать

a = e2l+f, b = g2l+h,

где e,f,g,h — целые числа битовой длины Z. А.А.Карацубе принад­лежит замечательное наблюдение, позволяющее вычислить произве­дение ab, выполнив всего три умножения чисел половинной длины, несколько сдвигов (домножений на 2т и 21) и несколько аддитивных операций над числами битовой длины s= 2т:

аЪ = eg221 + ((е + /) (g + К) - eg - fh)2l + fh, (27.5)


§ 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 = g 12 l + h i,

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

+ f)ig + K)= elgl221 + (exhx + g 1/1)2 l + 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+ разме­ра т = шах{А(а), А(Ь)} предполагает, что сначала мы находим к = = [log2 m l, затем добавляем спереди каждого из а,Ъ некоторое ко­личество нулей так, чтобы битовая длина каждого из сомножителей стала равной 2к, а после этого используем рекурсивный алгоритм, основанный на (27.5).

Мы можем применить теорему 27.1 (w = 3, d = 1), так как при произвольном m eN+ выполняется Гкм(т) = Гкм(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 (2 k) =


1, если k =0,

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


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

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

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

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

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

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

Пример 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 этой статьи.


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



использовании простейшего алгоритма, основанного на определении произведения матриц):

Хг =и + А22)п + Ваг), *5 = (Ац + А1222,
Х2 =
21 + А221Ъ Х6 =21 - Ап)п + В12),

Х3 = АП1222), Х7 = (А12 - А22)(В21 + В22),

Х42221п), далее используются только аддитивные операции:

Сп1457, c12 = x3+xs,

с21 = х 2 + х4, с22 = х 1 + х32 + х6.

В правильности этого можно убедиться прямой проверкой.

Равенство п = 2к создает возможность для рекурсивного примене­ния алгоритма. Алгоритм Штрассена будем обозначать начальными буквами St фамилии его автора.

В приведенных формулах использовано восемнадцать сложений матриц порядка Z. Сложение двух матриц порядка Z требует I2 сло­жений чисел. В предположении, что n = 2fc,fceN, имеем для общего числа операций—сложений и умножений чисел:

1, если п = 1,

Га(п) =

ГпЛ ГпЛ2 (27.12)

7rSt(JJ+18(Jj, еслип > 1.

Если п е N+ произвольно, то вначале к матрицам А и В добавля­ются нулевые строки и столбцы (см. (27.2)) так, чтобы порядки мат­риц стали равными 2Г1о&п1, а затем применяется описанный рекур­сивный алгоритм. Рассматривая равенство (27.12) как систему двух неравенств со знаками ^ и ^ и применяя теоремы 27.1 и 27.2, полу­чаем следующий результат.

Сложность Га(п) по числу арифметических операций алгоритма Штрассена перемножения двух числовых матриц порядка п допускает оценку rst(n) = e(n l0&7), в то время как алгоритм, непосредственно следующий из определения произведения матриц, имеет сложность в(п3) (при этом log2 7 = 2,81...).

Что касается булевых матриц, то алгоритм Штрассена не может быть непосредственно применен для их умножения по той, напри­мер, причине, что этим алгоритмом используется вычитание, для ко­торого нет аналога в булевой арифметике. Но матрицы А и В по­рядка п, состоящие из нулей и единиц, можно перемножить как


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


O (n 1о&7),-смысл

целочисленные. Каждый элемент такого произведения не превосхо­дит n, он равен нулю, если и только если соответствующий эле­мент произведения булевых матриц равен нулю. Для того, чтобы в процессе применения алгоритма Штрассена к целочисленным мат­рицам не возникало больших промежуточных значений, здесь мож­но все вычисления проводить по модулю n + 1, т. е. проводить вы­числения не в кольце Z, а в кольце Z n +1. Если M{n) —некото­рая верхняя граница для числа битовых операций, затрачиваемых при выполнении одной операции сложения, вычитания или умноже­ния в Z n +1, то сложность модифицированного таким способом ал­горитма Штрассена будет допускать оценку O{nъ^7M{n)). Наивное умножение в Z n +1 дает M (n) = O (log2 n). Таким образом, M{n) рас­тет очень медленно в сравнении с остальными затратами. Так как log2 7 = 2,81..., мы можем использовать для сложности алгоритма Штрассена, модифицированного на булев случай, например, оценку O(n2'82) или оценку O (n 1о&7), —смысл «O мягкого» объяснялся в кон­це § 22.

Применение алгоритма Штрассена и арифметики по модулю n + 1 дает алгоритм умножения двух булевых матриц порядка n, битовая сложность которого допускает оценки O{nъ^7) и O (n 2'82).

Мы ограничились рассмотрением применения стратегии «разде­ляй и властвуй» для случая, когда в результате этапа разделения воз­никают две задачи, и каждый из размеров входа примерно вдвое меньше изначального размера. Иногда разделение приводит к трем и более задачам.

В 1963 г. А.Л.Тоом обобщил идею умножения Карацубы1. Пусть s — большее единицы целое. Предполагая, что битовая длина m каж­дого из сомножителей имеет вид sk, k е N, последовательность дво­ичных цифр каждого из сомножителей можно разбить на s групп по sk -1 цифр. Тоом показал, что умножение исходных чисел сводится к 2 s - 1 умножениям чисел битовой длины sk -1 (в умножении Кара­цубы s = 2, 2 s - 1 = 3), остальные затраты—сложения, сдвиги—будут ограничены функцией cm, где c — зависящая от выбора s константа. Здесь этап разделения приводит к 2 s - 1 задачам. Для умножения То-ома (TM) неравенство


1, если m = 1, (2 s - 1) T ^ (—) + cm, если m > 1,

T^(m)^ sГmЛ (27.13)


См. [36], [4].


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

выполненное в случае m = sk, fceN, и равенство

r«(m) = rW(s 'l0& m l)J

выполненное при произвольном m eN+, приводят к оценке Т^(т) = = 0(m log s (2 s -i:)) для битовой сложности алгоритма, использующего разбиение на s частей. Может быть также показано, что

r(s)(m) = e(m log»(2 s -1)). (27.14)

Очевидно,

log s (2 s - 1) = log s 2 s (l - ^) = 1 + log s 2 + log s (l - ^) •

Отсюда

limlog,(2 s -l) = l.

Это означает, что для любого е > О можно найти целое s ^ 2 такое, что умножение Тоома с разделением на s частей (битовая длина числа предполагается равной sk, fceN) будет иметь битовую сложность, до­пускающую оценку 6(т1+5) при некотором 5 таком, что 0 < 5 ^ е; ра­зумеется, для битовой сложности этого алгоритма справедлива оцен­ка 0(.т1+П.

Скажем коротко об основной идее алгоритма Тоома, приводящей к неравенству (27.13). Если, как предполагалось, битовая длина каж­дого из сомножителей а,Ъ есть sk, fceN, то последовательность дво­ичных цифр каждого из сомножителей а, Ъ можно разбить на s групп по s -1 цифр:

а3-ъ ■■■> ai> ао> bs-1,...,Ьг0. Сами сомножители а, Ъ суть значения полиномов

А(х) = а - х"-1 +...+а1х + а0, В(х) = Ь-х*-1 +... + Ъгх + Ъ0

в точке х0 = 2 s *-1. Полином С(х), равный произведению А(х)В(х), есть полином степени не выше чем 2 s - 2 (мы не утверждаем, что эта степень равна 2 s - 2, так как возможно, что к изначально заданным целочисленным сомножителям спереди дописывались нули), и доста­точно знать значения С (х) в 2 s - 1 точках (узлах интерполяции) для того, чтобы затем, например, с помощью интерполяционной форму­лы Лагранжа найти значение

СС2**-1), (27.15)


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

равное ab. Тоом показал, что если в качестве узлов интерполяции xъ x2,..., x2s-i взять числа

-(s -l),-(s -2),...,-l,0,1,..., s -2, s -l,

рекурсивно с помощью рассматриваемого алгоритма найти

A(xi\ B{xi), C{xi)=A{xi)B{xi), i = l,2,...,2s-l,

и затем, пользуясь интерполяционной формулой Лагранжа, найти значение (27.15), то это приведет к (27.13), (27.14). Такое использова­ние интерполяции заключает в себе требуемое обобщение алгоритма Карацубы.

В 1972 г. Шенхаге и Штрассен, основываясь на идее Тоома исполь­зования интерполяции полиномов в алгоритмах умножения целых чисел, получили алгоритм умножения, битовая сложность которого допускает оценку O{m log m log log m), мы уже упоминали этот алго­ритм в §21. Функция m log m log log m растет медленнее, чем m1+5 при любом 5 > 0. Улучшение достигнуто за счет привлечения интер­поляции специального вида — так называемого быстрого преобразо­вания Фурье г. До настоящего времени результат Шенхаге—Штрассе-на остается рекордным. Шенхаге на основе этого алгоритма умноже­ния предложил алгоритм2 нахождения нод(a 0, aг), сложность кото­рого допускает оценку O{m log2 m log log m), где m — битовая длина большего числа a0 (в примере 21.2 было показано, что алгоритм Ев­клида имеет сложность Θ(m 2)).

Необходимо сказать, что преимущества по времени выполнения рассмотренных алгоритмов перед наивным умножением и алгорит­мом Евклида проявляются лишь при очень больших значениях m.

С умножением матриц положение таково, что обобщения алгорит­ма Штрассена в духе обобщения, предложенного Тоомом для алгорит­ма Карацубы, до сих пор не найдено. Используя другие идеи, Д. Коп-персмит и С. Виноград в 1987 г. предложили алгоритм со сложностью O (n 2,376), где n —порядок перемножаемых квадратных матриц3. Этот результат остается рекордным по сей день. Существует ли для любо­го s > 0 алгоритм умножения матриц со сложностью O{n2+е) —это открытый вопрос.

Об алгоритме Шенхаге—Штрассена см., например, [5, разд. 7.5]. См., например, [5, разд. 8.10]. См. [47].


Задачи



<== предыдущая лекция | следующая лекция ==>
Асимптотические оценки решений рекуррентных неравенств | Линейная сводимость
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 381; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.