Universit´e d’Aix-Marseille L2 Informatique et Math´ematiques - 2016/2017
Algorithmique
TD6 : programmation dynamique.
Exercice 1Sous-tableau de somme maximale
On consid`ere un tableau contenant des entiers relatifs dont au moins un est positif. On
recherche le sous-tableau, constitu´e de cases successives, dont la somme des ´el´ements est
maximale.
Par exemple, le tableau
-3 1 -1 4 -1 2 1 -5 4
contient un sous-tableau de somme 6 :
4 -1 2 1
Consid´erons le cas g´en´eral d’un tableau T[1, n] `a n´el´ements.
1. Une premi`ere id´ee consiste `a ´enum´erer tous les sous-tableaux de Tet `a s´electionner
celui dont la somme est maximale. ´
Ecrivez l’algorithme correspondant. On pourra
utiliser
— une variable dvariant entre 1 et n, pour marquer le d´ebut du sous-tableau
courant,
— une variable f, variant entre det n, pour marquer la fin du sous-tableau courant,
— une variable spour calculer la somme des ´el´ements T[d] + . . . +T[f],
— des variables dmax, fmax et smax pour m´emoriser le meilleur sous-tableau explor´e.
2. Quelle est la complexit´e de votre algorithme dans le pire des cas ?
3. Une autre id´ee consiste `a utiliser une technique de programmation dynamique (voir
la figure 1 pour une illustration de cette technique sur le tableau pr´ec´edent). Pour
cela, on consid`ere la classe de probl`emes suivante : pour tout entier m∈[1, n],
rechercher le sous-tableau de T[1, m]se terminant en met de somme maximale.
On notera smax[m] cette somme maximale et dmax [m] l’indice du d´ebut de l’intervalle
correspondant.
(a) Montrez que si l’on sait r´esoudre ce probl`eme pour l’indice m, on peut facilement
trouver une solution pour l’indice m+ 1. Exprimez smax [m+ 1] et dmax[m+ 1]
en fonction de smax[m] et dmax [m] et T[m+ 1].
(b) Montrez que si l’on connaˆıt smax[m] et dmax [m] pour tout m, on peut facilement
en d´eduire dmax, fmax et smax.
(c) ´
Ecrivez l’algorithme correspondant. Quel est sa complexit´e ?
1