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

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

177

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

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

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

Х4=А22(В21-Вп), далее используются только аддитивные операции:

Сп=Х1+Х4-Х5+Х7, c12 = x3+xs,

с21 = х2 + х4, с22 = х1 + х3-х2 + х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(nl0&7), в то время как алгоритм, непосредственно следующий из определения произведения матриц, имеет сложность в(п3) (при этом log2 7 = 2,81...).

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

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

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

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

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

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

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

1, если m = 1,

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

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

См. [36], [4].

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