Algorithmique et programmation L2 MIASHS-Math
TD 5 2020-2021
Programmation dynamique
Exercice 1 Pyramide de nombres
9 5 9 3 2 4 6
7 4 3 Dans une pyramide de nombres, on cherche, en partant du sommet de la
pyramide, et en se dirigeant vers le bas `a chaque ´etape (vers la case en-dessous juste
`
a gauche ou la case en-dessous juste `a droite), `a maximiser le total des nombres travers´es. Dans l’exemple ci-contre, le maximum est obtenu pour le chemin en gras (3 + 7 + 4 + 9 = 23). On appellera ce nombre la valeur de la pyramide.
On appelle n le nombre de cases `a l’´etage inf´erieur de la pyramide (sur l’exemple n = 4) et on encode la pyramide dans un tableau T : T[i, j] est la
valeur du nombre situ´e `a l’´etage ien partant du bas et en position j en partant de la gauche.
Toujours sur l’exemple, T[1,1] = 9, T[1,2] = 5, T[2,1] = 2, T[3,1] = 7.
Pour r´esoudre ce probl`eme on va calculer un tableau L tel que pour tout i∈ {1, . . . , n} et tout j ∈ {1, . . . , n−i+ 1},L[i, j] est la valeur de la sous pyramide dont le sommet est la case en position (i, j).
1. Que vautL[1, j] ?
2. Montrer que pour i >1,L[i, j] =T[i, j] + max{L[i−1, j], L[i−1, j+ 1]}.
3. ´Ecrire un algorithme qui retourne la valeur d’une pyramide donn´ee en entr´ee.
4. Donner la complexit´e de votre algorithme.
Exercice 2 Carr´es monochromatiques
On consid`ere un tableau `a 2 dimensions T[1. . . n,1. . . n] avec T[i, j] ∈ {0,1} pour tout i, j∈ {1, . . . , n}. Un carr´e de ce tableau est d´efini par son coin (a, b)∈ {1, . . . , n} × {1, . . . , n}et sa largeur`∈ {1, . . . , n}: c’est l’ensemble des cases (i, j) deT avec (i, j)∈ {a, a+ 1, . . . , a+`− 1} × {b, b+ 1, . . . , b+`−1}. On noteC(a, b, `) ce carr´e (il est d´efini seulement si a+`−16n et b+`−1 6 n). Le carr´e C(a, b, `) est dit monochromatique si T[i, j] = T[a, b] pour tout (i, j)∈ {a, a+ 1, . . . , a+`−1} × {b, b+ 1, . . . , b+`−1}.
Le but de cet exercice est de calculer `maximum tel qu’il existe un carr´e monochromatique de largeur` dans le tableauT : on notera`max cette valeur maximale.
1. On d´efinit D le tableau de taille n×n tel que D[i, j] = 0 si i+j est pair, et D[i, j] = 1 sinon. Quelle est la valeur `max de ce tableau ?
On va d´evelopper un algorithme permettant de calculer `max pour un tableau T par une technique de programmation dynamique. D´efinissons ui,j la largeur maximum d’un carr´e mo- nochromatique dont le coin est (i, j) : c’est la valeur maximale de ` telle que C(i, j, `) est monochromatique. On va pour cela remplir un tableauL[1. . . n,1. . . n] et on veut qu’`a la fin de l’algorithme, pour tout 16i, j6n,L[i, j] =ui,j.
2. Exprimer `max en fonction desui,j.
1
3. Montrer que pour touti∈ {1, . . . , n},un,i=ui,n= 1.
4. Montrer qu’on a la propri´et´e suivante : pouri < n etj < n :
— Si T[i, j] =T[i, j+ 1] =T[i+ 1, j] =T[i+ 1, j+ 1], alors ui,j = 1 + min{ui,j+1, ui+1,j, ui+1,j+1}.
— Sinon, ui,j = 1.
5. ´Ecrire un algorithme bas´e sur le principe d´ecrit ci-dessus qui prend en entr´ee le tableauT et retourne le tableauL.
6. Montrer que l’algorithme de calcul du tableauL est correct.
7. Donner la complexit´e de l’algorithme d´ecrit ci-dessus calculant L.
8. ´Ecrire un algorithme qui prend en entr´ee un tableauT et retourne la largeur du plus grand carr´e monochromatique de T.
Exercice 3 Intervalles disjoints dont la somme des longueurs est maximale
On s’int´eresse `a un probl`eme algorithmique prenant en entr´ee une liste d’intervalles I = ([a1, b1],[a2, b2], . . . ,[an, bn])
avec 06ai < bi pour tout i∈ {1, . . . , n}. On suppose de plus queb1 < b2 < . . . < bn. On veut construire L ⊆ {1, . . . , n} v´erifiant
sii, j∈ L eti6=j alors [ai, bi]∩[aj, bj] =∅ et maximisantc(L) =P
i∈L(bi−ai), c’est-`a-dire la somme des longueurs des intervalles dont les indices sont dansL.
Pour i ∈ {1, . . . , n}, on note C[i] la longueur maximale des r´eunions d’intervalles deux `a deux disjoints form´ees exclusivement d’intervalles [aj, bj] qui se terminent au plus tard en bi :
C[i] = maxn
c(L) :L ⊆ {1, . . . , i} et (∀k, `∈ L, k6=`⇒[ak, bk]∩[a`, b`] =∅)o . On a bien sˆurC[0] = 0. En vue de l’´ecriture d’algorithmes, on repr´esentera les listes d’intervalles comme des listes de listes `a 2 ´el´ements.
1. Montrer queC[1] =b1−a1.
2. SoitI= [[1,3],[2,4],[1,5],[4,7],[6,8],[6,9]]. Donner la liste des valeurs deC[0] `aC[6] puis un exemple de sous-ensemble L de{1, . . . ,6} r´ealisant la valeur C[6].
3. La m´ethode na¨ıve pour calculer un sous-ensembleL ⊆ {1, . . . , n}maximisantc(L) consiste
`
a tester tous les sous-ensembles possibles. Quelle serait la complexit´e de cet algorithme ? 4. On d´efinitb0=−∞. Soiti∈ {0, . . . , n−1}. Soitj tel quebj < ai+16bj+1 (un teljexiste
et est unique car ]b0, b1],]b1, b2], . . . ,]bn−1, bn] forment une partition de ]b0, bn]). Montrer que
C[i+ 1] = max (C[i], C[j] +bi+1−ai+1) .
5. En admettant si besoin la propri´et´e pr´ec´edente, ´ecrire un algorithme qui prend en entr´eeI et d´etermine la longueur maximale d’une sous-suiteL d’intervalles deux `a deux disjoints.
6. Quelle est la complexit´e de votre algorithme ?
2