Techniques algorithmiques
Algorithmique des graphes
Anthony Labarre
27 avril 2020
Introduction Algorithmes gloutons Diviser pour r´egner
Techniques algorithmiques
I Une grande partie des algorithmes vus dans les chapitres pr´ ec´ edents peuvent ˆ etre class´ es en plusieurs cat´ egories :
1. les algorithmes gloutons (Dijkstra, Prim, Kruskal, . . . ) ; 2. les algorithmes “diviser pour r´ egner” ;
3. les algorithmes de programmation dynamique (Bellman-Ford, Floyd-Warshall, . . . ).
I On va examiner plus en profondeur les principes de ces
algorithmes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Techniques algorithmiques
I Une grande partie des algorithmes vus dans les chapitres pr´ ec´ edents peuvent ˆ etre class´ es en plusieurs cat´ egories :
1. les algorithmes gloutons (Dijkstra, Prim, Kruskal, . . . ) ;
2. les algorithmes “diviser pour r´ egner” ;
3. les algorithmes de programmation dynamique (Bellman-Ford, Floyd-Warshall, . . . ).
I On va examiner plus en profondeur les principes de ces
algorithmes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Techniques algorithmiques
I Une grande partie des algorithmes vus dans les chapitres pr´ ec´ edents peuvent ˆ etre class´ es en plusieurs cat´ egories :
1. les algorithmes gloutons (Dijkstra, Prim, Kruskal, . . . ) ; 2. les algorithmes “diviser pour r´ egner” ;
3. les algorithmes de programmation dynamique (Bellman-Ford, Floyd-Warshall, . . . ).
I On va examiner plus en profondeur les principes de ces
algorithmes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Techniques algorithmiques
I Une grande partie des algorithmes vus dans les chapitres pr´ ec´ edents peuvent ˆ etre class´ es en plusieurs cat´ egories :
1. les algorithmes gloutons (Dijkstra, Prim, Kruskal, . . . ) ; 2. les algorithmes “diviser pour r´ egner” ;
3. les algorithmes de programmation dynamique (Bellman-Ford, Floyd-Warshall, . . . ).
I On va examiner plus en profondeur les principes de ces
algorithmes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Techniques algorithmiques
I Une grande partie des algorithmes vus dans les chapitres pr´ ec´ edents peuvent ˆ etre class´ es en plusieurs cat´ egories :
1. les algorithmes gloutons (Dijkstra, Prim, Kruskal, . . . ) ; 2. les algorithmes “diviser pour r´ egner” ;
3. les algorithmes de programmation dynamique (Bellman-Ford, Floyd-Warshall, . . . ).
I On va examiner plus en profondeur les principes de ces
algorithmes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Points communs
I Les trois techniques que l’on vient de mentionner ont un point commun ;
I Il s’agit de la subdivision du probl` eme d’entr´ ee en sous-probl` emes ;
I Par “sous-probl` eme”, on veut dire que l’on veut r´ esoudre le mˆ eme probl` eme que celui de d´ epart, mais sur une instance plus petite qui est un morceau de celle de d´ epart ;
I Les techniques vont diff´ erer selon la mani` ere dont on r´ esoud
les sous-probl` emes et dont on exploite leurs solutions ;
Introduction Algorithmes gloutons Diviser pour r´egner
Points communs
I Les trois techniques que l’on vient de mentionner ont un point commun ;
I Il s’agit de la subdivision du probl` eme d’entr´ ee en sous-probl` emes ;
I Par “sous-probl` eme”, on veut dire que l’on veut r´ esoudre le mˆ eme probl` eme que celui de d´ epart, mais sur une instance plus petite qui est un morceau de celle de d´ epart ;
I Les techniques vont diff´ erer selon la mani` ere dont on r´ esoud
les sous-probl` emes et dont on exploite leurs solutions ;
Introduction Algorithmes gloutons Diviser pour r´egner
Points communs
I Les trois techniques que l’on vient de mentionner ont un point commun ;
I Il s’agit de la subdivision du probl` eme d’entr´ ee en sous-probl` emes ;
I Par “sous-probl` eme”, on veut dire que l’on veut r´ esoudre le mˆ eme probl` eme que celui de d´ epart, mais sur une instance plus petite qui est un morceau de celle de d´ epart ;
I Les techniques vont diff´ erer selon la mani` ere dont on r´ esoud
les sous-probl` emes et dont on exploite leurs solutions ;
Introduction Algorithmes gloutons Diviser pour r´egner
Points communs
I Les trois techniques que l’on vient de mentionner ont un point commun ;
I Il s’agit de la subdivision du probl` eme d’entr´ ee en sous-probl` emes ;
I Par “sous-probl` eme”, on veut dire que l’on veut r´ esoudre le mˆ eme probl` eme que celui de d´ epart, mais sur une instance plus petite qui est un morceau de celle de d´ epart ;
I Les techniques vont diff´ erer selon la mani` ere dont on r´ esoud
les sous-probl` emes et dont on exploite leurs solutions ;
Introduction Algorithmes gloutons Diviser pour r´egner
Principe
L’approche gloutonne se r´ esume en une seule phrase : ` a chaque
´ etape, on fait le “meilleur” choix (` a d´ efinir bien sˆ ur).
∅
choix ck ...
c2
choixc2
c1
choix c0
k
... choixc02
c1∪c01 · · ·
choix c01
choix c1
Introduction Algorithmes gloutons Diviser pour r´egner
Principe
L’approche gloutonne se r´ esume en une seule phrase : ` a chaque
´ etape, on fait le “meilleur” choix (` a d´ efinir bien sˆ ur).
∅
ck
choix ck ...
c2
choixc2
c1
choix c0
k
... choixc02
c1∪c01 · · ·
choix c01
choix c1
Introduction Algorithmes gloutons Diviser pour r´egner
Principe
L’approche gloutonne se r´ esume en une seule phrase : ` a chaque
´ etape, on fait le “meilleur” choix (` a d´ efinir bien sˆ ur).
∅
choix ck ...
c2
choixc2
c1
choix c0
k
... choixc02
c1∪c01 · · ·
choix c01
choix c1
Introduction Algorithmes gloutons Diviser pour r´egner
Exemple : forˆ et couvrante de poids minimum (Kruskal)
I Le poids de la forˆ et est la somme des poids de ses arˆ etes ; I Strat´ egie gloutonne : privil´ egier les arˆ etes de poids minimum ; I Bien entendu, on n’accepte que les arˆ etes valides ;
1
0 3
2 5
4 6
4 4
9 7 7 12
7 2 2
5
5 3
1
0 3
2 5
4 6
4 4
9 7 7 12
7 2 2
5
5 3
1
0 3
2 5
4 6
4 4
9 7 7 12
7 2 2
5
5 3
1
0 3
2 5
4 6
4 4
9 7 7 12
7 2 2
5
5 3
1
0 3
2 5
4 6
4 4
9 7 7 12
7 2 2
5
5 3
.. .
4 6
4 7
12 3
Introduction Algorithmes gloutons Diviser pour r´egner
Exemple : plus courts chemins (Dijkstra)
I Le sch´ ema glouton est moins ´ evident pour l’algorithme de Dijkstra, mais la philosophie est la mˆ eme ;
I Le but est de d´ ecouvrir les plus courts chemins d’un sommet s
`
a tous les autres ;
I on parcourt les sommets par proximit´ e (distance estim´ ee minimale ` a s) ;
I ` a chaque nouveau sommet d´ ecouvert, on profite des raccourcis
passant par ce sommet pour am´ eliorer nos estimations ;
Introduction Algorithmes gloutons Diviser pour r´egner
Caract´ eristiques des algorithmes gloutons
I Les algorithmes gloutons effectuent des choix localement optimaux dans l’espoir d’obtenir une solution globalement optimale ;
I Ils ne remettent pas en question les choix effectu´ es aux ´ etapes ant´ erieures ;
I Pour qu’ils fonctionnent, il faut donc que le probl` eme poss` ede une structure particuli` ere ;
I Pour en savoir plus : voir [1], chapitre sur les matro¨ıdes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Caract´ eristiques des algorithmes gloutons
I Les algorithmes gloutons effectuent des choix localement optimaux dans l’espoir d’obtenir une solution globalement optimale ;
I Ils ne remettent pas en question les choix effectu´ es aux ´ etapes ant´ erieures ;
I Pour qu’ils fonctionnent, il faut donc que le probl` eme poss` ede une structure particuli` ere ;
I Pour en savoir plus : voir [1], chapitre sur les matro¨ıdes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Caract´ eristiques des algorithmes gloutons
I Les algorithmes gloutons effectuent des choix localement optimaux dans l’espoir d’obtenir une solution globalement optimale ;
I Ils ne remettent pas en question les choix effectu´ es aux ´ etapes ant´ erieures ;
I Pour qu’ils fonctionnent, il faut donc que le probl` eme poss` ede une structure particuli` ere ;
I Pour en savoir plus : voir [1], chapitre sur les matro¨ıdes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Caract´ eristiques des algorithmes gloutons
I Les algorithmes gloutons effectuent des choix localement optimaux dans l’espoir d’obtenir une solution globalement optimale ;
I Ils ne remettent pas en question les choix effectu´ es aux ´ etapes ant´ erieures ;
I Pour qu’ils fonctionnent, il faut donc que le probl` eme poss` ede une structure particuli` ere ;
I Pour en savoir plus : voir [1], chapitre sur les matro¨ıdes ;
Introduction Algorithmes gloutons Diviser pour r´egner
Preuve d’optimalit´ e
I Pour prouver l’optimalit´ e d’un algorithme glouton (quand c’est bien le cas), on peut proc´ eder comme suit :
1. soit T une solution optimale diff´ erente de la solution gloutonne S ;
2. on cherche la “premi` ere” diff´ erence entre S et T (par exemple en position i) ;
3. on montre que l’on peut remplacer la d´ ecision prise ` a l’´ etape i dans T par une d´ ecision gloutonne sans d´ egrader la qualit´ e de T ;
I Si l’on y parvient, la strat´ egie gloutonne est correcte,
puisqu’on peut transformer toute solution optimale en une
solution gloutonne sans la d´ egrader ;
Introduction Algorithmes gloutons Diviser pour r´egner
Preuve d’optimalit´ e
I Pour prouver l’optimalit´ e d’un algorithme glouton (quand c’est bien le cas), on peut proc´ eder comme suit :
1. soit T une solution optimale diff´ erente de la solution gloutonne S ;
2. on cherche la “premi` ere” diff´ erence entre S et T (par exemple en position i) ;
3. on montre que l’on peut remplacer la d´ ecision prise ` a l’´ etape i dans T par une d´ ecision gloutonne sans d´ egrader la qualit´ e de T ;
I Si l’on y parvient, la strat´ egie gloutonne est correcte,
puisqu’on peut transformer toute solution optimale en une
solution gloutonne sans la d´ egrader ;
Introduction Algorithmes gloutons Diviser pour r´egner
Preuve d’optimalit´ e
I Pour prouver l’optimalit´ e d’un algorithme glouton (quand c’est bien le cas), on peut proc´ eder comme suit :
1. soit T une solution optimale diff´ erente de la solution gloutonne S ;
2. on cherche la “premi` ere” diff´ erence entre S et T (par exemple en position i) ;
3. on montre que l’on peut remplacer la d´ ecision prise ` a l’´ etape i dans T par une d´ ecision gloutonne sans d´ egrader la qualit´ e de T ;
I Si l’on y parvient, la strat´ egie gloutonne est correcte,
puisqu’on peut transformer toute solution optimale en une
solution gloutonne sans la d´ egrader ;
Introduction Algorithmes gloutons Diviser pour r´egner
Preuve d’optimalit´ e
I Pour prouver l’optimalit´ e d’un algorithme glouton (quand c’est bien le cas), on peut proc´ eder comme suit :
1. soit T une solution optimale diff´ erente de la solution gloutonne S ;
2. on cherche la “premi` ere” diff´ erence entre S et T (par exemple en position i) ;
3. on montre que l’on peut remplacer la d´ ecision prise ` a l’´ etape i dans T par une d´ ecision gloutonne sans d´ egrader la qualit´ e de T ;
I Si l’on y parvient, la strat´ egie gloutonne est correcte,
puisqu’on peut transformer toute solution optimale en une
solution gloutonne sans la d´ egrader ;
Introduction Algorithmes gloutons Diviser pour r´egner
Preuve d’optimalit´ e
I Pour prouver l’optimalit´ e d’un algorithme glouton (quand c’est bien le cas), on peut proc´ eder comme suit :
1. soit T une solution optimale diff´ erente de la solution gloutonne S ;
2. on cherche la “premi` ere” diff´ erence entre S et T (par exemple en position i) ;
3. on montre que l’on peut remplacer la d´ ecision prise ` a l’´ etape i dans T par une d´ ecision gloutonne sans d´ egrader la qualit´ e de T ;
I Si l’on y parvient, la strat´ egie gloutonne est correcte,
puisqu’on peut transformer toute solution optimale en une
solution gloutonne sans la d´ egrader ;
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤w (T ) puisque e
iest de
poids minimum parmi les arˆ etes valides. Il nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal),
T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤w (T ) puisque e
iest de
poids minimum parmi les arˆ etes valides. Il nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur,
et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤w (T ) puisque e
iest de
poids minimum parmi les arˆ etes valides. Il nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤w (T ) puisque e
iest de
poids minimum parmi les arˆ etes valides. Il nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤w (T ) puisque e
iest de
poids minimum parmi les arˆ etes valides. Il nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤
w (T ) puisque e
iest de
poids minimum parmi les arˆ etes valides. Il nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nIl nous suffit donc de recommencer
jusqu’` a ce que T devienne S ; aucune transformation n’augmente le coˆ ut de T ,
donc S est optimale puisque w (S)
≤w (T ).
Introduction Algorithmes gloutons Diviser pour r´egner
Correction de Prim / Kruskal
Proposition 1
Les algorithmes de Prim et de Kruskal fournissent bien des forˆ ets couvrantes de poids minimum.
D´ emonstration.
Soit S une solution gloutonne (Prim ou Kruskal), T une solution optimale de mˆ eme longueur, et i la position de la premi` ere diff´ erence entre S et T :
S = e
1e
2 · · ·e
i−1e
ie
i+1 · · ·e
nT = f
1f
2 · · ·f
i−1f
if
i+1 · · ·f
n= e
1e
2 · · ·e
i−1f
if
i+1 · · ·f
nRempla¸ cons f
ipar e
idans T ; on obtient
T
0= e
1e
2 · · ·e
i−1e
if
i+1 · · ·f
nLe coˆ ut de T
0est w (T
0) = w (T )
−w(f
i) + w (e
i)
≤w (T ) puisque e
iest de
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Pour ´ eviter de croire que la strat´ egie gloutonne marche toujours, examinons un probl` eme o` u elle semble naturelle mais
´ echoue ;
I Soit S = (s
1, s
2, . . . , s
p) et T = (t
1, t
2, . . . , t
q) avec q ≥ p ; s’il existe une bijection entre S et une sous-s´ equence de T pr´ eservant l’ordre des ´ el´ ements de S, alors S est une sous-s´ equence de T , et T est une super-s´ equence de S .
Exemple 1
BONJOUR est une sous-s´ equence de BONNE JOURN´ EE
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Pour ´ eviter de croire que la strat´ egie gloutonne marche toujours, examinons un probl` eme o` u elle semble naturelle mais
´ echoue ;
I Soit S = (s
1, s
2, . . . , s
p) et T = (t
1, t
2, . . . , t
q) avec q ≥ p ; s’il existe une bijection entre S et une sous-s´ equence de T pr´ eservant l’ordre des ´ el´ ements de S , alors S est une sous-s´ equence de T , et T est une super-s´ equence de S .
Exemple 1
BONJOUR est une sous-s´ equence de BONNE JOURN´ EE
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Pour ´ eviter de croire que la strat´ egie gloutonne marche toujours, examinons un probl` eme o` u elle semble naturelle mais
´ echoue ;
I Soit S = (s
1, s
2, . . . , s
p) et T = (t
1, t
2, . . . , t
q) avec q ≥ p ; s’il existe une bijection entre S et une sous-s´ equence de T pr´ eservant l’ordre des ´ el´ ements de S , alors S est une sous-s´ equence de T , et T est une super-s´ equence de S . Exemple 1
BONJOUR est une sous-s´ equence de BONNE JOURN´ EE
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Le probl` eme de la plus courte super-s´ equence commune demande de trouver une super-s´ equence commune ` a un ensemble de chaˆınes donn´ ees qui soit la plus courte possible.
I Une approche gloutonne possible : tant qu’on a plus de deux chaˆınes, fusionner les deux chaˆınes dont la supers´ equence commune optimale est la plus “compacte” possible ; I Comment mesurer cette compacit´ e ? On peut choisir de
prendre le nombre de caract` eres suppl´ ementaires n´ ecessaires.
Exemple 2
GRAPHES (7 lettres) et ALGORITHMES (11 lettres) se
fusionnent de mani` ere optimale en ALGORIAPTHMES (13
lettres), au prix de 13 − 11 = 2 lettres suppl´ ementaires.
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Le probl` eme de la plus courte super-s´ equence commune demande de trouver une super-s´ equence commune ` a un ensemble de chaˆınes donn´ ees qui soit la plus courte possible.
I Une approche gloutonne possible : tant qu’on a plus de deux chaˆınes, fusionner les deux chaˆınes dont la supers´ equence commune optimale est la plus “compacte” possible ;
I Comment mesurer cette compacit´ e ? On peut choisir de prendre le nombre de caract` eres suppl´ ementaires n´ ecessaires.
Exemple 2
GRAPHES (7 lettres) et ALGORITHMES (11 lettres) se
fusionnent de mani` ere optimale en ALGORIAPTHMES (13
lettres), au prix de 13 − 11 = 2 lettres suppl´ ementaires.
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Le probl` eme de la plus courte super-s´ equence commune demande de trouver une super-s´ equence commune ` a un ensemble de chaˆınes donn´ ees qui soit la plus courte possible.
I Une approche gloutonne possible : tant qu’on a plus de deux chaˆınes, fusionner les deux chaˆınes dont la supers´ equence commune optimale est la plus “compacte” possible ; I Comment mesurer cette compacit´ e ? On peut choisir de
prendre le nombre de caract` eres suppl´ ementaires n´ ecessaires.
Exemple 2
GRAPHES (7 lettres) et ALGORITHMES (11 lettres) se
fusionnent de mani` ere optimale en ALGORIAPTHMES (13
lettres), au prix de 13 − 11 = 2 lettres suppl´ ementaires.
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
I Le probl` eme de la plus courte super-s´ equence commune demande de trouver une super-s´ equence commune ` a un ensemble de chaˆınes donn´ ees qui soit la plus courte possible.
I Une approche gloutonne possible : tant qu’on a plus de deux chaˆınes, fusionner les deux chaˆınes dont la supers´ equence commune optimale est la plus “compacte” possible ; I Comment mesurer cette compacit´ e ? On peut choisir de
prendre le nombre de caract` eres suppl´ ementaires n´ ecessaires.
Exemple 2
GRAPHES (7 lettres) et ALGORITHMES (11 lettres) se
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
Exemple 3 (approche gloutonne)
LES
ALGOS
GLOUTONS
SONT
NULS
NULES
SGLOUTONST ASLGLOUTONST
ASLGLOUTONULEST
La solution gloutonne est de longueur 15, mais il existe une solution de taille 14 :
A S L E G L O N U T L O N S
L E S
A L G O S
G L O U T O N S
S O N T
N U L S
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
Exemple 3 (approche gloutonne)
LES
ALGOS
GLOUTONS
SONT
NULS
NULES
SGLOUTONST ASLGLOUTONST
ASLGLOUTONULEST
La solution gloutonne est de longueur 15, mais il existe une solution de taille 14 :
A S L E G L O N U T L O N S
L E S
A L G O S
G L O U T O N S
S O N T
N U L S
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
Exemple 3 (approche gloutonne)
LES
ALGOS
GLOUTONS
SONT
NULS
NULES
SGLOUTONST
ASLGLOUTONST
ASLGLOUTONULEST
La solution gloutonne est de longueur 15, mais il existe une solution de taille 14 :
A S L E G L O N U T L O N S
L E S
A L G O S
G L O U T O N S
S O N T
N U L S
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
Exemple 3 (approche gloutonne)
LES
ALGOS
GLOUTONS
SONT
NULS
NULES
SGLOUTONST ASLGLOUTONST
ASLGLOUTONULEST
La solution gloutonne est de longueur 15, mais il existe une solution de taille 14 :
A S L E G L O N U T L O N S
L E S
A L G O S
G L O U T O N S
S O N T
N U L S
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
Exemple 3 (approche gloutonne)
LES
ALGOS
GLOUTONS
SONT
NULS
NULES
SGLOUTONST ASLGLOUTONST
ASLGLOUTONULEST
La solution gloutonne est de longueur 15, mais il existe une solution de taille 14 :
A S L E G L O N U T L O N S
L E S
A L G O S
G L O U T O N S
S O N T
N U L S
Introduction Algorithmes gloutons Diviser pour r´egner
Plus courte super-s´ equence commune
Exemple 3 (approche gloutonne)
LES
ALGOS
GLOUTONS
SONT
NULS
NULES
SGLOUTONST ASLGLOUTONST
ASLGLOUTONULEST
La solution gloutonne est de longueur 15, mais il existe une solution de taille 14 :
A S L E G L O N U T L O N S
L E S
A L G O S
Introduction Algorithmes gloutons Diviser pour r´egner
Bilan des algorithmes gloutons
I L’approche gloutonne donne rarement des solutions optimales ;
I Il s’agit n´ eanmoins d’une approche utile car :
I elle est intuitive ;
I elle est simple ` a impl´ ementer ;
I elle peut donner de bons r´ esultats approximatifs ;
I Le dernier point est important quand on a affaire ` a des
probl` emes difficiles (NP-complets) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Bilan des algorithmes gloutons
I L’approche gloutonne donne rarement des solutions optimales ; I Il s’agit n´ eanmoins d’une approche utile car :
I elle est intuitive ;
I elle est simple ` a impl´ ementer ;
I elle peut donner de bons r´ esultats approximatifs ; I Le dernier point est important quand on a affaire ` a des
probl` emes difficiles (NP-complets) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Bilan des algorithmes gloutons
I L’approche gloutonne donne rarement des solutions optimales ; I Il s’agit n´ eanmoins d’une approche utile car :
I elle est intuitive ;
I elle est simple ` a impl´ ementer ;
I elle peut donner de bons r´ esultats approximatifs ; I Le dernier point est important quand on a affaire ` a des
probl` emes difficiles (NP-complets) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Bilan des algorithmes gloutons
I L’approche gloutonne donne rarement des solutions optimales ; I Il s’agit n´ eanmoins d’une approche utile car :
I elle est intuitive ;
I elle est simple ` a impl´ ementer ;
I elle peut donner de bons r´ esultats approximatifs ; I Le dernier point est important quand on a affaire ` a des
probl` emes difficiles (NP-complets) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Bilan des algorithmes gloutons
I L’approche gloutonne donne rarement des solutions optimales ; I Il s’agit n´ eanmoins d’une approche utile car :
I elle est intuitive ;
I elle est simple ` a impl´ ementer ;
I elle peut donner de bons r´ esultats approximatifs ;
I Le dernier point est important quand on a affaire ` a des
probl` emes difficiles (NP-complets) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Bilan des algorithmes gloutons
I L’approche gloutonne donne rarement des solutions optimales ; I Il s’agit n´ eanmoins d’une approche utile car :
I elle est intuitive ;
I elle est simple ` a impl´ ementer ;
I elle peut donner de bons r´ esultats approximatifs ; I Le dernier point est important quand on a affaire ` a des
probl` emes difficiles (NP-complets) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ;
I les probl` emes NP-complets et NP-durs : on conjecture qu’ils ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ;
I Si un probl` eme d’optimisation est “difficile”, on doit g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
2. trouver une solution optimale (mais lentement) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Introduction rapide et approximative aux classes de complexit´ e
I On a :
I P : la classe des probl` emes solubles en temps polynomial (en la taille de l’entr´ ee) ;
I NP : la classe des probl` emes v´ erifiables en temps polynomial ; I les probl` emes NP-complets et NP-durs : on conjecture qu’ils
ne sont pas dans P ;
I La tˆ ete du probl` eme P = NP est mise `
?a prix ` a $ 1,000,000 ; I Si un probl` eme d’optimisation est “difficile”, on doit
g´ en´ eralement choisir entre :
1. trouver une solution rapidement (mais sous-optimale) ;
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients :
1. diviser : d´ ecouper le probl` eme en sous-probl` emes ; 2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou
directement s’ils sont de taille suffisamment petite) ; 3. combiner : combiner les solutions des sous-probl` emes pour
obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients : 1. diviser : d´ ecouper le probl` eme en sous-probl` emes ;
2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou directement s’ils sont de taille suffisamment petite) ; 3. combiner : combiner les solutions des sous-probl` emes pour
obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients : 1. diviser : d´ ecouper le probl` eme en sous-probl` emes ;
2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou directement s’ils sont de taille suffisamment petite) ;
3. combiner : combiner les solutions des sous-probl` emes pour obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients : 1. diviser : d´ ecouper le probl` eme en sous-probl` emes ;
2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou directement s’ils sont de taille suffisamment petite) ; 3. combiner : combiner les solutions des sous-probl` emes pour
obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients : 1. diviser : d´ ecouper le probl` eme en sous-probl` emes ;
2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou directement s’ils sont de taille suffisamment petite) ; 3. combiner : combiner les solutions des sous-probl` emes pour
obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients : 1. diviser : d´ ecouper le probl` eme en sous-probl` emes ;
2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou directement s’ils sont de taille suffisamment petite) ; 3. combiner : combiner les solutions des sous-probl` emes pour
obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Diviser pour r´ egner
I L’approche “diviser pour r´ egner” comporte trois ingr´ edients : 1. diviser : d´ ecouper le probl` eme en sous-probl` emes ;
2. r´ egner : r´ esoudre les sous-probl` emes r´ ecursivement (ou directement s’ils sont de taille suffisamment petite) ; 3. combiner : combiner les solutions des sous-probl` emes pour
obtenir la solution au probl` eme de d´ epart.
I L’efficacit´ e de cette approche d´ epend fortement des complexit´ es de ces trois phases ; il faut que :
1. le d´ ecoupage soit bien choisi ;
2. combiner deux sous-solutions prenne moins de temps que de
calculer la solution sans proc´ eder ` a la division.
Introduction Algorithmes gloutons Diviser pour r´egner
Recherche d’un ´ el´ ement dans une s´ equence tri´ ee
I
Approche triviale : O(n) ;
I
Approche diviser pour r´ egner : O(log n) (dichotomie)
1. diviser
: diviser l’intervalle de recherche en deux parties (presque) ´ egales ;
2. r´egner
: renvoyer la position du milieu ou relancer la recherche r´ ecursivement dans la “bonne” partie ;
3. combiner
: renvoyer le premier r´ esultat fructueux (ou
nil).
G
1|m
1 |D
1G
2|m
2|D
2G
3|m
3|D
3O(log n) d´ ecoupes, toutes les autres op´ erations sont en O(1)
⇒O(log n) au
total.
Introduction Algorithmes gloutons Diviser pour r´egner
Recherche d’un ´ el´ ement dans une s´ equence tri´ ee
I
Approche triviale : O(n) ;
I
Approche diviser pour r´ egner : O(log n) (dichotomie)
1. diviser
: diviser l’intervalle de recherche en deux parties (presque) ´ egales ;
2. r´egner
: renvoyer la position du milieu ou relancer la recherche r´ ecursivement dans la “bonne” partie ;
3. combiner
: renvoyer le premier r´ esultat fructueux (ou
nil).
G
1|m
1|D
1G
2|m
2|D
2G
3|m
3|D
3O(log n) d´ ecoupes, toutes les autres op´ erations sont en O(1)
⇒O(log n) au
total.
Introduction Algorithmes gloutons Diviser pour r´egner
Recherche d’un ´ el´ ement dans une s´ equence tri´ ee
I
Approche triviale : O(n) ;
I
Approche diviser pour r´ egner : O(log n) (dichotomie)
1. diviser
: diviser l’intervalle de recherche en deux parties (presque) ´ egales ;
2. r´egner
: renvoyer la position du milieu ou relancer la recherche r´ ecursivement dans la “bonne” partie ;
3. combiner
: renvoyer le premier r´ esultat fructueux (ou
nil).
G
1|m
1|D
1G
2|m
2|D
2G
3|m
3|D
3O(log n) d´ ecoupes, toutes les autres op´ erations sont en O(1)
⇒O(log n) au
total.
Introduction Algorithmes gloutons Diviser pour r´egner
Recherche d’un ´ el´ ement dans une s´ equence tri´ ee
I
Approche triviale : O(n) ;
I
Approche diviser pour r´ egner : O(log n) (dichotomie)
1. diviser
: diviser l’intervalle de recherche en deux parties (presque) ´ egales ;
2. r´egner
: renvoyer la position du milieu ou relancer la recherche r´ ecursivement dans la “bonne”
partie ;
3. combiner
: renvoyer le premier r´ esultat fructueux (ou
nil).
G
1|m
1|D
1G
2|m
2|D
2G
3|m
3|D
3O(log n) d´ ecoupes, toutes les autres op´ erations sont en O(1)
⇒O(log n) au
total.
Introduction Algorithmes gloutons Diviser pour r´egner
Recherche d’un ´ el´ ement dans une s´ equence tri´ ee
I
Approche triviale : O(n) ;
I
Approche diviser pour r´ egner : O(log n) (dichotomie)
1. diviser
: diviser l’intervalle de recherche en deux parties (presque) ´ egales ;
2. r´egner
: renvoyer la position du milieu ou relancer la recherche r´ ecursivement dans la “bonne”
partie ;
3. combiner
: renvoyer le premier r´ esultat fructueux (ou
nil).
G
1|m
1|D
1G
2|m
2|D
2G
3|m
3|D
3O(log n) d´ ecoupes, toutes les autres op´ erations sont en O(1)
⇒O(log n) au
total.
Introduction Algorithmes gloutons Diviser pour r´egner
Recherche d’un ´ el´ ement dans une s´ equence tri´ ee
I
Approche triviale : O(n) ;
I
Approche diviser pour r´ egner : O(log n) (dichotomie)
1. diviser
: diviser l’intervalle de recherche en deux parties (presque) ´ egales ;
2. r´egner
: renvoyer la position du milieu ou relancer la recherche r´ ecursivement dans la “bonne”
partie ;
3. combiner
: renvoyer le premier r´ esultat fructueux (ou
nil).
G
1|m
1|D
1G
2|m
2|D
2G
3|m
3|D
3O(log n) d´ ecoupes, toutes les autres op´ erations sont en O(1)
⇒O(log n) au
Introduction Algorithmes gloutons Diviser pour r´egner
Tri d’une s´ equence
I Algorithmes basiques : O (n
2)
I Approche diviser pour r´ egner : O(n log n) (tri fusion)
1. diviser : diviser la s´ equence en deux parties (presque)
´ egales ;
2. r´ egner : ne rien faire (longueur ≤ 1) ou trier r´ ecursivement les deux sous-s´ equences ;
3. combiner : fusionner les deux sous-parties tri´ ees en une s´ equence tri´ ee.
TRIFUSION TRIFU TRI TR T R
I FU
F U
SION SI
S I
ON
O N
FIINORSTU FIRTU IRT RT I
FU
F U
INOS IS
S I
NO
O N
Hauteur de l’arbre : O(log n), fusions en O (n) ⇒ O (n log n) au
total.
Introduction Algorithmes gloutons Diviser pour r´egner
Tri d’une s´ equence
I Algorithmes basiques : O (n
2)
I Approche diviser pour r´ egner : O(n log n) (tri fusion)
1. diviser : diviser la s´ equence en deux parties (presque)
´ egales ;
2. r´ egner : ne rien faire (longueur ≤ 1) ou trier r´ ecursivement les deux sous-s´ equences ;
3. combiner : fusionner les deux sous-parties tri´ ees en une s´ equence tri´ ee.
TRIFUSION TRIFU TRI TR T R
I FU
F U
SION SI
S I
ON
O N
FIINORSTU FIRTU IRT RT I
FU
F U
INOS IS
S I
NO
O N