Jika saya memiliki dua matriks dan B , masing-masing berdimensi 1000 × 2 dan 2 × 1000 , dan ingin menghitung ( A B ) 5000 , lebih efisien untuk terlebih dahulu menulis ulang ekspresi sebagai A ( B A ) 4999 B dan baru kemudian mengevaluasi secara numerik, karena A B adalah dimensi 1000 × 1000 tetapi B A adalah dimensi 2 × 2 .
Saya ingin menyelesaikan versi umum masalah ini. Apakah ada algoritma yang cukup efisien (bukan kekerasan) untuk mengoptimalkan ekspresi yang mengandung:
- Variabel matriks bebas dari dimensi yang diketahui
- Produk dari subekspresi sewenang-wenang
- Subekspresi sewenang-wenang dinaikkan menjadi kekuatan alami
... sehingga dibutuhkan paling sedikit pekerjaan untuk mengevaluasi secara numerik, setelah mengganti variabel matriks bebas dengan nilai matriks konkret?
Masalah penggandaan rantai matriks adalah kasus khusus dari masalah saya.
Edit:
Ini adalah jawaban sementara. Tampaknya secara intuitif benar bagi saya, tetapi saya tidak punya bukti bahwa itu benar. Jika ternyata benar, saya masih tertarik pada buktinya. (Jika itu tidak benar, tentu saja, tolong perbaiki saya.)
Untuk setiap produk yang dinaikkan menjadi daya, katakanlah, , pertimbangkan setiap permutasi siklik faktor-faktor:
- ...
... secara rekursif. Setiap daya dihitung menggunakan eksponensial dengan mengkuadratkan (jelas), dan semua produk lain dihitung menggunakan urutan optimal yang dikembalikan oleh algoritma penggandaan rantai matriks.
Edit:
Gagasan yang diuraikan dalam edit saya sebelumnya masih agak tidak optimal. Eksponen dengan algoritma kuadrat sebenarnya mengevaluasi ekspresi dari bentuk atau A n K , di mana K belum tentu merupakan matriks identitas. Tapi algoritma saya tidak mempertimbangkan kemungkinan menggunakan eksponensial dengan mengkuadratkan algoritma dengan K tidak sama dengan matriks identitas.