• Aucun résultat trouvé

Programmation dynamique

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation dynamique"

Copied!
2
0
0

Texte intégral

(1)

Algorithmique et programmation L2 MIASHS-Math

TP 5 2020-2021

Programmation dynamique

Produit d’une suite de matrices

On rappelle que le produit de matrices est associatif, c’est-`a-dire que (AB)C = A(BC). Pour faire le produit de matrices A1A2. . . An, il existe de nombreuses fa¸cons de parenth´eser correctement cette expression. Le but de cet exercice est de trouver un parenth´esage optimal d’un produit de matrices A1A2. . . An minimisant le nombre de multiplications scalaires.

1. Combien de multiplications d’entiers faut-il faire pour calculer (3)× (4)× (2)× 6 7 8 9

? Et

(((3)×(4))×(2))× 6 7 8 9

?

2. `A partir de maintenant, on suppose avoirn matrices A1, . . . , An multipliables, c’est-`a-dire que : A1 a dimensionp0×p1,A2 a dimensionp1×p2, etc. jusqueAn qui a dimension pn−1×pn. Remarquer que les coefficients desAi importent peu et que seul lespi sont n´ecessaires pour r´esoudre le probl`eme du parenth´esage optimal.

Montrer que le nombre de parenth´esages de A1A2. . . An est sup´erieur ou ´egal `a 2n−2. Est-il efficace de tester tous les parenth´esages possibles ?

3. Pour calculer le parenth´esage optimal, on va utiliser la m´ethode de programmation dynamique.

Notonsmi,j (1≤i6j6n) le nombre minimal de multiplications scalaires `a effectuer pour calculer Ai. . . Aj. D´emontrer que les mi,j sont d´efinies par les relations suivantes :

mi,j =

(0 sii=j mini6k<j(mi,k+mk+1,j+pi−1pkpj) sinon

4. ´Ecrire une fonctionmatrixMultCout(p)prenant en param`etre la listepdes dimensionspi,06i6net renvoyant le nombre minimal de multiplications scalaires `a effectuer pour calculer le produitA1. . . An. 5. Modifier la fonction pr´ec´edente en une fonction matrixMultSol(p) prenant le mˆeme param`etre et renvoyant le couple (m1,n, s) o`um1,n est comme avant etsest la chaˆıne de caract`eres comportant le parenth´esage des Ai. Par exemple, pour les matrices de la question 1, la fonction doit retourner un parenth´esage de coˆut 6, par exemple :(6, ’((((A1)A2)A3)A4)’).

Plus long sous-mot commun

Soit Σ un alphabet fini. On rappelle que Σ est l’ensemble des mots sur Σ. Pour u∈Σ, on note |u|

la longueur deu (son nombre de lettres).

(2)

Un sous-mot de u∈Σ est un motw∈Σ, tel qu’il existe une suite strictement croissante d’indices 16i1 < i2 < . . . < i|w|6|u|v´erifiant

wk=uik pour 16k6|w|.

Le probl`eme duplus long sous-mot commun est le suivant : ´etant donn´e deux mots u et v, d´eterminer un mot de longueur maximale qui soit `a la fois un sous-mot deu et un sous mot de v.

1. Dans cette question, on s’int´eresse au calcul de la longueur maximale d’un sous-mot commun `a u et v. On note m la longueur deu etnla longueur de v.

Pour (i, j) ∈ {0, . . . , m} × {0, . . . , n}, notons `i,j la longueur maximale d’un sous-mot commun `a u[1, . . . , i] etv[1, . . . , j].

Bien sˆur `i,0 = `0,j = 0 pour tout i, j. De plus, on a montr´e dans le cours qu’on a la propri´et´e suivante :

Pour tout 0< i6met 0< j 6n:

`i,j =

(`i−1,j−1+ 1 si u[i] =v[j]

max{`i,j−1, `i−1,j} sinon

Ecrire une fonction Python´ longueur(u,v) renvoyant un tableau A tel que, pour tout 06i6m et 06j6n,A[i, j] =`i,j.

2. Montrer qu’un couple de mots peut avoir un nombre exponentiel de sous-mots communs de longueur maximale (sur un alphabet fix´e).

3. ´Ecrire une fonction Python solution(u,v) renvoyant un sous-mot commun `a u et v de longueur maximale.

Coupe de de tige

Supposons qu’une compagnie de m´etallurgie veuille optimiser ses profits sur la d´ecoupe de tige de m´etal. Elle re¸coit de ses sous-traitants une tige de m´etal de longueurn∈Net elle dispose d’un catalogue avec les prix de vente pk des tiges de longueurs k∈ {1, . . . , n}. La compagnie souhaite maximer le prix de vente d’une tige de longueur n en la d´ecoupant ´eventuellement en plusieurs morceaux. Elle cherche donc `a maximiser la sommepk1 +· · ·+pkj pour k1, . . . , kj ∈ {1, . . . , n} tels quen=k1+· · ·+kj.

1. Pour 0 6 i 6 n, notons ri le prix de vente maximal qu’on peut obtenir en d´ecoupant une tige de longueur i. Exprimer ri `a partir de r1, r2, . . . , ri−1 et de p1, . . . , pn. (On peut bien sˆur exprimer ri seulement `a partir despj mais l’objectif est d’obtenir une relation peu coˆuteuse `a calculer).

2. ´Ecrire une fonction prixVenteMax(p,n) prenant en param`etres le catalogue p des prix (sous forme d’une liste) et la longueur n d’une tige et renvoyant le prix de vente maximal rn obtenu en faisant une coupe optimale de la tige. On utilisera pour cela la m´ethode de programmation dynamique en utilisant la relation trouv´ee `a la question pr´ec´edente.

3. D´emontrer que votre algorithme est correct. Donner sa complexit´e.

4. Modifier la fonction pr´ec´edente en une fonction coupeMax(p,n) prenant les mˆemes param`etres que prixVenteMaxmais renvoyant le couple (rn, `) o`urnest comme avant et`est une listek1, . . . , kj d’une coupe d’efficacit´e maximale. En particulier, cette liste doit donc v´erifier :

k1+· · ·+kj =n et rn=pk1 +· · ·+pkj.

2

Références

Documents relatifs

Écrire une fonction tous_pairs(L) prenant en entrée une liste L constituée d’entiers, et renvoyant un booléen indiquant si oui ou non tous les entiers de L sont

En notant str1 = prefixe1L et str2 = prefixe2L, une plus longue sous-chaine commune aux deux mots s’obtient en prenant une plus longue sous-chaine commune aux deux préfixes prefixe1

Pour chaque étape n, de N-1 à 1 : Étant donné une politique optimale pour l’étape n+1, identifier une politique optimale pour l’étape n au moyen d’une relation de

 Ecrire l’algorithme d’un programme qui permette de répéter à l’écran l’affichage de n astérisques. N étant une valeur

On appellera potentiel thermodynamique une fonction des param` etres d’´ etat d’un syst` eme thermodynamique et ´ eventuellement de param` etres ext´ erieurs qui se comporte un

L’objectif est de construire un tableau `a une dimension, de le remplir de valeurs, puis de calculer un certain nombre de param`etres relatifs `a ce tableau : la somme de

En admettant si besoin la propri´ et´ e pr´ ec´ edente, ´ ecrire un algorithme qui prend en entr´ ee I et d´ etermine la longueur maximale d’une sous-suite L d’intervalles deux `

Une mani `ere rapide d’ ´ecrire les r `egles de construction des propositions : A, B, C,.. S ´emantique de la logique propositionnelle Une fois que l’on s’est donn ´e ces