Chapitre II
Les graphes
Introduction
Ungrapheest unestructure combinatoirepermettant derepr´esenterune structure d’un ensemble complexe en exprimant lesrelationsentres ses ´el´ements.
En particulier, il permet derepr´esenterde nombreuses situations rencontr´ees dans desapplicationsfaisant intervenir desmath´ematiques discr`eteset n´ecessitant unesolution informatique:
Circuits ´electriques,
r´eseaux de transport (ferr´es, routiers, a´eriens), r´eseaux d’ordinateurs, ordonnancement d’un ensemble de tˆaches,...
La th´eorie des graphesest une m´ethode de pens´ee, un moyen de mod´elisation,
permet l’´etude d’une grande vari´et´e de probl`emes : desprobl`emes ayant un aspect algorithmique, desprobl`emes d’optimisation combinatoireetc.
Le motgraphea (au moins) deuxsignifications:
1 Dans lath´eorie des ensembles,grapherepr´esente legraphe d’une fonction.
Exemple : Le graphe de la fonctionf(x) =x2
2 Dans lath´eorie des graphes, ungrapheG= (V,E)est le couple constitu´e : par unensemble finidesommetsV ={v1,v2, ...,vn}, et
par unensembleE⊂V ×V.
SiG est un graphenon-orient´e, les ´el´ements deE sont appel´esarˆetes, sinonGestorient´eet les ´el´ements deEsont appel´esarcs.
Lenombre de sommetsdu grapheG est appel´eordredeG, on le note soit ordre(G)ou soit|V|.
D´ efinitions g´ en´ erales
Graphiquement, dans le cas d’ungraphe orient´e, larelation entre deux sommets est repr´esent´ee `a l’aide d’unefl`eche(arc) entre ceux-ci.
Dans le cas d’ungraphe non orient´e, deux sommets qui forment unearˆetesont reli´es par untrait.
v1 v2
v3 v4
v5
(a) 1
v2 v3 v4
v5
v (b)
Figure:
(a): graphe orient´e; (b): le mˆeme graphe non orient´e.NotonsGa= (Va,Ea)etGb= (Vb,Eb)respectivement les graphes de laFigure (a)et laFigure (b).
Va=Vb={v1,v2,v3,v4,v5},|Va|=|Vb|= 5
Ea={(v1,v2),(v1,v5),(v2,v2),(v2,v3),(v3,v1),(v3,v4),(v3,v5),(v4,v4),(v5,v2),(v5,v3), (v5,v4)}
E ={(v,v),(v,v),(v,v),(v,v),(v,v),(v,v),(v,v),(v,v),(v,v),(v,v),
Le grapheG= (V,E)est ditorient´e sym´etriquesi lapr´esence de tout arc impliquelapr´esence de l’arc oppos´e.
Pour un arc(vi,vj)deE, le sommetvi est sonextr´emit´e initiale, et le sommet vjsonextr´emit´e finale.
Une arˆete (ou un arc)(vi,vj)estmultiple, si elle correspond `aplusieurs arˆetes (ou arcs)ayantvi comme extr´emit´e initiale etvjcomme extr´emit´e finale, dans ce cas l`a, on parle d’unmultigraphe.
Le grapheG= (V,E)est dit sansbouclesiEne contient pas d’arˆetes (ou arcs) de la forme(v,v), c-`a-d joignant un sommet `a lui mˆeme.
On dit qu’un grapheG= (V,E)estpond´er´esi chaque arc deGest menu d’un nombre, appel´epoids de cet arc. En g´en´eral, le poids d’un arc repr´esente un coˆutdonn´e.
On dit qu’un sommetvjestvoisinau sommetvi si(vi,vj)∈E. L’ensemble des voisins devi se noteNG(vi).
Deux sommetsvi etvjsontadjacentsl’un `a l’autre si l’un est voisin `a l’autre.
Dans ce cas, on dit que l’arˆete(vi,vj)estincidente`avi et `avj.
On appelledegr´ed’un sommetvi et on notedG(vi), que l’on simplifie end(vi) le nombre d’arˆetes incidentes `avi qui est aussi le nombre de voisins devi, c’est-`a-dired(vi) =|NG(vi)|.
Le maximum (resp. minimum) des degr´es des sommets est appel´edegr´e maximum(resp. minimum) d’un graphe, not´e∆(resp. δ). Si∆ =δ, le graphe est dit∆-r´egulier.
Chemins et chaˆınes
D´efinition
Dans un graphe orient´e, uncheminallant d’un sommetxvers un sommety, que l’on note souvent parPn= (x,y), est une suite finie densommets (v1,v2, ...,vn)tels quex=v1,y=vnet pour toutidans{1,2, ...,n−1},vi et vi+1sontadjacents.
Lalongueurdu cheminPn, not´ee`(Pn), est lenombre d’arcsde la suite (v1,v2, ...,vn), c-`a-d`(Pn) =n−1.
Un chemin quine rencontre pas deux fois le mˆeme sommetest dit´el´ementaire.
Un chemin est ditsimplesi un arcaest pr´esentau plus une fois.
Lepoids d’un cheminest lasomme des poidsdes arcs qui le composent.
Dans le cas d’ungraphe non orient´e, on parle d’unechaˆıne.
Remarque
On parlera le plus souvent d’unchemin, sans sp´ecifier qu’il est unechaˆıne,simpleou´el´ementaire, ladistinction d´ependant de lanaturedu graphe consid´er´e.
D´efinition
Ladistanceentre deux sommetsuetvd’un grapheGorient´e (resp. non orient´e), not´eedG(u,v)ou simplementd(u,v)est lalongueurdu plus court chemin (resp. chaˆıne) entreuetv.
On appellediam`etred’un grapheG= (V,E)(orient´e ou non), not´eD(G), le maximum des distances entre toutes les paires de sommets deG:
D(G) = max
u,v∈Vd(u,v)
Exemple
graphe 1
2
4 3 5
distances
d(1,2) = 1 d(1,3) = 2 d(1,4) = 1 d(1,5) =∞ d(2,1) =∞ d(2,3) =∞ d(2,4) =∞ d(2,5) =∞ d(3,1) = 1 d(3,2) = 1 d(3,4) = 2 d(3,5) =∞ d(4,1) = 2 d(4,2) = 1 d(4,3) = 1 d(4,5) =∞ d(5,1) = 1 d(5,2) = 2 d(5,3) = 1 d(5,4) = 1
Repr´ esentation des graphes
Motivation
Les graphes sont une
structure de donn´eesimportante en
informatique.Il est donc
fondamentalde s’int´ eresser ` a la mani` ere de
repr´esenterdes graphes en vue de leurs
manipulations algorithmiques.Plusieurs
modes de
repr´esentationpeuvent ˆ etre envisag´ es selon la
nature des traitementsque l’on souhaite appliquer au graphe consid´ er´ e.
1
Repr´ esentation par matrice d’adjacence.
2
Repr´ esentation par matrice d’incidence.
3
Repr´ esentation par tableau de listes d’adjacences.
9/37
Repr´ esentation des graphes
Matrice d’adjacence
La matrice d’adjacenced’un graphe simpleG= (V,E)d’ordrenest lamatrice bool´eenneM= (mij)1≤i,j≤nde dimensionn×ntelle que
mij=
n
1, si (i,j)∈E(c-`a-d (i,j) est un arc);0, sinon.
Si le graphe n’est pas pond´er´e ou
mij=
n
pij, si (i,j)∈Eetpijest le poids de (i,j);0, sinon.
Si le graphe est pond´er´e.Exemple :
(1)
(5) (4)
(8)
(7)
(2) (1)
1
3 2 4
0 3 0 8 0
0 0 0 0 0
1 5 0 0 0
0 1 1 0 0
2 0 2 4 0
Repr´ esentation des graphes
Matrice d’adjacence
La matrice d’adjacenced’un graphe simpleG= (V,E)d’ordrenest lamatrice bool´eenneM= (mij)1≤i,j≤nde dimensionn×ntelle que
mij=
n
1, si (i,j)∈E(c-`a-d (i,j) est un arc);0, sinon.
Si le graphe n’est pas pond´er´e ou
mij=
n
pij, si (i,j)∈Eetpijest le poids de (i,j);0, sinon.
Si le graphe est pond´er´e.Exemple :
graphe
(2)
(3)
(5) (4)
(8)
(7) (1) 0
4 1
matrice d’adjacence
0 3 0 8 0
0 0 0 0 0
1 5 0 0 0
0 1 1 0 0
2 0 2 4 0
Matrice d’adjacence : Remarque
Ungraphe orient´equelconquea une matrice d’adjacencequelconque, alors qu’ungraphe non orient´eposs`ede une matrice d’adjacencesym´etrique.
L’absence de bouclese traduit par unediagonale nulle.
Unint´erˆetde cette repr´esentation est que lad´etermination de cheminsdans un grapheG revient aucalcul des puissances successivesde la matriceM. En effet, SoitMp= (mijp)la puissancep-i`emede la matriceM.
SiMest d´efinie commematrice bool´eenne, on a mijp=
n
1, s’il existe un chemin de longueurpdei`aj;0, sinon.
SiMest d´efinie comme unematrice carr´eedont lescoefficients sont 0 et 1, on a le coefficientmpijest ´egal aunombre de cheminsde longueurpde G dont l’origine est le sommetiet dont l’extr´emit´e est le sommetj. lasommedes ´el´ements de lai-`eme lignedeMest´egaleau degr´e sortantds(i) du sommeti deG.
lasommedes des ´el´ements de laj-`eme colonnedeMest´egaleau degr´e entrant d(j)du sommetj deG.
Repr´ esentation des graphes
Codage en C
D´efinition d’un graphe
typedef struct{ int nbrS;
int m[N][N];// ou int **m }graphe;
D´efinition d’un arc typedef struct{
int s,d,p;
}arc;
Initialiser un graphe
graphe intialiseGraphe(int n) {
int i,j;
graphe g;
g.nbrS=n;
//g.m=allocMat(n); si g.m est une &(&) for(i=0;i<g.nbrS;i++)
for(j=0;j<g.nbrS;j++) g.m[i][j]=0;
return g;
}
Ajout d’un arc
graphe ajoutArc(arc e, graphe g) {
g.m[e.s][e.d]=e.p;
return g;
}
SoitG= (V,E)un graphe orient´e (ou non) d’ordrenavecV ={0,1,· · ·,n−1}tel que chaque arc aitun poids.L’objectifici est de pr´esent´e un algorithme qui calcule les distancesentre les sommets deG, ainsi que desplus courts chemins.
Algorithme de Floyd-Warshall
NotonsD= (dij)la matrice des distances dansG d’ordrentelle que :
dij=
(
le poids de l’arc (i,j), si (i,j)∈E;0, sii=j;
∞, sinon;
Pour0≤k≤n−1, notonsD(k)= (dij(k))la matrice d’ordrendont le terme dij(k)repr´esente lepoids minimald’un chemin d’origineiet d’extr´emit´ej, et v´erifiela condition que tous les sommetsinterm´ediairesappartiennent au sous-ensemble{0,1,· · ·,k}.
L’´etat initial est la matriceD= (dij)avecdijest le poids de l’arc entrei etj o`u il n’y pas de sommet interm´ediaire.
Application : Distance, Plus courts chemins
Description de l’algorithme de Floyd-Warshall L’algorithmereposesur la remarque suivante :
Si(i,· · ·,j)est un plus court chemin dei `aj etxun sommet interm´ediaire, alors(i,· · ·,x)est un plus court chemin dei `ax, et(x,· · ·,j)un plus court chemin dex `aj.
Deux situationspeuvent se produire suivant que le plus court chemin dei`aj `a sommetsinterm´ediairesdans{0,1,· · ·,k}emprunte le sommetk ou non.
1 Si oui, ce chemin est form´e d’un sous-chemin entreietk, suivi d’un sous-chemin entreketj, chacun ne pouvant utiliser comme sommets interm´ediairesque des sommets de{0,1,· · ·,k−1}et devant ˆetre de longueurminimale. On doit donc avoir
dij(k)=dik(k−1)+dkj(k−1)
2 Sinon, on doit ´evidemment avoir
dij(k)=dij(k−1)
Ainsi, l’algorithme deFloyd-Warshallmontre qu’il suffit de calculer la suite de matrices d´efinies par :
dij(k)=min(dij(k−1),dik(k−1)+dkj(k−1)) (1) et la matriceD(n−1), donnantl’ensembledes valeurs des plus courts chemins dans le grapheG, pourra donc d´etermin´ee enn´etapes der´ecurrence`a partir de (1).
L’algorithme matrice FLOYD(graphe g)
1. n=nombreSommetGraphe;
2. D(−1)=D;
3. pour k de 0 `a n-1 faire 4. pour i de 0 `a n-1 faire 5. pour j de 0 `a n-1 faire
6. dij(k)=min(dij(k−1),dik(k−1)+dkj(k−1));
7. retourner D(n−1);
8. finpour
9. finpour 10. finpour
Application : Distance, Plus courts chemins
Complexit´e :
1 Letemps d’ex´ecutionde l’algorithme de Floydest d´etermin´e par les trois bouclespourimbriqu´ees.
2 L’instruction dans la 3 `eme boucle prend un tempsO(1).
3 Letemps d’ex´ecution totaldeFLOYDest doncΘ(n3).
16/37
Repr´ esentation des graphes
Matrice d’incidence
Soit un grapheG= (V,E)sans boucledensommets etmarcs.la matrice d’incidencedeGest lamatriceM= (mij)1≤i≤n; 1≤j≤mtelle que
mij=
(
1, si l’arcj arrive au sommeti;−1, si l’arcj sort du sommeti;
0, sinon.
1
2
4 3 5
−1 −1 1 1 0 0 0 0 0
1 0 0 0 1 1 0 0 0
0 0 −1 0 −1 0 1 1 0
0 1 0 0 0 −1 −1 0 1
0 0 0 −1 0 0 0 −1 −1
Repr´ esentation des graphes
Matrice d’incidence
Soit un grapheG= (V,E)sans boucledensommets etmarcs.la matrice d’incidencedeGest lamatriceM= (mij)1≤i≤n; 1≤j≤mtelle que
mij=
(
1, si l’arcj arrive au sommeti;−1, si l’arcj sort du sommeti;
0, sinon.
Exemple
graphe
1
5 2
matrice d’incidence
−1 −1 1 1 0 0 0 0 0
1 0 0 0 1 1 0 0 0
0 0 −1 0 −1 0 1 1 0
0 1 0 0 0 −1 −1 0 1
0 0 0 −1 0 0 0 −1 −1
Matrice d’incidence : Remarque
Ungraphe orient´equelconquea une matrice d’adjacencequelconque.
Pour ungraphe non orient´esans boucle, la matrice d’incidence (aux arˆetes) est d´efinie par :
mij=
n
1, siiest une extr´emit´e de l’arˆetej;0, sinon.
Lenombredes ´el´ements de lai-`eme lignedeMayant la valeur−1 est´egaleau degr´e sortantds(xi)du sommetxi deG.
Lenombredes des ´el´ements de lai-`eme lignedeM ayant la valeur 1 est´egale au degr´e entrantde(xj)du sommetxjdeG.
18/37
Repr´ esentation des graphes
Tableau de listes d’adjacences
Soit un grapheG= (V,E)densommets. le tableau de listes d’adjacencesdeG est un tableauTdenlistes, une pour chaque sommet deV. Un tel tableau doit v´erifier pour tout couple de sommets(i,j):
j∈T[i]⇔(i,j)∈E
graphe
1
2
3 4
5
tableau de listes d’adjacences T[1] = (2,4)
T[2] = () T[3] = (2,1) T[4] = (2,3) T[5] = (1,3,4)
Tableau de listes d’adjacences
Soit un grapheG= (V,E)densommets. le tableau de listes d’adjacencesdeG est un tableauTdenlistes, une pour chaque sommet deV. Un tel tableau doit v´erifier pour tout couple de sommets(i,j):
j∈T[i]⇔(i,j)∈E
Exemple
graphe
1
2
3 4
5
tableau de listes d’adjacences T[1] = (2,4)
T[2] = () T[3] = (2,1) T[4] = (2,3) T[5] = (1,3,4)
Repr´ esentation des graphes
Tableau de listes d’adjacences : Remarque
Cette repr´esentation estutilepour obtenir tous lessuccesseursd’un sommeti.
Elle permet d’yacc´ederen un nombre d’op´erations´egal au nombre d’´el´ements de cet ensemble et non pas, comme c’est le cas dans la matrice d’adjacence, au nombre totalde sommets.
Exemple : si dans un graphe de1000sommets chaque sommet n’a que5 successeurs l’obtention de tous les successeurs deise fait en consultant4ou5 valeurs au lieu des1000tests `a effectuer dans le cas des matrices d’adjacences.
Il y adiff´erentes mani`eresdecodercette repr´esentation, par exemple on peut utiliser une structure deliste chaˆın´eeou un untableau `a double indice (TabSucc[i][j] =lej-`eme successeur dei).
Codage en C
D´efinition d’un sommet
typedef struct{ int indice;
int poids;
}sommet;
D´efinition liste d’adjacence
typedef struct{ sommet s;
struct cellule *suivant;
};
typedef struct cellule cellule, *listAdj;
D´efinition d’un graphe
typedef struct{ int nbrS;
listAdj *tabAdj;
}graphe;
D´efinition d’un arc
typedef struct{ int s,d,p;
}arc;
Initialiser un graphe
graphe intialiseGraphe(graphe g) {
int i,j;
g.tabAdj=malloc(g.nbrS*sizeof(cellule));
for(i=0;i<g.nbrS;i++) g.tabAdj[i]=NULL;
return g;
}
Parcours en largeur, Parcours en profondeur
Pr´esentation
Unparcours de grapheest une m´ethode syst´ematiqued’explorationdes sommets et des arˆetes d’un graphe.
Leprincipeest toujours le mˆeme : on part d’un sommetet on effectue une promenadeen choisissantles arˆetes.
On distingue particuli`erementdeuxm´ethodes de parcours :
1 Le parcours en largeur.
2 Le parcours en profondeur.
L’utilit´ede ces parcours :
Reconnaˆıtrecertainespropri´et´esimportantes, par exemple: connexit´e, accessibilit´edes sommets, etc.
Un grand nombre deprobl`emessur les graphes admet poursolutionsdes algorithmesutilisant ces deux parcours, par exemple leprobl`eme du plus court chemin,calcul des distances, etc.
Le principe
Parcourir en largeurunarbrea pour effet de parcourir laracine, puis les sommets dehauteur 1, puis ceux dehauteur 2ainsi de suite.
Leparcours en largeurd’ungrapheG= (V,E)`a partir d’un sommetsest similaire. On parcourts, puis sesvoisins, puis lesvoisins de ses voisinsnon d´ej`a visit´eset ainsi de suite.
Le principe:
1 Parcours `a partir d’un sommet origines.
2 Calcul des distances des sommets parcourus `as(nombre de sommets).
3 Construction d’une arborescence en largeur de racines.
Remarque
Ond´ecouvreles sommets situ´es `a ladistancek avant les sommets situ´es `a la distancek+ 1.
Les sommets nonatteignables`a partir de l’origine ne sont jamaisd´ecouverts.
Parcours en largeur
La proc´edureParcoursLargeurci-dessous de parcours en largeur suppose que le graphe d’entr´ee G= (V,E)est repr´esent´e par deslistes d’adjacences.
Lacouleurde chaque sommetx∈Veststock´eedans la variablecouleur[x],
lepr´ed´ecesseur(ou p`ere) dexeststock´edans la variablepred[x]. Sixn’a pas de pr´ed´ecesseur (par exemple, six=sou sixn’a pas ´et´e d´ecouvert), alorspred[x]=NIL.
Ladistancecalcul´ee par l’algorithme entreset le sommetxest stock´ee dansd[x].
L’algorithme utilise ´egalement unefile FIFOFpour g´erer l’ensemble dessommets gris.
L’algorithme :
proc´edureParcoursLargeur(Graphe: G,Sommet: s) 1. pourchaque sommetx∈V− {s}faire 2. d[x]=∞; pred[x]=NIL; couleur[x]=BLANC;
3. finpour
4. d[s]= 0; pred[s]=NIL; couleur[s]=GRIS;
5. F=∅;
6. ENFILE(s,F);
7. tant queF6=∅faire 8. x=DEFILE(F);
9. pourchaquey∈Voisins[x]faire 10. sicouleur[y]==BLANCalors 11. couleur[y]=GRIS;
12. d[y]=d[x]+1;
13. pred[y]=x;
14. ENFILE(y,F);
15. finsi
16. finpour
17. couleur[x]=NOIR;
La proc´edureParcoursLargeurci-dessous de parcours en largeur suppose que le graphe d’entr´ee G= (V,E)est repr´esent´e par deslistes d’adjacences.
Lacouleurde chaque sommetx∈Veststock´eedans la variablecouleur[x],
lepr´ed´ecesseur(ou p`ere) dexeststock´edans la variablepred[x]. Sixn’a pas de pr´ed´ecesseur (par exemple, six=sou sixn’a pas ´et´e d´ecouvert), alorspred[x]=NIL.
Ladistancecalcul´ee par l’algorithme entreset le sommetxest stock´ee dansd[x].
L’algorithme utilise ´egalement unefile FIFOFpour g´erer l’ensemble dessommets gris.
L’algorithme :
proc´edureParcoursLargeur(Graphe: G,Sommet: s) 1. pourchaque sommetx∈V− {s}faire 2. d[x]=∞; pred[x]=NIL; couleur[x]=BLANC;
3. finpour
4. d[s]= 0; pred[s]=NIL; couleur[s]=GRIS;
5. F=∅;
6. ENFILE(s,F);
7. tant queF6=∅faire 8. x=DEFILE(F);
9. pourchaquey∈Voisins[x]faire 10. sicouleur[y]==BLANCalors 11. couleur[y]=GRIS;
12. d[y]=d[x]+1;
13. pred[y]=x;
14. ENFILE(y,F);
15. finsi
16. finpour
17. couleur[x]=NOIR;
18. fintantque
Parcours en largeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Parcours en largeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Parcours en largeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Parcours en largeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Parcours en largeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Parcours en largeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : ´ etat initial (sommet non visit´ e);
2 GRIS
: sommet d´ ecouvert (mais non trait´ e);
3
NOIR : sommet visit´ e (voisins trait´ es)
Exemple :
1
2 3 4
5
6
7
8
Complexit´e :
1 Letestde laligne 10garantit que chaque sommet estenfil´e au plus une fois et laligne 8garantit que chaque sommet estd´efil´e au plus une fois.
2 Puisque les op´erations d’enfilementet ded´efilementsont enO(1), letemps totaldes op´erations de file estO(|V|).
3 Comme laliste d’adjacencesde chaque sommet (ligne 9) n’estbalay´eequ’au moment o`u le sommet estd´efil´e, laliste d’adjacencesde chaque sommet est parcourue au plus une fois.
4 Lasomme des longueursde toutes leslistes d’adjacences´etantΘ(|E|), letemps totalconsacr´e au balayage deslistes d’adjacencesestO(|E|).
5 Lecoˆut d’initialisation(ligne 1-3) estO(|V|).
6 Letemps d’ex´ecution totaldeParcoursLargeurest doncO(|V|+|E|).
7 Leparcours en largeurs’ex´ecute en un temps qui estlin´eairepar rapport `a la taillede la repr´esentation parlistes d’adjacencesdeG.
Parcours en largeur
Applications :
1 L’algorithmede la proc´edureparcours en largeurpermetde trouver ladistance entre une origines∈V donn´ee et chaque sommetaccessibledepuissdans un grapheG= (V,E).
2 Autrement, cet algorithme permet de d´eterminer leplus court cheminentre un sommets∈V donn´e et chaque sommetaccessibledepuissdans un graphe G= (V,E).
3 Cet algorithme permet ´egalement deconstruireunearborescencependant qu’il parcourt le graphe. L’arborescence est repr´esent´ee par le tableaupred[]de chaque sommet.
4 Il permet aussi de construire ungraphe partield’un graphe donn´e et qui contient tout les sommetsaccessible`a partir d’un sommet origine.
Principe :
Descendreplusprofond´ementdans le graphe chaque fois que c’est possible.
Les arcs sontexplor´es`a partir du sommetsd´ecouvertle plusr´ecemmentet dont on n’a pas encore explor´e tous lesarcs incidents.
Lorsque tous les arcs desont ´et´e explor´es, l’algorithmerevient en arri`erepour explorer les arcs qui partent du sommet `a partir duquelsa ´et´e d´ecouvert.
Ceprocessus se r´ep`etejusqu’`a ce que tous lessommets accessibles`a partir du sommet origine initialaient ´et´e d´ecouverts.
S’il reste des sommetsnon d´ecouverts, on en choisit un qui servira denouvelle origine, et leparcours reprend`a partir de cette origine.
Leprocessus completestr´ep´et´ejusqu’a ce que tous les sommets aient ´et´e d´ecouverts.
Remarque :
Contrairementauparcours en largeur, pour lequel lesous-graphe de liaisonforme une arborescence, le sous-graphe de liaison obtenu par un parcours en profondeur peut ˆetre compos´e deplusieurs arborescences, car le parcours peut ˆetre r´ep´et´e `a partir de plusieurs origines.
Parcours en profondeur
En plus de cr´eer uneforˆet de parcours en profondeur, le parcours en profondeur datechaque sommet.
Chaque sommetxportedeux dates: la premi`ere,debut[],marquele moment o`ux a ´et´ed´ecouvertpour la premi`ere fois (color´e en gris), et la seconde,fin[], marquele moment ou le parcours afini d’examinerlaliste d’adjacencesdex (color´e en noir).
La proc´edureParcoursProfondeurci-dessous de parcours en profondeur suppose que le graphe d’entr´eeG= (V,E)est repr´esent´e par deslistes d’adjacences.
La proc´edureParcoursProfondeurenregistrele moment o`u elled´ecouvrele sommetxdans la variabledebut[x], et le moment o`u elleterminele traitement de sommetxdans la variablefin[x].
Cesdatessont desentierscompris entre1et2|V|, puisque d´ecouverte et fin de traitement se produisentune fois et une seulepour chacun des|V|sommets.
Pour tout sommetx,debut[x]<fin[x]
Le sommetxestBLANCavant l’instantdebut[x],GRISentredebut[x]et fin[x], etNOIRapr`es.
Legraphe d’entr´eepeut ˆetreorient´eounon.
L’algorithme :
proc´edureParcoursProfondeur(Graphe: G) 1. pourchaque sommetx∈V faire 2. pred[x]=NIL; couleur[x]=BLANC;
3. finpour 4. date= 0;
5. pourchaque sommetx∈V faire 6. sicouleur[x]==BLANCalors
7. VISITER(x);
8. finsi
9. finpour
proc´edureVISITER(Sommet: x)
1. couleur[x] =GRIS;//sommet blanc x vient d’ˆetre d´ecouvert 2. date= date+1;
3. debut[x]=date;
4. pourchaquey∈ Voisins[x]faire// Exploration de l’arc (x,y) 5. sicouleur[y]==BLANCalors
6. pred[y]=x;
7. VISITER(y);
8. finsi
9. finpour
10. couleur[x]=NOIR;// noircir x, car on en a fini avec lui 11. date=date+1;
12. fin[x]=date;
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Algorithme :
Coloration des sommets pendant le parcours
1
BLANC : sommet non d´ ecouvert;
2 GRIS
: sommet d´ ecouvert, arborescence en cours de visite;
3
NOIR : sommet visit´ e, arborescence sous-jacente parcourue.
Exemple :
1 2 3 5 4
6
7 8
Parcours en Profondeur
Complexit´e :
1 Les deuxbouclesde la proc´edureParcoursProfondeur(ligne 1-3etligne 5-9) demandent un tempsΘ(|V|).
2 La proc´edureVISITERestappel´ee exactement une foispour chaque sommet x∈V, puisqu’elle n’est invoqu´ee que sur lessommets blancs, et qu’elle commence par lescolorer en gris.
3 Pendant l’ex´ecution deVISITER(x), la boucle deslignes 4-9est ex´ecut´ee
|Voisins[x]|fois. Comme
X
x∈V
|Voisins[x]|= Θ(E)
le coˆut total d’ex´ecution deslignes 4-9deVISITER(x)estΘ(E).
4 Letemps d’ex´ecution totaldeParcoursProfondeurest doncO(|V|+|E|).
5 Leparcours en profondeurs’ex´ecute en un temps qui estlin´eairepar rapport `a la taillede la repr´esentation parlistes d’adjacencesdeG.
Pr´esentation
Les probl`emes decheminement dans les graphes(en particulierla recherche d’un plus court chemin) comptent parmi les probl`emes lesplus anciensde la th´eorie des graphes et les plusimportantspar leursapplications. Ce probl`eme permetla mod´elisationde plusieurs probl`emes, On peut citer entre autres :
les probl`emesd’optimisation de r´eseaux(routiers, t´el´ecommunications), certaines m´ethodes detraitement num´erique du signal, decodageet de d´ecodagedel’information,
certains probl`emesd’investissementet degestion de stocks, etc.
D´efinition
SoitG= (V,E)un graphe muni d’unefonction poidsωqui associe `a chaque arc a= (i,j)unpoidsω(a)ouωij. Le probl`eme du plus court cheminentreietj est de trouver un cheminP(i,j)dei`aj tel queω(P) =
P
(i,j)∈P
ωijsoitminimal.
ω(P)peut repr´esenter soit lecoˆut de transport, soit lad´epense de construction, soit le temps n´ecessaire de parcours,...
Plus courts chemins
Remarque
La recherche duplus court cheminestanalogue`a la recherche duplus long chemin.
Les algorithmes serontdiff´erentssuivant lespropri´et´esdes graphes :
1 ω(u)≥0∀u∈E.
2 ω(u) =cte⇔ω(u) = 1∀u∈E(plus court chemin en nombre d’arcs).
3 G sans circuit.
4 G etω(u)quelconques et suivant le probl`eme consid´er´e (recherche du plus court chemin d’unsommet `a tous les autresou entretous les couples de sommets).
Ilexiste de nombreux algorithmespermettant l’obtention d’unesolution.
Nous nous contenterons simplement ici de d´ecriredeux classiques algorithmes, sans explorer toutes les situations.
1 Algorithme deDijkstrapour calculer le plus court chemind’un sommet `a tous les autres.
G= (V,E)´etant un graphe orient´e d’ordrenavecV={1,2,· · ·,n}.
ωi≥0lalongueur minimumdes chemins du sommet1au sommeti; en particulierωi(1) = 0.
ω(x,y) = longueur(poids) de l’arc(x,y).
Le grapheGest repr´esent´e par deslistes d’adjacences.
Sd´esigne un ensemble de sommets dont leslongueurs finales de plus court chemin`a partir de l’origines ont d´ej`a ´et´ecalcul´ees.Fune file.
L’algorithme :
proc´edureDIJKSTRA(Graphe: G, Poids: ω, Sommet: s)
1. S=∅;
2. F=V;
4. pourchaque sommetx∈V faire
5. d[x]=∞;
6. finpour 7. d[s]=0;
8. tant queF6=∅faire 9. x=ExtraireLeMin(F);
10. S=S∪ {x};
11. pourchaquey∈Voisins[x]
12. sid[y]>d[x] +ω(x,y)alors 13. d[y] =d[x] +ω(x,y);
14. finsi
15. finpour
16. fintantque
Plus courts chemins : Algorithme de Dijkstra
Autrement, on peut pr´esent´e l’algorithmede la fac¸on suivante :
1 S´electionnerun sommet (par exemple 1);
S={2,3,· · ·,n};
ω1= 0;
ωi=
n
ω((1,i)), si i voisin de 1;∞, sinon.
2 S´electionnerjtel queωj= min
k∈Sωk FAIRE S=S\ {j};
SiS=∅alors FIN
3 pour touti∈S∩N(j) FAIRE ωi=min(ωi, ωj+ω((j,i));
Retourner en (2);
Exemple :
1 2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
1 (5)
2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
(5)
R´esultat :
Les longueurs des plus courts chemins seront donc :
ω1= 0;ω2= 5;ω3= 1;ω4= 8;
ω5= 3;ω6= 6.
It´erations de l’algorithme :
1 S={2,3,4,5,6};ω1= 0;
ω2= 7;ω3= 1;ω4=ω5=ω6=∞;
2 j= 3;S={2,4,5,6};
3 S∩N(3) ={2,5,6};
ω2=min(7,1 + 5) = 6;
ω5=min(∞,1 + 2) = 3;
ω6=min(∞,1 + 7) = 8;
4 j= 5;S={2,4,6};
5 S∩N(5) ={2,4};
ω2=min(6,3 + 2) = 5;
ω4=min(∞,3 + 5) = 8;
6 j= 2;S={4,6};
7 S∩N(2) ={4,6};
ω4=min(8,5 + 4) = 8;
ω6=min(8,5 + 1) = 6;
8 j= 6;S={4};
9 S∩N(2) =∅;
Plus courts chemins : Algorithme de Dijkstra
Exemple :
1 2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
1 (5)
2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
(5)
R´esultat :
Les longueurs des plus courts chemins seront donc :
ω1= 0;ω2= 5;ω3= 1;ω4= 8;
ω5= 3;ω6= 6.
It´erations de l’algorithme :
1 S={2,3,4,5,6};ω1= 0;
ω2= 7;ω3= 1;ω4=ω5=ω6=∞;
2 j= 3;S={2,4,5,6};
3 S∩N(3) ={2,5,6};
ω2=min(7,1 + 5) = 6;
ω5=min(∞,1 + 2) = 3;
ω6=min(∞,1 + 7) = 8;
4 j= 5;S={2,4,6};
5 S∩N(5) ={2,4};
ω2=min(6,3 + 2) = 5;
ω4=min(∞,3 + 5) = 8;
6 j= 2;S={4,6};
7 S∩N(2) ={4,6};
ω4=min(8,5 + 4) = 8;
ω6=min(8,5 + 1) = 6;
8 j= 6;S={4};
9 S∩N(2) =∅;
Exemple :
1 2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
1 (5)
2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
(5)
R´esultat :
Les longueurs des plus courts chemins seront donc :
ω1= 0;ω2= 5;ω3= 1;ω4= 8;
ω5= 3;ω6= 6.
It´erations de l’algorithme :
1 S={2,3,4,5,6};ω1= 0;
ω2= 7;ω3= 1;ω4=ω5=ω6=∞;
2 j= 3;S={2,4,5,6};
3 S∩N(3) ={2,5,6};
ω2=min(7,1 + 5) = 6;
ω5=min(∞,1 + 2) = 3;
ω6=min(∞,1 + 7) = 8;
4 j= 5;S={2,4,6};
5 S∩N(5) ={2,4};
ω2=min(6,3 + 2) = 5;
ω4=min(∞,3 + 5) = 8;
6 j= 2;S={4,6};
7 S∩N(2) ={4,6};
ω4=min(8,5 + 4) = 8;
ω6=min(8,5 + 1) = 6;
8 j= 6;S={4};
9 S∩N(2) =∅;
Plus courts chemins : Algorithme de Dijkstra
Exemple :
1 2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
1 (5)
2
3
4
5
6
(1)
(7)
(7) (1)
(2)
(2) (3)
(4) (5)
(5)
R´esultat :
Les longueurs des plus courts chemins seront donc :
ω1= 0;ω2= 5;ω3= 1;ω4= 8;
ω5= 3;ω6= 6.
It´erations de l’algorithme :
1 S={2,3,4,5,6};ω1= 0;
ω2= 7;ω3= 1;ω4=ω5=ω6=∞;
2 j= 3;S={2,4,5,6};
3 S∩N(3) ={2,5,6};
ω2=min(7,1 + 5) = 6;
ω5=min(∞,1 + 2) = 3;
ω6=min(∞,1 + 7) = 8;
4 j= 5;S={2,4,6};
5 S∩N(5) ={2,4};
ω2=min(6,3 + 2) = 5;
ω4=min(∞,3 + 5) = 8;
6 j= 2;S={4,6};
7 S∩N(2) ={4,6};
ω4=min(8,5 + 4) = 8;
ω6=min(8,5 + 1) = 6;
8 j= 6;S={4};
9 S∩N(2) =∅;