• Aucun résultat trouvé

Chapitre II

N/A
N/A
Protected

Academic year: 2022

Partager "Chapitre II"

Copied!
77
0
0

Texte intégral

(1)

Chapitre II

Les graphes

(2)

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.

(3)

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 unensembleEV ×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|.

(4)

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),

(5)

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.

(6)

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 ependant de lanaturedu graphe consid´er´e.

(7)

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

(8)

Repr´ esentation des graphes

Motivation

Les graphes sont une

structure de donn´ees

importante en

informatique.

Il est donc

fondamental

de s’int´ eresser ` a la mani` ere de

repr´esenter

des graphes en vue de leurs

manipulations algorithmiques.

Plusieurs

modes de

repr´esentation

peuvent ˆ etre envisag´ es selon la

nature des traitements

que 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)

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

(10)

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

(11)

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.

(12)

Repr´ esentation des graphes

Codage en C

efinition d’un graphe

typedef struct{ int nbrS;

int m[N][N];// ou int **m }graphe;

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;

}

(13)

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≤kn−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.

(14)

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)

(15)

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

(16)

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).

(17)

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

(18)

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

(19)

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.

(20)

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):

jT[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)

(21)

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):

jT[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)

(22)

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).

(23)

Codage en C

efinition d’un sommet

typedef struct{ int indice;

int poids;

}sommet;

efinition liste d’adjacence

typedef struct{ sommet s;

struct cellule *suivant;

};

typedef struct cellule cellule, *listAdj;

efinition d’un graphe

typedef struct{ int nbrS;

listAdj *tabAdj;

}graphe;

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;

}

(24)

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.

(25)

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.

(26)

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 sommetxVeststock´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 sommetxV− {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. pourchaqueyVoisins[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;

(27)

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 sommetxVeststock´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 sommetxV− {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. pourchaqueyVoisins[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

(28)

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 :

(29)

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

(30)

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

(31)

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

(32)

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

(33)

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

(34)

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

(35)

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

(36)

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

(37)

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

(38)

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

(39)

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.

(40)

Parcours en largeur

Applications :

1 L’algorithmede la proc´edureparcours en largeurpermetde trouver ladistance entre une originesV donn´ee et chaque sommetaccessibledepuissdans un grapheG= (V,E).

2 Autrement, cet algorithme permet de d´eterminer leplus court cheminentre un sommetsV 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.

(41)

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.

(42)

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.

(43)

L’algorithme :

proc´edureParcoursProfondeur(Graphe: G) 1. pourchaque sommetxV faire 2. pred[x]=NIL; couleur[x]=BLANC;

3. finpour 4. date= 0;

5. pourchaque sommetxV 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;

(44)

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 :

(45)

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

(46)

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

(47)

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

(48)

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

(49)

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

(50)

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

(51)

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

(52)

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

(53)

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

(54)

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

(55)

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

(56)

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

(57)

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

(58)

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

(59)

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

(60)

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 xV, 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.

(61)

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,...

(62)

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∀uE(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.

(63)

G= (V,E)´etant un graphe orient´e d’ordrenavecV={1,2,· · ·,n}.

ωi0lalongueur 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.

Sesigne 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 sommetxV faire

5. d[x]=∞;

6. finpour 7. d[s]=0;

8. tant queF6=faire 9. x=ExtraireLeMin(F);

10. S=S∪ {x};

11. pourchaqueyVoisins[x]

12. sid[y]>d[x] +ω(x,y)alors 13. d[y] =d[x] +ω(x,y);

14. finsi

15. finpour

16. fintantque

(64)

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 toutiSN(j) FAIRE ωi=min(ωi, ωj+ω((j,i));

Retourner en (2);

(65)

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 SN(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 SN(5) ={2,4};

ω2=min(6,3 + 2) = 5;

ω4=min(∞,3 + 5) = 8;

6 j= 2;S={4,6};

7 SN(2) ={4,6};

ω4=min(8,5 + 4) = 8;

ω6=min(8,5 + 1) = 6;

8 j= 6;S={4};

9 SN(2) =∅;

(66)

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 SN(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 SN(5) ={2,4};

ω2=min(6,3 + 2) = 5;

ω4=min(∞,3 + 5) = 8;

6 j= 2;S={4,6};

7 SN(2) ={4,6};

ω4=min(8,5 + 4) = 8;

ω6=min(8,5 + 1) = 6;

8 j= 6;S={4};

9 SN(2) =∅;

(67)

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 SN(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 SN(5) ={2,4};

ω2=min(6,3 + 2) = 5;

ω4=min(∞,3 + 5) = 8;

6 j= 2;S={4,6};

7 SN(2) ={4,6};

ω4=min(8,5 + 4) = 8;

ω6=min(8,5 + 1) = 6;

8 j= 6;S={4};

9 SN(2) =∅;

(68)

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 SN(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 SN(5) ={2,4};

ω2=min(6,3 + 2) = 5;

ω4=min(∞,3 + 5) = 8;

6 j= 2;S={4,6};

7 SN(2) ={4,6};

ω4=min(8,5 + 4) = 8;

ω6=min(8,5 + 1) = 6;

8 j= 6;S={4};

9 SN(2) =∅;

Références

Documents relatifs

Tous les graphes consid´ er´ es dans cette section sont non orient´ es et simples, c’est-` a-dire sans multi-arˆ etes et sans boucle..

Domaine: Apprentissage de la langue / découvrir l'écrit Objectif : identifier des suites de lettres formant des mots verticalement et horizontalement.. J'ai respecté la consigne :

Domaine: Apprentissage de la langue / découvrir l'écrit Objectif : identifier des suites de lettres formant des mots verticalement et horizontalement.. J'ai respecté la consigne :

R´ esum´ e – Ce travail porte sur l’utilisation du verre comme v´ eritable mat´ eriau de structure et concerne plus particuli` erement la proposition d’une m´ ethode de contrˆ

En plus des lieux touristiques aux huit points indiqués, toutes les lignes de bus passent devant des bâtiments historiques de la ville.. Stéphanie peut-elle utiliser toutes les

[r]

TES 5 Interrogation 8A 7 d´ecembre 2017 R´epondre aux questions sur la feuille... TES 5 Interrogation 8B 7 d´ecembre 2017 R´epondre aux questions sur

En d´ eduire le sens de variation de f et dresser son tableau des variations sur l’intervalle [0 ; 20].. D´ eterminer la valeur moyenne de la fonction f sur l’intervalle [2