Мне только что было поручено сделать это для домашней работы, и я подумал, что у меня есть аккуратное прозрение: алгоритм Штрассена жертвует «широтой» своих компонентов предварительного суммирования, чтобы использовать меньше операций в обмен на «более глубокие» компоненты предварительного суммирования это все еще может быть использовано для получения окончательного ответа. (Это не лучший способ сказать это, но мне трудно это объяснить).
Я собираюсь использовать пример умножения двух комплексных чисел для иллюстрации баланса между « операциями и компонентами »:
Обратите внимание, что мы используем 4 умножения, в результате чего получаем 4 компонента продукта :
Обратите внимание, что 2 конечных компонента, которые мы хотим: действительная и мнимая части комплексного числа, на самом деле являются линейными уравнениями: это суммы масштабированных произведений. Таким образом, мы имеем дело с двумя операциями здесь: сложение и умножение.
Дело в том, что наши 4 компонента продукта могут представлять наши 2 конечных компонента, если мы просто добавим или вычтем наши компоненты:
Но наши последние 2 компонента могут быть представлены как суммы продуктов. Вот что я придумал:
Если вы видите, нам нужны только 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). Вторые операции используют менее четкие числа, хотя. Суть в том, что количество различных чисел эквивалентно количеству компонентов продукта, которое необходимо вычислить для умножения матриц. Мы просто оптимизируем это, чтобы найти определенное представление об основных операциях, которые используют изоморфные выходные данные, используя другое изменение через свойство распределения.
Возможно, это как-то связано с топологией? Это просто способ моего непрофессионала понять это.
Изменить: Вот изображение моих заметок, которые я нарисовал в процессе объяснения комплексного числа: