Мені щойно було доручено виконати це для домашніх завдань, і я подумав, що в мене є акуратне епіфанія: алгоритм Страссена жертвує "широтою" своїх складових попереднього підсумовування, щоб використовувати менше операцій в обмін на "глибші" компоненти попереднього підсумовування. які ще можна використовувати для отримання остаточної відповіді. (Це не найкращий спосіб сказати це, але мені важко це пояснити).
Я буду використовувати приклад множення двох складних чисел разом, щоб проілюструвати баланс " операцій проти компонентів ":
Зауважте, що ми використовуємо 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). Однак у другій операції використовуються менш чіткі числа. Проблема полягає в тому, що кількість різних чисел еквівалентна кількості компонентів продукту, які потрібно обчислити для множення матриці. Ми просто оптимізуємо для цього, щоб знайти певний вигляд основних операцій, які використовують ізоморфні виводи, використовуючи різні варіації через властивість розподілу.
Можливо, це якимось чином може бути пов’язане з топологією? Це просто спосіб мого мирянина це зрозуміти.
Редагувати: Ось малюнок моїх записок, який я намалював у процесі пояснення складного числа: