Saya baru saja ditugaskan mengerjakan ini untuk pekerjaan rumah, dan saya pikir saya memiliki pencerahan yang rapi: Algoritma Strassen mengorbankan "luasnya" komponen pra-penjumlahannya untuk menggunakan lebih sedikit operasi dengan imbalan komponen pra-penjumlahan "lebih dalam" yang masih bisa digunakan untuk mengekstrak jawaban akhir. (Ini bukan cara terbaik untuk mengatakannya, tetapi sulit bagi saya untuk menjelaskannya).
Saya akan menggunakan contoh mengalikan dua bilangan kompleks bersama-sama untuk menggambarkan keseimbangan " operasi vs. komponen ":
Perhatikan bahwa kami menggunakan 4 perkalian, yang menghasilkan 4 komponen produk :
Perhatikan bahwa 2 komponen akhir yang kita inginkan: bagian nyata dan imajiner dari bilangan kompleks, sebenarnya adalah persamaan linier: mereka adalah jumlah produk skala. Jadi kita berurusan dengan dua operasi di sini: penjumlahan dan perkalian.
Faktanya adalah bahwa 4 komponen produk kami dapat mewakili 2 komponen akhir kami jika kami hanya menambah atau mengurangi komponen kami:
Namun, 2 komponen akhir kami dapat direpresentasikan sebagai jumlah produk. Inilah yang saya pikirkan:
Jika Anda dapat melihat, kami sebenarnya hanya membutuhkan 3 komponen produk yang berbeda untuk membuat dua komponen terakhir kami:
Tapi tunggu! Setiap huruf kapital ada di dalam produk mereka sendiri! Tetapi tangkapannya adalah bahwa kita tahu bahwa kita dapat menghasilkan (A + B + C + D) dari (a + b) (c + d), yang hanya 1 kali perkalian.
Jadi pada akhirnya, algoritma kami dioptimalkan untuk menggunakan lebih sedikit, tetapi komponen "lebih gemuk", tempat kami menukar jumlah penggandaan untuk operasi penjumlahan yang lebih banyak.
Bagian dari apa yang memungkinkan ini adalah properti distributif, yang memungkinkan A (B + C) setara dengan (AB + AC). Perhatikan bagaimana yang pertama dapat dihitung menggunakan operasi 1 add dan 1 multiply, sedangkan yang kedua membutuhkan 2 multiply dan 1 sum.
Algoritma Strassen adalah perpanjangan dari optimasi yang kami terapkan pada produk bilangan kompleks, kecuali ada lebih banyak istilah target produk dan kemungkinan lebih banyak komponen produk yang dapat kita gunakan untuk mendapatkan persyaratan tersebut. Untuk matriks 2x2, algoritma Strassen mengubah algoritma yang membutuhkan 8 perkalian menjadi satu yang membutuhkan 7 perkalian, dan memanfaatkan properti distributif untuk "menggabungkan" dua perkalian menjadi satu operasi, dan alih-alih mengambil dari simpul "lebih gemuk" untuk mengekstraksi satu istilah produk atau yang lain, dll.
Contoh yang baik: untuk mendapatkan (-1) dan (2) dan (5), Anda dapat menganggapnya hanya (-1), (2), (5), atau Anda dapat menganggapnya sebagai (2-3) ), (2), (2 + 3). Namun, operasi kedua menggunakan angka yang tidak terlalu berbeda. Tangkapannya adalah bahwa jumlah angka yang berbeda setara dengan jumlah komponen produk yang Anda perlukan untuk perkalian matriks. Kami hanya mengoptimalkan ini untuk menemukan pandangan tertentu dari operasi yang mendasari yang memanfaatkan output isomorfik menggunakan variasi yang berbeda melalui properti distributif.
Mungkin ini bisa dikaitkan dengan topologi dalam beberapa cara? Ini hanya cara awam saya memahaminya.
Sunting: Ini adalah gambar catatan saya yang saya gambar dalam proses membuat penjelasan bilangan kompleks: