Se ho due matrici e B , rispettivamente di dimensioni 1000 × 2 e 2 × 1000 , e voglio calcolare ( A B ) 5000 , è più efficiente riscrivere prima l'espressione come A ( B A ) 4999 B e solo allora valutare numericamente, perché A B è di dimensione 1000 × 1000 ma B A è di dimensione 2 × 2 .
Voglio risolvere una versione generalizzata di questo problema. Esiste un algoritmo ragionevolmente efficiente (non forza bruta) per ottimizzare un'espressione contenente:
- Variabili di matrice libere di dimensioni note
- Prodotti di sottoespressioni arbitrarie
- Sottoespressioni arbitrarie elevate al potere naturale
... in modo che ci voglia la minima quantità di lavoro per valutare numericamente, dopo aver sostituito le variabili di matrice libera con valori di matrice concreti?
Il problema di moltiplicazione della catena di matrici è un caso speciale del mio problema.
Modificare:
Questa è una risposta provvisoria. Mi sembra intuitivamente giusto, ma non ho prove che sia corretto. Se risulta corretto, sono ancora interessato alla prova. (Se non è corretto, ovviamente, per favore correggimi.)
Per ogni prodotto elevato a una potenza, diciamo, , considera ogni permutazione ciclica dei fattori:
- ...
... ricorsivamente. Ciascuna potenza deve essere calcolata usando l'espiazione mediante quadratura (ovviamente) e tutti gli altri prodotti devono essere calcolati usando l'ordine ottimale restituito dall'algoritmo di moltiplicazione della catena di matrici.
Modificare:
L'idea delineata nella mia modifica precedente è ancora in qualche modo non ottimale. L'algoritmo di esponenziazione mediante quadratura in realtà valuta le espressioni della forma o A n K , dove K non è necessariamente la matrice dell'identità. Ma il mio algoritmo non considera la possibilità di usare l'esponenziazione quadrando l'algoritmo con K non uguale alla matrice identità.