Właśnie mi powierzono zadanie do odrabiania lekcji i pomyślałem, że miałem fajne objawienie: algorytm Strassena poświęca „szerokość” swoich składników do podsumowania, aby użyć mniej operacji w zamian za „głębsze” elementy do podsumowania które nadal można wykorzystać do wyodrębnienia ostatecznej odpowiedzi. (To nie jest najlepszy sposób, aby to powiedzieć, ale trudno mi to wytłumaczyć).
Użyję przykładu pomnożenia razem dwóch liczb zespolonych, aby zilustrować równowagę „ operacji vs. składników ”:
Zauważ, że używamy 4 multiplikacji, które dają 4 składniki produktu :
Zauważ, że 2 ostateczne składniki, które chcemy: rzeczywista i urojona część liczby zespolonej, są w rzeczywistości równaniami liniowymi: są to sumy skalowanych produktów. Mamy tutaj do czynienia z dwiema operacjami: dodawaniem i mnożeniem.
Faktem jest, że nasze 4 komponenty produktu mogą reprezentować nasze 2 końcowe komponenty, jeśli po prostu dodamy lub odejmiemy nasze komponenty:
Ale nasze ostatnie 2 elementy mogą być reprezentowane jako sumy produktów. Oto, co wymyśliłem:
Jeśli widzisz, w rzeczywistości potrzebujemy tylko 3 różnych składników produktu, aby nasze dwa ostatnie:
Ale poczekaj! Każda z wielkich liter jest sama w sobie produktem! Ale haczyk polega na tym, że wiemy, że możemy wygenerować (A + B + C + D) z (a + b) (c + d), co jest tylko 1 pomnożeniem.
Ostatecznie nasz algorytm jest zoptymalizowany pod kątem korzystania z mniejszych, ale „grubszych” komponentów, gdzie wymieniamy liczbę mnożeń na bardziej sumującą operację.
Częścią tego, co to umożliwia, jest właściwość dystrybucyjna, która umożliwia równoważność A (B + C) z (AB + AC). Zauważ, jak pierwszy można obliczyć za pomocą 1 operacji dodawania i 1 mnożenia, podczas gdy drugi wymaga 2 mnożeń i 1 sumy.
Algorytm Strassena jest rozszerzeniem optymalizacji, którą zastosowaliśmy do produktów liczb zespolonych, z tym wyjątkiem, że istnieje więcej terminów dotyczących produktów docelowych i możliwe więcej składników produktu, których możemy użyć, aby uzyskać te warunki. W przypadku macierzy 2x2 algorytm Strassena przekształca algorytm wymagający 8 multiplikacji w taki, który wymaga 7 multiplikacji, i wykorzystuje właściwość dystrybucyjną do „scalenia” dwóch multiplikacji w jedną operację, a zamiast tego usuwa nowy węzeł „grubszy” w celu wyodrębnienia jednego termin produktu lub inny, itp.
Dobry przykład: aby uzyskać (-1) i (2) i (5), możesz myśleć o tym jak o (-1), (2), (5) lub możesz o tym myśleć jako (2-3 ), (2), (2 + 3). Druga operacja używa jednak mniej wyraźnych liczb. Problem polega na tym, że liczba różnych liczb jest równoważna liczbie składników produktu, które należy obliczyć w celu pomnożenia macierzy. Po prostu optymalizujemy to w celu znalezienia pewnego widoku na podstawowe operacje, które wykorzystują wyniki izomorficzne przy użyciu innej odmiany w obrębie właściwości dystrybucyjnej.
Być może można to w jakiś sposób powiązać z topologią? To tylko sposób na zrozumienie tego przez mojego laika.
Edycja: Oto zdjęcie moich notatek, które narysowałem w trakcie wyjaśniania liczby złożonej: