G. Falquet, CUI, Université de Genève 13 de 22
Exemple
s = 15 et v1 = 1, v2 = 2, v3 = 7, v4 = 10
NMP(15)
v1 --> NMP(14)
v1 --> NMP(13) …
v2 --> NMP(12) …
v3 --> NMP(7) …
v4 --> NMP(4) …
v2 --> NMP(13) -- déjà calculé une fois
v1 --> NMP(12) … déjà calculé une fois
v2 --> NMP(11) …
…
v3 --> NMP(8)
v1 --> NMP(7) -- déjà calculé…
v2 --> NMP(6)
Complexité exponentielle (ks/c)
G. Falquet, CUI, Université de Genève 14 de 22
Programmation dynamique
Idée : stocker les résultats partiels déjà obtenus.
Calcul “bottom-up”, on commence par calculer les résultats pour les cas les plus
simples :
NMP(0) = 0 -- cas trivial
NMP(1) = 1 + NMP(0) = 1
NMP(2) = 1 + min{NMP(1), NMP(0)} = 1
NMP(3) = 1 + min{NMP(2), NMP(1)} = 2
NMP(4) = 1 + min{NMP(3), NMP(2)} = 2
NMP(5) = 1 + min{NMP(4), NMP(3)} = 3
NMP(6) = 1 + min{NMP(5), NMP(4)} = 3
NMP(7) = 1 + min{NMP(6), NMP(5), NMP(0)} = 1
NMP(8) = 1 + min{NMP(7), NMP(6), NMP(1)} = 2
NMP(9) = 1 + min{NMP(8), NMP(7), NMP(2)} = 2
Complexité en temps : O(sk)
G. Falquet, CUI, Université de Genève 15 de 22
Retour arrière (backtracking)
Explorer "intelligemment un espace de solutions potentielles".
=> s’arrêter dès qu’il n’y a plus d’espoir
G. Falquet, CUI, Université de Genève 16 de 22
Exemple. Le problème des huit reines
Un échiquier de n × n cases
on veut disposer n reines sans qu’elles se menacent mutuellement.
conditions à satisfaire:
•deux reines ne peuvent se trouver sur la même ligne
•deux reines ne peuvent se trouver sur la même colonne
•deux reines ne peuvent se trouv
er sur la même diagonale
Solutions partielles : 1 reine placée, 2 reines, 3 , …