Как Штрассен придумал свой метод умножения матриц?


18

Знаменитый алгоритм умножения матриц Штрассена - это настоящее удовольствие для нас, так как он уменьшает временную сложность с традиционного O (n 3 ) до O (n 2.8 ).

Но из всех ресурсов, через которые я прошел, даже из книги Кормена и Стивена Скиенны, в них явно не говорится о том, как об этом думал Штрассен.

В чем смысл алгоритма умножения матриц Штрассена? Это счастливая случайность или в этом есть что-то более глубокое?


Мне сказали, что на самом деле никто не знает, все будет в основном спекуляцией. Тем не менее, я нашел это, что может быть применимо (хотя я не читал это).
Dukeling

Я думаю, что Штрассен alg. ясно в википедии.
MarshalSHI

4
@Meshuai Я думаю, это просто объясняет, почему это работает , а не то, как он думал об этом , как с большинством других ресурсов.
Dukeling

2
Вы можете взглянуть на оригинальную статью Штрассена: scgroup.hpclab.ceid.upatras.gr/class/SC/Papers/Strassen.pdf
Аксель Кемпер,

Ответы:


26

Кроме Штрассена, никто не может рассказать вам, как у Штрассена появилась его идея. Однако, я могу рассказать вам, как вы могли бы найти эту формулу самостоятельно - при условии, что вы заинтересованы в алгебраической геометрии и теории представлений. Это также дает вам инструменты, чтобы показать, что формула Штрассена настолько хороша, насколько это возможно, или, точнее, что нет формулы, вычисляющей произведение двух матриц 2 × 2, использующих менее 7 умножений .

Так как вас интересуют матрицы, я предполагаю, что вы знаете базовую линейную алгебру и будете немного размыты для более сложных деталей.

Сначала пусть будет E множество всех линейных отображений из плоскости в плоскость. Это в основном набор всех матриц 2 × 2, но мы забываем о конкретной системе координат - потому что, если бы существовала лучшая система координат, чем «по умолчанию», мы могли бы быть заинтересованы в ее использовании для умножения матриц. Обозначим также через E † двойственное пространство E, а через X = P (E⊗E † ⊗E †) проективное пространство, связанное с тензорным произведением E⊗E † ⊗E † .

Элемент X = P (E⊗E † ⊗E †) специального вида [c⊗α⊗β] можно интерпретировать как элементарную операцию над матрицами, которая в некоторых подходящих системах координат считывает коэффициент матрицы и коэффициент матрицы B и записывают произведение этих коэффициентов в некоторой матрице C . Общий элемент X представляет собой комбинацию этих элементарных операций, так что продукт П двух матриц, понимаемый как отображение из Р (Е) × Р (Е) к Р (Е), представляет собой точка в X .

Обычную формулу матричного произведения и формулу Штрассена можно выразить как комбинации этих линейных операций, поэтому позвольте мне обозначить через W by множество этих элементарных операций [c⊗α⊗β] и позвольте мне описать геометрически их комбинации.

Пусть W₂ будет многообразием секущих из W₁ в X. Это получается взятие (закрытия) объединения всех линий , проходящих через два (родовые) точек W₁ . Мы можем думать о нем как о множестве всех комбинаций двух элементарных операций.

Пусть W₃ будет многообразием секущих плоскостей в W₁ в X. Это получается взятие (закрытия) объединения всех плоскостей , проходящих через три (родовые) точек W₁ . Мы можем рассматривать его как совокупность всех комбинаций трех элементарных операций.

Точно так же мы определяем секущие варианты для больших индексов. Обратите внимание, что эти сорта растут все больше и больше, то есть W₁⊂W₂⊂W₃⊂ ⋯ Следовательно, классическая формула произведения матриц показывает, что произведение матриц является точкой W₈ . Фактически

ПРЕДЛОЖЕНИЕ (Штрассен) - Произведение матриц π лежит в WP.

Насколько я знаю, Штрассен так не говорил, однако это геометрическая точка зрения на этот вопрос. Эта точка зрения очень полезна, потому что она также позволяет доказать, что формула Штрассена является наилучшей, то есть, что π не лежит в W₆ . Геометрические методы, разработанные здесь, также могут быть использованы для более широкого круга задач.

Надеюсь, я поймал ваше любопытство. Вы можете пойти дальше, прочитав эту статью Ландсберга и Манивеля:

http://arxiv.org/abs/math/0601097

Ty Я не буду исправлять эту опечатку, потому что я простудился.


Довольно просто показать, что возможность получить (3x3) матричное произведение с 21 умножением приведет к асимптотически более быстрому алгоритму. Есть идеи, если это возможно / невозможно / неизвестно?
gnasher729

3

Мне только что было поручено сделать это для домашней работы, и я подумал, что у меня есть аккуратное прозрение: алгоритм Штрассена жертвует «широтой» своих компонентов предварительного суммирования, чтобы использовать меньше операций в обмен на «более глубокие» компоненты предварительного суммирования это все еще может быть использовано для получения окончательного ответа. (Это не лучший способ сказать это, но мне трудно это объяснить).

Я собираюсь использовать пример умножения двух комплексных чисел для иллюстрации баланса между « операциями и компонентами »:

Уравнение для комплексных чисел.

Обратите внимание, что мы используем 4 умножения, в результате чего получаем 4 компонента продукта :

У нас есть 4 компонента продукта.

Обратите внимание, что 2 конечных компонента, которые мы хотим: действительная и мнимая части комплексного числа, на самом деле являются линейными уравнениями: это суммы масштабированных произведений. Таким образом, мы имеем дело с двумя операциями здесь: сложение и умножение.

Дело в том, что наши 4 компонента продукта могут представлять наши 2 конечных компонента, если мы просто добавим или вычтем наши компоненты:

Наши компоненты продукта могут представлять наши окончательные.

Но наши последние 2 компонента могут быть представлены как суммы продуктов. Вот что я придумал:

На самом деле нам нужны только 3 отдельных компонента продукта.

Если вы видите, нам нужны только 3 отдельных компонента продукта, чтобы сделать наши последние два:

Наши 3 отдельных компонента.

Но ждать! Каждая из заглавных букв - сама по себе продукция! Но выгода в том, что мы знаем, что мы можем генерировать (A + B + C + D) из (a + b) (c + d), что является только 1 умножением.

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

Частью того, что позволяет это, является свойство распределения, которое позволяет A (B + C) быть эквивалентным (AB + AC). Обратите внимание, как первое можно вычислить, используя операции 1 сложения и 1 умножения, в то время как второе требует 2 умножения и 1 суммы.

Алгоритм Штрассена является расширением оптимизации, которую мы применили к продуктам с комплексным числом, за исключением того, что есть больше целевых терминов продукта и возможно больше компонентов продукта, которые мы можем использовать для получения этих терминов. Для матрицы 2x2 алгоритм Штрассена трансформирует алгоритм, которому требуется 8 умножений, в алгоритм, которому требуется 7 умножений, и использует свойство распределения для «объединения» двух умножений в одну операцию, а вместо этого убирает из нового узла «более толстый» для извлечения одного термин продукта или другой, и т. д.

Хороший пример: чтобы получить (-1) и (2) и (5), вы можете думать об этом как о (-1), (2), (5), или вы можете думать об этом как (2-3 ), (2), (2 + 3). Вторые операции используют менее четкие числа, хотя. Суть в том, что количество различных чисел эквивалентно количеству компонентов продукта, которое необходимо вычислить для умножения матриц. Мы просто оптимизируем это, чтобы найти определенное представление об основных операциях, которые используют изоморфные выходные данные, используя другое изменение через свойство распределения.

Возможно, это как-то связано с топологией? Это просто способ моего непрофессионала понять это.

Изменить: Вот изображение моих заметок, которые я нарисовал в процессе объяснения комплексного числа:

Некоторые замечания для выяснения части комплексного числа.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.