Académique Documents
Professionnel Documents
Culture Documents
DPV6.1, 6.2, 6.7, 6.17, 6.21, 6.19
DPV6.1, 6.2, 6.7, 6.17, 6.21, 6.19
S[0] = 0
pour j = 1 à n :
S[j] = max(0,aj + S[j - 1])
return maxjS [j]
0≤i<j
pour j = 1 à n :
T(j)=(200-aj
)2
pour i = 1 à j - 1 :
T(j)=min{T(j),T(i)+(200-(aj-ai))2}
retour T(n)
(1 si i = j
T(i,j) = 2 + T(i + 1,j - 1) si i < j et x[i] = x[j]
[ max{T (i + 1,j),T (i,j - 1)} sinon
1
pour i = 2 à n + 1 :
T[i, i - 1] = 0 pour i = 1 à n :
T[i,i]=1
pour d = 1 à n - 1 : (longueur de l'intervalle)
pour i = 1 à n - d :
j=i+d
si x[i] = x[j] :
T[i,j]=2+T[i+1,j-1]
d'autre part :
T[i,j] =max{T[i+1,j],T[i,j-1]} return T[1, n]
Temps d'exécution : Il y a O( ) sous-problèmes et chacun prend O(1) temps à calculer, de sorte que le temps d'exécution
n2
total est O( ).
n2
T [0] = vrai
pour u = 1 à v :
T [u] = faux
pour i = 1 à n :
si u ≥ et T [u - ] : T [u] = vrai
xi xi
Temps d'exécution : La table a une taille v et chaque entrée prend O(n) de temps pour être remplie ; le temps total
d'exécution est donc O(nv).
2
Formulation récursive : Pour déterminer T (u), la question la plus immédiate est de savoir si u se trouve dans la couverture
des sommets. Si ce n'est pas le cas, ses enfants doivent se trouver dans la couverture des sommets. Soit C(u) l'ensemble
des enfants de u, et G(u) ses petits-enfants. Dans ce cas
T(u) = min
।)
T(u)=min
|C(u)|+Pz∈G(u)T(z)
où |C (u)| est le nombre d'enfants du nœud u. Le premier cas inclut u dans la couverture des sommets, le second non.
Algorithme :
T[u] = min{S1,S2}
retour T [r]
Temps de fonctionnement : Le travail effectué à chaque nœud est proportionnel à son nombre de petits-enfants, |G(u)|.
Depuis |G(u)| ≤ |V | (chaque nœud a au plus un grand-parent), le travail global effectué est linéaire.
u
T(u, j) est vrai si et seulement si (soit u = 0, soit (T(u - xi,j - 1) est vrai pour un certain i)).
Pour des raisons de cohérence, la valeur de T (0, j) est vraie pour tout j et celle de T (u, 0) est fausse pour u > 0.
Algorithme :
pour j = 0 à k :
T [0, j] = vrai
pour u = 1 à v :
T [u, 0] = faux
pour j = 1 à k :
pour u = 1 à v :
T [u, j] = faux
pour i = 1 à n :
si u ≥ xiet T [u - xi, j - 1] : T [u, j] = vrai
return T [v, k]
Temps d'exécution : Le tableau a une taille de k × v et chaque entrée prend O(n) de temps pour être remplie ; le temps
d'exécution total est donc O (nkv).