23
Programmation dynamique : Optimisation d’un produit matriciel Option Informatique 2015 Programmation dynamique : Optimisation d’un produit matric

Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Programmation dynamique :Optimisation d’un produit matriciel

Option Informatique 2015

Programmation dynamique : Optimisation d’un produit matriciel

Page 2: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

De quoi s’agit-il ?

n matrices rectangulaires A1, · · · ,An.

On veut calculer le produit B = A1 · · ·An.

∀i ∈ {1, · · · ,n} , Ai est de format pi−1 × pi.

Divers parenthésages sont envisageables.

Ils donnent tous le même résultat (associativité), mais ...

peut-être pas avec la même efficacité !

Programmation dynamique : Optimisation d’un produit matriciel

Page 3: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Attention aux matrices en caml !

Comment définir une matrice 10× 10 d’entiers ?

matrice = vecteur de vecteurs→ type = int vect vect

let lgn = make_vect 10 0;;

let mat = make_vect 10 lgn;;

mat.(3).(1) ← 5;;

mat;;

on voulait modifier le terme (ligne 4, colonne 2) ...

c’est raté ! Le constater ...

Programmation dynamique : Optimisation d’un produit matriciel

Page 4: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Attention aux matrices en caml !

Solution correcte :

mat = make_vect 10 [||];;

for i = 0 to 9 domat.(i) ← make_vect 10 0

done;;

mat.(3).(1) ← 5;;

mat;;

→ on peut aussi utiliser make_matrix

Programmation dynamique : Optimisation d’un produit matriciel

Page 5: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Produit de 2 matrices

A =[ai,j

]16i6p16j6q

et B =[bi,j

]16i6q16j6r

C = AB =[ci,j

]16i6p16j6r

avec :

∀ (i, j) ∈ {1, · · · ,p} × {1, · · · , r} , ci,j =

q∑k=1

ai,k bk ,j

→ Algorithme “naïf”

Programmation dynamique : Optimisation d’un produit matriciel

Page 6: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Produit de 2 matrices en camllet mult_matrices a b =let p = vect_length a inlet q = vect_length a.(0) inlet q’ = vect_length b inlet r = vect_length b.(0) inif q <> q’ then failwith "produit impossible"elselet c = make_matrix p r 0 infor i = 1 to p dofor j = 1 to r dofor k = 1 to q doc.(i-1).(j-1) ← c.(i-1).(j-1) +

a.(i-1).(k-1) * b.(k-1).(j-1)donedonedone;c;;

→ Coût = pqr multiplications

Programmation dynamique : Optimisation d’un produit matriciel

Page 7: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Parenthésages possibles pour n = 3

A1 (A2A3)

(A1A2)A3

→ Total : 2

Programmation dynamique : Optimisation d’un produit matriciel

Page 8: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Parenthésages possibles pour n = 4

A1 (A2 (A3A4))

A1 ((A2A3)A4)

(A1A2) (A3A4)

(A1 (A2A3))A4

((A1A2)A3)A4

→ Total : 5

Programmation dynamique : Optimisation d’un produit matriciel

Page 9: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Impact du parenthésage sur le côut global

A1 de format 10× 100,

A2 de format 100× 5,

A3 de format 5× 50.

(A1A2)A3 → 10× 100× 5 + 10× 5× 50 = 7500

A1 (A2A3)→ 100× 5× 50 + 10× 100× 50 = 75000

Rapport de 1 à 10 ... !

Programmation dynamique : Optimisation d’un produit matriciel

Page 10: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Et si on les essaie tous ?

Pn = nombre de parenthésages pour n matrices.

P1 = 1.

Pour tout n > 2 : Pn =n−1∑k=1

Pk Pn−k .

P10 = 4 862; P20 = 1 767 263 190; P30 > 1015

C’est beaucoup trop ... !

On peut montrer que Pn =1n

(2n − 2n − 1

)∼

4n−1

n3/2√π

Programmation dynamique : Optimisation d’un produit matriciel

Page 11: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Et si on les essaie tous ?

Pn = nombre de parenthésages pour n matrices.

P1 = 1. Pour tout n > 2 : Pn =n−1∑k=1

Pk Pn−k .

P10 = 4 862; P20 = 1 767 263 190; P30 > 1015

C’est beaucoup trop ... !

On peut montrer que Pn =1n

(2n − 2n − 1

)∼

4n−1

n3/2√π

Programmation dynamique : Optimisation d’un produit matriciel

Page 12: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Parenthésage optimal

Structure nécessaire d’un parenth. Opt. de Ai · · ·Aj :

pour un certain k ∈ {i, · · · , j − 1} :parenth. opt. de Ai · · ·Ak+parenth. opt. de Ak+1 · · ·Aj

Car sinon, on pourrait réduire strictement le nb demultiplications scalaires en remplaçant le parenthésagede Ai · · ·Ak ou de Ak+1 · · ·Aj par un parenthésagemeilleur.

Programmation dynamique : Optimisation d’un produit matriciel

Page 13: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Parenthésage optimal

Notation

m (i, j) = nb minimal de multiplications pour Ai · · ·Aj.

Objectif calculer m (1,n) .

Formule de récurrence

m (i, j) =

0 si i = j

min{m (i, k ) + m (k + 1, j) + pi−1pk pj

}si i < j

On définit pour chaque (i, j) :

s (i, j) = un entier k ∈ {i, · · · , j − 1} t.q.m (i, j) = m (i, k ) + m (k + 1, j) + pi−1pk pj.

Programmation dynamique : Optimisation d’un produit matriciel

Page 14: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

Approche récursive→ complexité exponentielle.

Approche “tabulaire” :

Calcul des m(i,i)

Programmation dynamique : Optimisation d’un produit matriciel

Page 15: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

Approche récursive→ complexité exponentielle.

Approche “tabulaire” :

Calcul des m(i,i)

Programmation dynamique : Optimisation d’un produit matriciel

Page 16: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

Approche récursive→ complexité exponentielle.

Approche “tabulaire” :

Calcul des m(i,i)

Calcul des m(i,i)

Programmation dynamique : Optimisation d’un produit matriciel

Page 17: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

Approche récursive→ complexité exponentielle.

Approche “tabulaire” :

Calcul des m(i,i)

Calcul des m(i,i+1)

Programmation dynamique : Optimisation d’un produit matriciel

Page 18: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

Approche récursive→ complexité exponentielle.

Approche “tabulaire” :

Calcul des m(i,i)

Calcul des m(i,i+2)

Programmation dynamique : Optimisation d’un produit matriciel

Page 19: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

Approche récursive→ complexité exponentielle.

Approche “tabulaire” :

Calcul des m(i,i)

Calcul de m(1,n)

Programmation dynamique : Optimisation d’un produit matriciel

Page 20: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Calcul des m (i, j) et des s (i, j)

let calc_opt p =let n = (vect_length p) - 1 inlet m = make_matrix (n+1) (n+1) 0 inlet s = make_matrix (n+1) (n+1) 0 infor ` = 2 to n dofor i = 1 to n-`+1 dolet j = i+`-1 inm.(i).(j) ← ∞;for k = i to j-1 dolet q = m.(i).(k) + m.(k+1).(j) +

p.(i-1) * p.(k) * p.(j) inif q < m.(i).(j) then (m.(i).(j) ← q;s.(i).(j) ← k

)done

donedone;(m,s);;

Programmation dynamique : Optimisation d’un produit matriciel

Page 21: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Construction d’une solution optimale

Récursivement :(Ai · · ·As(i,j)

) (As(i,j)+1 · · ·Aj

)let rec aff_opt s i j =if i = j then (print_char ‘A‘;print_int i

)else(print_char ‘(‘;aff_opt s i s.(i).(j);aff_opt s (s.(i).(j) + 1) j;print_char ‘)‘;

);;

Programmation dynamique : Optimisation d’un produit matriciel

Page 22: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

Construction d’une solution optimale

let par_opt_et_nb_mult p =let (m,s) = calc_opt p inlet n = (vect_length p) - 1 inaff_opt s 1 n;print_newline ();print_string "Nombre de multiplications = ";print_int m.(1).(n);print_newline ()

;;

par_opt_et_nb_mult [|10;100;5;50|];;((A1A2)A3)Nombre de multiplications = 7500

par_opt_et_nb_mult [|56;27;171;10;100;5;50|];;((A1(A2(A3(A4A5))))A6)Nombre de multiplications = 58195

Programmation dynamique : Optimisation d’un produit matriciel

Page 23: Programmation dynamique : Optimisation d’un produit matricielinfo-mpsi.weebly.com/uploads/1/3/0/1/13014682/mult-matrices_online.pdfProgrammation dynamique : Optimisation d’un produit

�b�y�e

Programmation dynamique : Optimisation d’un produit matriciel