Si j'ai deux matrices et B , de dimensions 1000 × 2 et 2 × 1000 , respectivement, et que je veux calculer ( A B ) 5000 , il est plus efficace de réécrire d'abord l'expression sous la forme A ( B A ) 4999 B et ensuite seulement évaluer numériquement, car A B est de dimension 1000 × 1000 mais B A est de dimension 2 × 2 .
Je veux résoudre une version généralisée de ce problème. Existe-t-il un algorithme raisonnablement efficace (pas de force brute) pour optimiser une expression contenant:
- Variables matricielles libres de dimensions connues
- Produits de sous-expressions arbitraires
- Sous-expressions arbitraires élevées à la puissance naturelle
... de sorte qu'il faut le moins de travail pour évaluer numériquement, après avoir remplacé les variables matricielles libres par des valeurs matricielles concrètes?
Le problème de multiplication de la chaîne matricielle est un cas particulier de mon problème.
Éditer:
Ceci est une réponse provisoire. Cela me semble intuitivement juste, mais je n'ai aucune preuve que c'est correct. Si cela s'avère correct, je suis toujours intéressé par la preuve. (Si ce n'est pas correct, bien sûr, veuillez me corriger.)
Pour chaque produit élevé à une puissance, disons , considérons chaque permutation cyclique des facteurs:
- ...
... récursivement. Chaque puissance doit être calculée en utilisant l'exponentiation par quadrature (évidemment), et tous les autres produits doivent être calculés en utilisant l'ordre optimal renvoyé par l'algorithme de multiplication de la chaîne matricielle.
Éditer:
L'idée décrite dans ma précédente édition n'est toujours pas optimale. L'algorithme d'exponentiation par quadrature évalue en fait des expressions de la forme ou A n K , où K n'est pas nécessairement la matrice d'identité. Mais mon algorithme ne considère pas la possibilité d'utiliser l'algorithme d'exponentiation par quadrature avec K différent de la matrice d'identité.