Sie sind auf Seite 1von 53

Thorie des graphes et optimisation dans les graphes

Christine Solnon

Table des matires


1 2 3 Motivations Dnitions Reprsentation des graphes 3.1 3.2 4 Reprsentation par matrice dadjacence . . . . . . . . . . . . . . . . . . . . . . Reprsentation par listes dadjacence . . . . . . . . . . . . . . . . . . . . . . . . 3 4 8 8 8 10 10 11 13 14 16 17 20 23 25 26 26 27 28 29

Cheminements et connexits 4.1 4.2 4.3 4.4 4.5 Notions de chemin, chaine, cycle et circuit . . . . . . . . . . . . . . . . . . . . . Fermeture transitive dun graphe . . . . . . . . . . . . . . . . . . . . . . . . . . Notions de connexit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notion de graphe eulrien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notion de graphe hamiltonien . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 6 7 8

Arbres et arborescences Graphes planaires Coloriage de graphes, cliques et stables Parcours de graphes 8.1 8.2 8.3 8.4 8.5 Arborescence couvrante associe un parcours . . . . . . . . . . . . . . . . . . Parcours en largeur (Breadth First Search = BFS) . . . . . . . . . . . . . . . . . Applications du parcours en largeur . . . . . . . . . . . . . . . . . . . . . . . . Parcours en profondeur (Depth First Search = DFS) . . . . . . . . . . . . . . . . Applications du parcours en profondeur . . . . . . . . . . . . . . . . . . . . . . 1

Plus courts chemins 9.1 9.2 9.3 9.4 Dnitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algorithme de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algorithme de Bellman-Ford . . . . . . . . . . . . . . . . . . . . . . . . . . . . Synthse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31 31 34 37 39 39 42 47 47 47 48 50 51 52 52 52

10 Arbres couvrants minimaux (ACM) 11 Rseaux de transport 12 Planication de projet par les rseaux 12.1 Cot et dure dune tche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Modlisation des contraintes de prcdence par un graphe . . . . . . . . . . . . . 12.4 Dure minimale dexcution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 Date au plus tard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6 Marge totale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7 Chemins et tches critiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Pour en savoir plus

Motivations

Pour rsoudre de nombreux problmes concrets, on est amen tracer sur le papier des petits dessins qui reprsentent (partiellement) le problme rsoudre. Bien souvent, ces petits dessins se composent de points et de lignes continues reliant deux deux certains de ces points. On appellera ces petits dessins des graphes, les points des sommets et les lignes des arcs ou artes, selon que la relation binaire sous-jacente est oriente ou non.

Quelques exemples de modlisation par des graphes


Rseaux routiers : Le rseau routier dun pays peut tre reprsent par un graphe dont les sommets sont les villes. Si lon considre que toutes les routes sont double sens, on utilisera un graphe non orient et on reliera par une arte tout couple de sommets correspondant deux villes relies par une route (si lon considre en revanche que certaines routes sont sens unique, on utilisera un graphe orient). Ces artes pourront tre values par la longueur des routes correspondantes. Etant donn un tel graphe, on pourra sintresser, par exemple, la rsolution des problmes suivants : - Quel est le plus court chemin, en nombre de kilomtres, passant par un certain nombre de villes donnes ? - Quel est le chemin traversant le moins de villes pour aller dune ville une autre ? - Est-il possible de passer par toutes les villes sans passer deux fois par une mme route ?

Processus tapes : Certains problmes peuvent tre spcis par un tat initial, un tat nal, un certain nombre dtats intermdiaires et des rgles de transition prcisant comment on peut passer dun tat lautre. Rsoudre le problme consiste alors trouver une suite de transitions permettant de passer de ltat initial ltat nal. Beaucoup de jeux et autres casse-tte peuvent tre modliss ainsi. Considrons, par exemple, le problme du chou, de la brebis et du loup : Un brave homme se trouve au bord dune rivire quil souhaite traverser, en compagnie dun loup, dune brebis et dun chou. Malheureusement, il ne dispose que dune petite barque, ne pouvant porter en plus de lui-mme quun seul de ses compagnons (le loup ou la brebis ou le chou). Bien sr, la brebis refuse de rester seule avec le loup, tandis que le chou refuse de rester seul avec la brebis. Comment peut-il sy prendre pour traverser la rivire avec ses trois compagnons et continuer son chemin ? Ltat initial est ltat o tout le monde est sur la rive gauche de la rivire, tandis que ltat nal est ltat o tout le monde est sur la rive droite de la rivire. La rgle de transition est la suivante : si lhomme est sur une rive avec certains de ses compagnons, alors il peut passer sur lautre rive, soit seul, soit accompagn par un seul de ses compagnons se trouvant sur la mme rive que lui, sous rserve quil ne laisse pas le loup seul avec la brebis, ou la brebis seule avec le chou. On peut modliser ce problme par un graphe non orient, dont les sommets reprsentent les tats possibles, et les artes le fait quon peut passer dun tat lautre par une transition. On obtient alors le graphe non orient suivant :

L B C

L H

C B

H C B

L H B

L B

C H

L B C H

L C

H B

L C H

L H C

B H

L C

H B L C
Etat final

Etat initial

C H

L B

H L B

H B C

B C

H L

o le loup est reprsent par la lettre L, le chou par C, la brebis par B et lhomme par H, et o un tat est reprsent par un cercle coup en deux demi-cercles reprsentant les rives gauche et droite de la rivire. Etant donn un tel graphe, on pourra chercher un chemin allant de ltat initial ltat nal.

Automates nis : Un automate ni permet de reconnatre un langage rgulier et peut tre reprsent par un graphe orient et tiquet. Par exemple, lautomate ni reconnaissant le langage des mots de la forme an bm (les mots composs dune suite de a suivie dune suite de b) peut tre reprsent par le graphe suivant
a b

a 1 2

Ce graphe possde 3 sommets et 4 arcs, chaque arc tant tiquet par un symbole (a ou b). Etant donn un tel graphe, on peut sintresser, par exemple, la rsolution des problmes suivants : - Existe-t-il un chemin allant du sommet initial (1) au sommet nal (3) ? - Quel est le plus court chemin entre deux sommets donns ? - Existe-t-il des sommets inutiles, par lesquels aucun chemin allant du sommet initial un sommet nal ne peut passer ?

Dnitions

De faon plus formelle, un graphe est dni par un couple G = (S, A) tel que - S est un ensemble ni de sommets, - A est un ensemble de couples de sommets (si , sj ) S 2 . Un graphe peut tre orient ou non : Dans un graphe orient, les couples (si , sj ) A sont orients, cest dire que (si , sj ) est un couple ordonn, o si est le sommet initial, et sj le sommet terminal. Un couple (si , sj ) est appel un arc, et est reprsent graphiquement par si sj . Par exemple, 4

4 2

reprsente le graphe orient G = (S, A) avec S = {1, 2, 3, 4, 5, 6} et A = {(1, 2), (2, 4), (2, 5), (4, 1), (4, 4), (4, 5), (5, 4), (6, 3)}. Dans un graphe non orient, les couples (si , sj ) A ne sont pas orients, cest dire que (si , sj ) est quivalent (sj , si ). Une paire (si , sj ) est appele une arte, et est reprsente graphiquement par si sj . Par exemple,
1 5 6

reprsente le graphe non orient G = (S, A) avec S = {1, 2, 3, 4, 5, 6} et A = {(1, 2), (1, 5), (5, 2), (3, 6)}.

Terminologie Lordre dun graphe est le nombre de ses sommets. Une boucle est un arc ou une arte reliant un sommet lui-mme. Un graphe non-orient est dit simple sil ne comporte pas de boucle, et sil ne comporte jamais plus dune arte entre deux sommets. Un graphe non orient qui nest pas simple est un multigraphe. Dans le cas dun multi-graphe, A nest plus un ensemble mais un multi-ensemble dartes. On se restreindra gnralement dans la suite aux graphes simples. Un graphe orient est un p-graphe sil comporte au plus p arcs entre deux sommets. Le plus souvent, on tudiera des 1-graphes. Un graphe partiel dun graphe orient ou non est le graphe obtenu en supprimant certains arcs ou artes. Un sous-graphe dun graphe orient ou non est le graphe obtenu en supprimant certains sommets et tous les arcs ou artes incidents aux sommets supprims. Un graphe orient est dit lmentaire sil ne contient pas de boucle. Un graphe orient est dit complet sil comporte un arc (si , sj ) et un arc (sj , si ) pour tout couple de sommets diffrents si , sj S 2 . De mme, un graphe non-orient est dit complet sil comporte une arte (si , sj ) pour toute paire de sommets diffrents si , sj S 2 .

Notion dadjacence entre sommets : Dans un graphe non orient, un sommet si est dit adjacent un autre sommet sj sil existe une arte entre si et sj . Lensemble des sommets adjacents un sommet si est dni par : adj (si ) = {sj /(si , sj ) A ou (sj , si ) A} Dans un graphe orient, on distingue les sommets successeurs des sommets prdcesseurs : succ(si ) = {sj /(si , sj ) A} pred(si ) = {sj /(sj , si ) A}

Notion de degr dun sommet : Dans un graphe non orient, le degr dun sommet est le nombre dartes incidentes ce sommet (dans le cas dun graphe simple, on aura d (si ) =| adj (si ) |). Dans un graphe orient, le demi-degr extrieur dun sommet si , not d+ (si ), est le nombre darcs partant de si (dans le cas dun 1-graphe, on aura d+ (si ) =| succ(si ) |). De mme, le demi-degr intrieur dun sommet si , not d (si ), est le nombre darcs arrivant si (dans le cas dun 1-graphe, on aura d (si ) =| pred(si ) |).

Exercice : Dessiner un graphe non orient complet 4 sommets. Quel est le degr des sommets de ce graphe ? Combien dartes possde-t-il ? Gnralisez ces rsultats un graphe simple complet ayant n sommets. Correction :
1 3

Ce graphe possde 6 artes et chaque sommet du graphe est de degr 3. De faon plus gnrale, tant donn un graphe simple complet ayant n sommets, chaque sommet tant reli aux n 1 autres sommets, le degr de chaque sommet est n 1. Le nombre dartes dun graphe est gal la moiti de la somme des degrs de tous ses sommets. Par consquent, un graphe simple complet ayant n sommets aura n (n 1)/2 artes.

Exercice : On considre le graphe orient G = (S, A) tel que S = {1, 2, 3, 4, 5} A = {(1, 2), (1, 4), (2, 2), (2, 3), (2, 4), (3, 5), (4, 3), (5, 3)} 1. reprsenter graphiquement ce graphe, 2. donner le demi-degr extrieur de 2 et le demi-degr intrieur de 4, 3. donner les sommets prdcesseurs de 4 et les sommets successeurs de 2, 4. donner un graphe partiel et un sous-graphe de ce graphe. Correction : 1. Une reprsentation graphique du graphe est
2

1 4

2. d+ (2) = 3, d (4) = 2 3. pred(4) = {1, 2}, succ(2) = {2, 3, 4} 4. Exemple de graphe partiel et de sous-graphe :

2
2

1 4

Graphe partiel

Sous-graphe induit par 1, 2, 3, 5

Exercice : Au cours dune soire, les convives se serrent les mains les uns les autres (jamais plusieurs fois avec la mme personne). Chacun se souvient du nombre de mains quil a serres. 1. Montrer quil y a au moins 2 personnes ayant serr le mme nombre de mains. 2. Montrer que le nombre total de mains serres est pair. 3. En dduire que le nombre de personnes ayant serr un nombre impair de mains est pair. Correction : on construit le graphe non orient G = (S, A), o S associe un sommet chaque convive, et A associe une arte chaque couple de convives qui se sont serrs la main. Le nombre de mains serres par une personne correspond alors au degr du sommet correspondant dans le graphe. 1. Montrer quil y a au moins 2 personnes ayant serr le mme nombre de mains revient montrer quil y a au moins 2 sommets ayant le mme degr : Sil y a n sommets, le degr dun sommet est compris entre 0 (cas o le sommet est isol, cest dire que la personne correspondante na serr la main personne) et n 1 (cas o le sommet est reli tous les autres, cest dire que la personne correspondante a serr la main toutes les autres). Pour que tous les sommets aient un degr diffrent, il faut donc quil y ait exactement un sommet de degr 0, un sommet de degr 1, ... etc ... et un sommet de degr n 1. Or, sil y a un sommet de degr n 1, il ne peut pas y avoir de sommet de degr 0. 2. Montrer que le nombre total de mains serres est pair revient montrer que la somme de tous les degrs est paire : chaque arte ajoute 1 au degr de 2 sommets. Par consquent, la somme des degrs est d (si ) = 2 | A |
si S

3. Montrer que le nombre de personnes ayant serr un nombre impair de mains est pair revient montrer que le nombre de sommets de degr impair est pair : on partitionne lensemble S des sommets en lensemble Spairs des sommets de degr pair et lensemble Simpairs des sommets de degr impair. On a d (si ) =
si S sj Spairs

d (sj ) +
sk Simpairs

d (sk )

Etant donn que si S d (si ) est pair, et que sj Spairs d (sj ) est pair, on en dduit que sk Simpairs d (sk ) doit aussi tre pair. Par consquent, Simpairs contient un nombre pair de sommets. De faon plus gnrale, on retiendra que, pour tout graphe simple non orient, il existe au moins deux sommets du graphe ayant un mme degr ; la somme des degrs de tous les sommets du graphe est paire et est gale deux fois le nombre dartes ; il y a un nombre pair de sommets qui ont un degr impair.

Reprsentation des graphes

Il existe deux faons classiques de reprsenter un graphe en machine : par une matrice dadjacence ou par un ensemble de listes dadjacence.

3.1

Reprsentation par matrice dadjacence

Soit le graphe G = (S, A). On suppose que les sommets de S sont numrots de 1 n, avec n =| S |. La reprsentation par matrice dadjacence de G consiste en une matrice boolenne M de taille n n telle que M [i][j ] = 1 si (i, j ) A, et M [i][j ] = 0 sinon. Si le graphe est valu (par exemple, si des distances sont associes aux arcs), on peut utiliser une matrice dentiers, de telle sorte que M [i][j ] soit gal la valuation de larc (i, j ) si (i, j ) A. Sil nexiste pas darc entre 2 sommets i et j , on peut placer une valeur particulire (par exemple 0 ou ou null) dans M [i][j ]. Dans le cas de graphes non orients, la matrice est symtrique par rapport sa diagonale descendante. Dans ce cas, on peut ne mmoriser que la composante triangulaire suprieure de la matrice dadjacence.

Taille mmoire ncessaire : la matrice dadjacence dun graphe ayant n sommets ncessite de lordre de O(n2 ) emplacements mmoire. Si le nombre darcs est trs infrieur n2 , cette reprsentation est donc loin dtre optimale.

Oprations sur les matrices dadjacence : le test de lexistence dun arc ou dune arte avec une reprsentation par matrice dadjacence est immdiat (il suft de tester directement la case correspondante de la matrice). En revanche, le calcul du degr dun sommet, ou laccs tous les successeurs dun sommet, ncessitent le parcours de toute une ligne (ou toute une colonne) de la matrice, quel que soit le degr du sommet. Dune faon plus gnrale, le parcours de lensemble des arcs/artes ncessite la consultation de la totalit de la matrice, et prendra un temps de lordre de n2 . Si le nombre darcs est trs infrieur n2 , cette reprsentation est donc loin dtre optimale.

3.2

Reprsentation par listes dadjacence

Soit le graphe G = (S, A). On suppose que les sommets de S sont numrots de 1 n, avec n =| S |. La reprsentation par listes dadjacence de G consiste en un tableau T de n listes, une pour chaque sommet de S . Pour chaque sommet si S , la liste dadjacence T [si ] est une liste chaine de tous les sommets sj tels quil existe un arc ou une arte (si , sj ) A. Autrement dit, T [si ] contient la liste de tous les sommets successeurs de si . Les sommets de chaque liste dadjacence sont gnralement chains selon un ordre arbitraire. Si le graphe est valu (par exemple, si les artes reprsentent des distances), on peut stocker dans les listes dadjacence, en plus du numro de sommet, la valuation de larte. Dans le cas de graphes non orients, pour chaque arte (si , sj ), on aura sj qui appartiendra la liste chaine de T [si ], et aussi si qui appartiendra la liste chaine de T [sj ].

Taille mmoire ncessaire : si le graphe G est orient, la somme des longueurs des listes dadjacence est gale au nombre darcs de A, puisque lexistence dun arc (si , sj ) se traduit par la prsence de sj dans la liste dadjacence de T [si ]. En revanche, si le graphe nest pas orient, la somme des longueurs de toutes les listes dadjacence est gale deux fois le nombre dartes du graphe, puisque si (si , sj ) est une arte, alors si appartient la liste dadjacence de T [sj ], et vice versa. Par consquent, la liste dadjacence dun graphe ayant n sommets et m arcs ou artes ncessite de lordre de O(n + m) emplacements mmoires.

Oprations sur les listes dadjacence : le test de lexistence dun arc ou dune arte (si , sj ) avec une reprsentation par liste dadjacence est moins direct que dans le cas dune matrice dadjacence (il nexiste pas de moyen plus rapide que de parcourir la liste dadjacence de T [si ] jusqu trouver sj ). En revanche, le calcul du degr dun sommet, ou laccs tous les successeurs dun sommet, est plus efcace que dans le cas dune matrice dadjacence : il suft de parcourir la liste dadjacence associe au sommet. Dune faon plus gnrale, le parcours de lensemble des arcs/artes ncessite le parcours de toutes les listes dadjacence, et prendra un temps de lordre de p, o p est le nombre darcs/artes ( comparer avec n2 dans le cas dune reprsentation par matrice dadjacence). En revanche, le calcul des prdcesseurs dun sommet est mal ais avec cette reprsentation, et ncessite le parcours de toutes les listes dadjacences de T . Une solution dans le cas o lon a besoin de connaitre les prdcesseurs dun sommet est de maintenir, en plus de la liste dadjacence des successeurs, la liste dadjacence des prdcesseurs.

Exercices
1. Donnez les reprsentations par matrice dadjacence et listes dadjacence du graphe non orient suivant :
1 2 3

Correction : Matrice dadjacence : 1 2 3 4 5 Listes dadjacence :


1 2 5 2 1 2 5 3 4

1 0 1 0 0 1

2 1 0 1 1 1

3 0 1 0 1 0

4 0 1 1 0 1

5 1 1 0 1 0

5 1

3 2

2. Donnez les reprsentations par matrice dadjacence et listes dadjacence du graphe orient suivant :

Correction : Matrice dadjacence : 1 2 3 4 5 6 Listes dadjacence :


1 2 4 2 5 6

1 0 0 0 1 0 0

2 1 0 0 1 0 0

3 0 0 0 0 0 0

4 1 0 0 0 1 0

5 0 1 1 0 0 0

6 0 0 1 0 0 1

5 1

5 6

4 6

4
4.1

Cheminements et connexits
Notions de chemin, chaine, cycle et circuit

Dans un graphe orient, un chemin dun sommet u vers un sommet v est une squence < s0 , s1 , s2 , ..., sk > de sommets tels que u = s0 , v = sk , et (si1 , si ) A pour i [1..k ]. La longueur du chemin est le nombre darcs dans le chemin, cest--dire k . On dira que le chemin contient les sommets s0 , s1 , ..., sk , et les arcs (s0 , s1 ), (s1 , s2 ), ..., (sk1 , sk ). Sil existe un chemin de u v , on dira que v est accessible partir de u. Un chemin est lmentaire si les sommets quil contient sont tous distincts. Dans un graphe orient, un chemin < s0 , s1 , ..., sk > forme un circuit si s0 = sk et si le chemin comporte au moins un arc (k 1). Ce circuit est lmentaire si en plus les sommets s1 , s2 , ..., sk sont tous distincts. Une boucle est un circuit de longueur 1. Considrons par exemple le graphe orient suivant :
1 2 3

Un chemin lmentaire dans ce graphe est < 1, 4, 2, 5 >. Un chemin non lmentaire dans ce graphe est < 3, 6, 6, 6 >. Un circuit lmentaire dans ce graphe est < 1, 2, 5, 4, 1 >. Un circuit non lmentaire dans ce graphe est < 1, 2, 5, 4, 2, 5, 4, 1 >. 10

On retrouve ces diffrentes notions de cheminement dans les graphes non orients. Dans ce cas, on parlera de chaine au lieu de chemin, et de cycle au lieu de circuit. Un graphe sans cycle est dit acyclique.

Exercice : Montrer que sil existe un chemin dun sommet u vers un sommet v dans un graphe orient, alors il existe un chemin lmentaire de u vers v . idem, pour circuit, chaine et cycle.

4.2

Fermeture transitive dun graphe

On appelle fermeture transitive dun graphe G = (S, A), le graphe Gf = (S, Af ) tel que pour tout couple de sommets (si , sj ) S 2 , larc/arte (si , sj ) appartient Af si et seulement sil existe un chemin/chaine de si vers sj . Le calcul de la fermeture transitive dun graphe peut se faire en additionnant les puissances successives de sa matrice dadjacence. Considrons par exemple le graphe orient suivant :
a b e f

La matrice dadjacence associe ce graphe est la matrice M suivante : a b c M= d e f g a 0 1 0 0 0 0 0 b 0 0 0 1 0 0 0 c 1 0 0 0 0 0 0 d 0 0 1 0 0 0 0 e 0 0 1 0 0 0 1 f 0 0 0 0 1 0 0 g 0 0 1 0 0 1 0

Dans cette matrice, M [i][j ] = 1 ssi il existe un chemin de longueur 1 pour aller de i j . Pour quil existe un chemin de longueur 2 pour aller dun sommet k un sommet r, il faut quil existe un sommet i tel quil existe un chemin de longueur 1 de k vers i et un autre chemin de longueur 1 de i vers r. Pour tester cela, il sagit de parcourir simultanment la ligne k et la colonne r de la matrice M et de regarder sil y a un 1 la mme position dans la ligne k et la colonne r. Par exemple, il y a un chemin de longueur 2 allant de a vers d car il y a un 1 en troisime position la fois dans la ligne a et dans la colonne d. Ainsi, en multipliant cette matrice par elle-mme, on obtient la matrice M 2 des chemins de longueur 2 : a b c M2 = d e f g a 0 0 0 1 0 0 0 b 0 0 1 0 0 0 0 c 0 1 0 0 0 0 0 d 1 0 0 0 0 0 0 e 1 0 1 0 0 1 0 f 0 0 1 0 0 0 1 g 1 0 0 0 1 0 0

11

Dans cette matrice, M 2 [i][j ] = 1 ssi il existe un chemin de longueur 2 pour aller de i j . Par exemple, M [a][d] = 1 car il existe un chemin (< a, c, d >) de longueur 2 allant de a d. De faon plus gnrale, M k (la matrice obtenue en multipliant M par elle mme k fois successivement) est la matrice des chemins de longueur k . En additionnant M et M 2 , on obtient la matrice M gale 2 : a b a 0 0 b 1 0 c 0 1 M + M2 = d 1 1 e 0 0 f 0 0 g 0 0 + M 2 des chemins de longueur infrieure ou c 1 1 0 0 0 0 0 d 1 0 1 0 0 0 0 e 1 0 1 0 0 1 1 f 0 0 1 0 1 0 1 g 1 0 1 0 1 1 0

De mme, en multipliant M + M 2 par M , et en additionnant la matrice rsultante avec M , on obtient la matrice M + M 2 + M 3 des chemins de longueur infrieure ou gale 3 : a b c M + M2 + M3 = d e f g a 0 1 1 1 0 0 0 b 1 0 1 1 0 0 0 c 1 1 0 1 0 0 0 d 1 1 1 0 0 0 0 e 1 1 1 0 1 1 1 f 1 0 1 0 1 1 1 g 1 1 1 0 1 1 1

Selon le mme principe, on calcule la matrice M + M 2 + M 3 + M 4 des chemins de longueur infrieure ou gale 4 : a b c M + M2 + M3 + M4 = d e f g a 1 1 1 1 0 0 0 b 1 1 1 1 0 0 0 c 1 1 1 1 0 0 0 d 1 1 1 1 0 0 0 e 1 1 1 1 1 1 1 f 1 1 1 0 1 1 1 g 1 1 1 1 1 1 1

et enn la matrice M + M 2 + M 3 + M 4 + M 5 des chemins de longueur infrieure ou gale 5 : a b c M + M2 + M3 + M4 + M5 = d e f g a 1 1 1 1 0 0 0 b 1 1 1 1 0 0 0 c 1 1 1 1 0 0 0 d 1 1 1 1 0 0 0 e 1 1 1 1 1 1 1 f 1 1 1 1 1 1 1 g 1 1 1 1 1 1 1

Si on recommence une fois de plus, et que lon calcule la matrice M + M 2 + M 3 + M 4 + M 5 + M 6 des chemins de longueur infrieure ou gale 6, on constate que cette matrice est gale celle des 12

chemins de longueur infrieure ou gale 5. Par consquent M + M 2 + M 3 + M 4 + M 5 est la matrice dadjacence de la fermeture transitive Gf du graphe G de dpart. Notons que pour calculer de cette faon la fermeture transitive dun graphe comportant n sommets, il faudra faire n multiplications et n additions de matrices (car, dans le pire des cas, le plus long chemin lmentaire entre deux sommets est de longueur n). Chaque multiplication ncessitant de lordre de n3 oprations, cet algorithme a une complexit en O(n4 ). On peut amliorer cet algorithme, et obtenir une complexit en O(n3 .log2 (n)) en multipliant chaque nouvelle matrice calcule par elle-mme de la faon suivante : En multipliant M par elle-mme, et en ajoutant le rsultat M , on obtient lensemble des chemins de longueur infrieure ou gale 2 = M 2 + M . En multipliant M 2 + M par elle-mme, et en ajoutant le rsultat M , on obtient lensemble des chemins de longueur infrieure ou gale 4 = M 4 + M 3 + M 2 + M . En multipliant M 4 + M 3 + M 2 + M par elle-mme, et en ajoutant le rsultat M , on obtient lensemble des chemins de longueur infrieure ou gale 8 = M 8 + M 7 + M 6 + M 5 + M 4 + M3 + M2 + M. etc... En rptant ce processus k fois de suite, on obtient tous les chemins de longueur infrieure ou gale 2k . Donc, pour trouver tous les chemins de longueur infrieure ou gale n, il faudra rpter ce processus log2 (n) fois.

4.3

Notions de connexit

Cas des graphes non orients. Un graphe non orient est connexe si chaque sommet est accessible partir de nimporte quel autre. Autrement dit, si pour tout couple de sommets distincts (si , sj ) S 2 , il existe une chaine entre si et sj . Par exemple, le graphe non orient suivant nest pas connexe.
a b e f

car il nexiste pas de chane entre les sommets a et e. En revanche, le sous-graphe dni par les sommets {a, b, c, d} est connexe. Une composante connexe dun graphe non orient G est un sous-graphe G de G qui est connexe et maximal (cest dire quaucun autre sous-graphe connexe de G ne contient G ). Par exemple, le graphe prcdent est compos de 2 composantes connexes : la premire est le sous-graphe dni par les sommets {a, b, c, d} et la seconde est le sous-graphe dni par les sommets {e, f, g }. Notons que si lon calcule la fermeture transitive dun graphe connexe, on obtient un graphe complet. De mme, si lon calcule la fermeture transitive dun graphe comportant k composantes connexes, on obtient un graphe contenant k sous-graphes complets (un pour chaque composante connexe). Par exemple, la fermeture transitive du graphe prcdent est :

13

Notons quil existe un algorithme plus efcace pour dterminer les composantes connexes dun graphe non orient.

Cas des graphes orients. On retrouve ces diffrentes notions de connexits dans les graphes orients, en remplaant naturellement la notion de chaine par celle de chemin : on parle de graphe fortement connexe au lieu de connexe, de composante fortement connexe au lieu de composante connexe. Plus prcisment, un graphe orient est fortement connexe si chaque sommet est accessible partir de nimporte quel autre. Autrement dit, si pour tout couple de sommets distincts (si , sj ) S 2 , il existe un chemin de si vers sj , et un chemin de sj vers si . Par exemple, le graphe de gauche ci-dessous est fortement connexe, tandis que celui de droite ne lest pas :
a b a b

Une composante fortement connexe dun graphe orient G est un sous-graphe G de G qui est fortement connexe et maximal (cest dire quaucun autre sous-graphe fortement connexe de G ne contient G ). Par exemple, le graphe orient suivant
a b e f

contient 2 composantes fortements connexes : la premire est le sous-graphe dni par les sommets {a, b, c, d} et la seconde est le sous-graphe dni par les sommets {e, f, g }. Comme pour les graphes non orients, une faon (nave) de dterminer si un graphe orient est fortement connexe consiste calculer sa fermeture transitive : si la fermeture transitive du graphe est le graphe complet, alors il est fortement connexe. Notons quil existe un algorithme bien plus efcace pour dterminer les composantes fortement connexes dun graphe non orient.

4.4

Notion de graphe eulrien

Dans un graphe non orient, une chaine eulrienne est une chaine qui emprunte une et une seule fois chaque arte du graphe. De mme, un cycle eulrien est un cycle qui emprunte une et une seule fois chaque arte du graphe. Enn, un graphe comportant une chaine ou un cycle eulrien est appel graphe eulrien.

14

Thorme ( cycle eulrien) : Un graphe (simple ou multiple) connexe admet un cycle eulrien si et seulement sil na pas de sommet de degr impair. En effet, supposons quun graphe G = (V, E ) admette un cycle eulrien. Chaque fois que ce cycle passe par un sommet, il contribue pour 2 dans le degr de ce sommet. Par consquent, chaque sommet doit avoir un degr pair. Inversement, soit G un graphe connexe dont tous les sommets sont de degr pair. On montre, par induction sur le nombre dartes du graphe, que ce graphe admet un cycle eulrien. Partant dun sommet arbitraire a, on peut former de proche en proche un cycle lmentaire retournant sur a. En effet, chaque fois quon emprunte une arte, on la retire du graphe. Quand on aboutit en un sommet x = a, on peut toujours prolonger la chaine car x est de degr pair. Donc, la chaine rencontrera ncessairement le sommet initial a. Soit le cycle form ce moment l. En vertu de lhypothse dinduction, chaque composante connexe de sous-graphe GX admet un cycle eulrien, et avec le cycle ces cycles forment un cycle eulrien de G.

Thorme ( chaine eulrienne) : Un graphe (simple ou multiple) connexe admet une chaine eulrienne entre deux sommets u et v si et seulement si le degr de u et le degr de v sont impairs, et les degrs de tous les autres sommets du graphe sont pairs. On retrouve ces diffrentes notions sur les graphes orients : un chemin eulrien est un chemin qui emprunte une et une seule fois chaque arc du graphe. De mme, un circuit eulrien est un circuit qui emprunte une et une seule fois chaque arc du graphe. Lexistence dun circuit eulrien dpend alors des demi-degrs extrieurs et intrieurs des diffrents sommets : pour chaque sommet il doit y avoir autant darcs qui y arrivent que darcs qui en partent.

Thorme ( circuit eulrien) : Un multigraphe orient fortement connexe admet un circuit eulrien si et seulement si d+ (si ) = d (si ) pour tout sommet si S . Thorme ( chemin eulrienne) : Un multigraphe orient connexe admet un chemin eulrien de u vers v si et seulement si - d+ (u) = d (u) + 1 - d+ (v ) = d (v ) 1 - d+ (si ) = d (si ) pour tout autre sommet si S {u, v }

Exercice : On considre la disposition des ponts de la ville de Koenigsberg (ville quEuler visita lors dun voyage pour aller en Russie) suivante, o A et C sont deux les et B et D sont les berges :

B C

15

Un piton peut-il en se promenant traverser chacun des sept ponts de la ville une et une seule fois, et revenir au point de dpart ? Correction : On modlise ce problme sous la forme de la recherche dun cycle eulrien dans le multi-graphe non orient suivant :
A

Dans ce graphe, les degrs des sommets A, B, C et D sont respectivement 5, 3, 3 et 3. On a donc 4 sommets de degr impair, et il ny a pas de chaine eulrienne, et encore moins de cycle eulrien, dans ce graphe.

Exercice : Montrer que le graphe suivant est eulrien


a b

Correction : d (d) = 2, d (e) = d (c) = 4 et d (a) = d (b) = 3. Par consquent, ce graphe admet une chaine eulrienne entre a et b. En revanche, ce graphe nadmet pas de cycle eulrien.

4.5

Notion de graphe hamiltonien

Dans un graphe simple non orient comportant n sommets, une chaine hamiltonienne est une chaine lmentaire de longueur n 1. Autrement dit, une chaine hamiltonienne passe une et une seule fois par chacun des n sommets du graphe. On appelle cycle hamiltonien un cycle lmentaire de longueur n. Un graphe possdant un cycle ou une chaine hamiltonien sera dit graphe hamiltonien. Par exemple, le graphe suivant possde un cycle hamiltonien (< a, e, b, d, c, a >)
a b

En revanche, le graphe suivant ne possde pas de cycle hamiltonien, mais possde une chaine hamiltonienne (< a, b, e, d, c >). 16

a e d

On ne connait aucune condition ncessaire et sufsante dexistance de cycles (chaines, circuits ou chemins) hamiltoniens, valable pour tous les graphes. On peut juste donner des conditions sufsantes, portant en particulier sur les degrs dun graphe simple.

Remarque : de nombreux problmes en recherche oprationnelle consistent chercher un chemin ou un cycle hamiltonien dans un graphe. Le plus connu est probablement le problme du voyageur de commerce, qui doit trouver un itinraire optimal passant par chaque ville de son rseau commercial. On considre dans ce cas le graphe non orient valu reprsentant une carte routire : les sommets correspondent aux villes, les artes aux routes, et les valuations aux distances. Il sagit alors de trouver un cycle hamiltonien de valuation minimale. Ce problme est un des premiers avoir t montr comme tant NP-complet (ce qui implique que lon ne connait aucun algorithme efcace pour rsoudre ce problme).

Arbres et arborescences

Les arbres et les arborescences sont des graphes particuliers trs souvent utiliss en informatique pour reprsenter des donnes. Etant donn un graphe non orient comportant n sommets, les proprits suivantes sont quivalentes pour caractriser un arbre : 1. G est connexe et sans cycle, 2. G est sans cycle et possde n 1 artes, 3. G est connexe et admet n 1 artes, 4. G est sans cycle, et en ajoutant une arte, on cre un et un seul cycle lmentaire, 5. G est connexe, et en supprimant une arte quelconque, il nest plus connexe, 6. Il existe une chaine et une seule entre 2 sommets quelconques de G. Par exemple, le graphe suivant est un arbre :
a b e f

On appelle fort un graphe dont chaque composante connexe est un arbre.

Exercice : On considre le graphe non orient suivant :

17

Combien faut-il enlever dartes ce graphe pour le transformer en arbre ? Donnez un graphe partiel de ce graphe qui soit un arbre. Correction : le graphe comporte 7 sommets et 11 artes. Pour le transformer en arbre il faudra donc enlever 5 artes. Par exemple, les artes (f, g ), (b, g ), (b, c), (b, d) et (a, d). Une arborescence est un graphe orient sans circuit admettant une racine s0 S telle que, pour tout autre sommet si S , il existe un chemin unique allant de s0 vers si . Si larborescence comporte n sommets, alors elle comporte exactement n 1 arcs. Par exemple, le graphe suivant est une arborescence de racine a :
a b e f

Exercice : Lile du Nivou, en Camargue, se consacre la culture du riz. Sur cette ile se trouvent 9 champs entours de murs et disposs de la faon suivante :

2 3 1 4 7 8 Rhone

La culture du riz suppose que lon puisse priodiquement inonder lensemble des champs. Cela est ralis en ouvrant des vannes places dans les murs sparant les champs et le Rhne ou les champs entre eux. Etant donn que linstallation dune vanne est coteuse, il sagit de dterminer le nombre minimum de vannes et leur emplacement pour pouvoir, quand on le dsire, inonder tous les champs. Correction : Pour rsoudre ce problme, on peut considrer le graphe non orient comportant un sommet pour chaque intersection de mur, et une arte pour chaque mur :

18

2 7 3

1 4

5 6 9

En considrant que lorsquon place une vanne sur un mur, on supprime larte correspondante dans le graphe, le problme revient supprimer des artes jusqu ce que le graphe ne comporte plus de cycles (autrement dit, placer des vannes jusqu ce quil ny ait plus de champ entour de murs sans vanne). Comme on souhaite poser le moins de vannes possible, on cherche un graphe partiel sans cycle tel que si lon rajoute une arte on cre un cycle : selon la proposition 4, il sagit dun arbre. Ici, tant donn que le graphe a 12 sommets et 20 artes, larbre devra possder 12-1 = 11 artes (selon la proposition 2), et on devra donc installer 20-11=9 vannes. On obtiendra (par exemple) larbre suivant :

2 7 3

1 4

5 6 9

Autre modlisation possible : Pour rsoudre ce problme, on peut galement considrer le graphe non orient comportant un sommet pour chaque champ plus un sommet reprsentant le Rhne. Ce graphe comporte une arte entre deux sommets si les champs correspondants, ou le Rhne, sont voisins. On obtient alors le graphe suivant :

2 7 3

1 4

5 6 9

Rhone

19

En considrant que lorsquon place une vanne sur un mur sparant deux champs (ou une vanne sparant un champ du Rhne) on conserve larte joignant les deux sommets correspondant aux champs (ou au champ et au Rhne), le problme revient chercher un graphe partiel connexe (autrement dit, tous les champs doivent tre relis par un chemin de vannes au Rhne). Comme on souhaite poser le moins de vannes possible, il sagit de garder le moins dartes possible. On cherche donc un graphe partiel connexe tel que si lon supprime une arte de plus il ne soit plus connexe : selon la proposition 5, il sagit dun arbre. Ici, tant donn que le graphe possde 10 sommets, larbre devra comporter 10-1=9 artes (selon la proposition 3). L encore, on devra installer 9 vannes. On obtiendra (par exemple) larbre suivant :

2 7 3

1 4

5 6 9

Rhone

Cet exemple permet dintroduire (trs succintement) la notion de graphe dual dun graphe planaire, notion dveloppe dans la section suivante : les deux modlisations utilises pour rsoudre le problme de lile du Nivou sont duales. Lintrt de cette notion de dualit est de montrer qu tout graphe planaire on peut toujours associer un autre graphe reprsentant, dune faon diffrente, la mme chose. Le meilleur modle du problme tant le plus commode de ces deux graphes, on aura toujours intrt, lorsquun problme peut tre modlis par un graphe planaire, tudier si le graphe dual ne permet pas une formalisation plus simple du problme.

Graphes planaires

Trois chatelains voisins sont ennemis entre eux. Pour se mettre au got du jour, ils ont dcid dinstaller leau, le gaz et llectricit dans leurs chateaux respectifs. Naturellement, ils ne veulent pas que leurs ls et leurs canalisations se croisent ! Il sagit de trouver le moyen de relier chacun des chatelains aux compagnies deau, de gaz et dlectricit sans provoquer de disputes entre eux. On peut modliser ce problme par un graphe ayant les 6 sommets suivants : Chateau 1 x Chateau 2 x Chateau 3 x

x eau

x gaz

x electricite

Il sagit alors de dessiner pour chaque chateau 3 artes le reliant leau, au gaz et llectricit, sans que deux artes ne se croisent. Ce problme na en fait pas de solutions (mme en changeant la disposition des sommets). On dira que le graphe correspondant nest pas planaire. 20

De faon plus formelle, on appelle graphe planaire tout graphe non orient pouvant tre dessin sur un plan de telle sorte que les sommets soient des points distincts, et que les artes ne se rencontrent pas en dehors de leurs extrmits (les artes pouvant tre reprsentes par des courbes). Si on considre par exemple une carte de gographie, et si on associe un sommet chaque pays et une arte entre deux sommets si les pays correspondants ont une frontire commune (non rduite un seul point), alors on obtient un graphe planaire.

Exercice : On appelle Ki le graphe complet comportant i sommets. Parmi K2 , K3 , K4 et K5 , lesquels sont planaires ? Correction : K2 , K3 et K4 sont planaires ; en revanche K5 ne lest pas.

Exercice : Montrer que le graphe suivant est planaire :


a b

Correction : on peut le reprsenter de la faon suivante.


a c

Remarque : ladjectif planaire qualie un graphe, indpendemment de sa reprsentation graphique choisie. Autrement dit, un mme graphe peut tre dessin de diffrentes faons (comme dans lexercice prcdent). Certaines de ces reprsentations peuvent ne pas tre planaires, alors que dautres peuvent ltre. Il suft, pour un graphe donn, de trouver une reprsentation planaire pour en conclure que le graphe planaire.

Caractrisation des graphes planaires : Les deux graphes non planaires les plus simples sont K5 et K3,3 :
a b
a d

21

Thorme de Kuratowski : un graphe est planaire si et seulement sil ne possde aucun mineur isomorphe K5 ou K3,3 . (Un mineur dun graphe est obtenu par une succession doprations de suppression et de fusion de sommets). Autrement dit, tout graphe non planaire contient une copie dau moins un de ces deux graphes.

Faces dun graphe planaire : Etant donne une reprsentation planaire dun graphe G, le plan se retrouve divis en un certain nombre de rgions quon appelle les faces de la reprsentation planaire. Par exemple, le graphe suivant
1 B 2 5 D 6 7 C A

possde 4 faces (notes A, B, C et D). On dira que les artes (1, 2), (1, 4), (4, 3), (3, 2), (5, 6) et (5, 7) constituent des frontires entre des faces diffrentes, tandis que larte (5, 1) constitue un isthme.

Remarque : Le nombre de faces dun graphe planaire connexe est indpendant de la reprsentation planaire choisie.

Formule dEuler : Soit G un graphe planaire connexe possdant s sommets, a artes et f faces, on a f + s = a + 2.

Exercice : Vriez la formule dEuler dans le cas dun arbre. Correction : un arbre a une seule face, car il na pas de cycle. Par ailleurs, le nombre dartes dun arbre est gal au nombre de sommets - 1. La formule dEuler est donc bien vrie.

Exercice : Montrez, en utilisant la formule deuler que K5 nest pas planaire. Correction : en effet, K5 possde 10 artes et 5 sommets. Daprs la formule dEuler, si K5 est planaire, alors il a 10 5 + 2 = 7 faces. Or chaque face de K5 est borde par au moins 3 artes (car K5 ne possde ni boucle, ni arte multiple), et chaque arte borde au plus 2 faces (si cest une arte frontire, elle borde 2 faces, si cest un isthme, elle borde une seule face). Par consquent, le nombre de faces doit tre infrieur ou gal (2/3)*le nombre dartes, autrement dit f (2/3) 10 et on a une contradiction avec la formule dEuler qui nous dit quon doit avoir 7 faces.

Graphe Dual : On appelle dual dun graphe planaire appel primal le graphe obtenu de la faon suivante : 22

- dans toute face du primal on dessine un sommet du dual, - pour toute arte sparant deux faces du primal, on dessine une arte joignant les deux sommets correspondants du dual (et qui traverse larte correspondante du primal). Remarquons que cette relation est symtrique : si G2 est le dual de G1 , alors G1 est le dual de G2 . Exercice : Est-il possible de dessiner sans lever la main un lacet qui traverse chaque arte de ce graphe planaire une et une seule fois ?
a b c

Correction : On considre le graphe dual qui associe un sommet chaque face, et une arte chaque arte du primal de telle sorte quune arte dans le dual modlise le fait que lon a travers larte correspondante du graphe primal.

a 1 d 6 i j e

b 2 f 5 k g 4

Traverser lensemble des artes du graphe primal revient alors trouver une chaine qui passe une et une seule fois par chaque arte du dual, cest--dire, une chaine eulrienne. Etant donn quil y a 4 sommets de degr impair dans le graphe dual, il ne peut y avoir de chaine eulrienne, et le problme na pas de solution.

Coloriage de graphes, cliques et stables

Le problme du coloriage de graphes, pour un graphe non orient G, consiste attribuer une couleur chaque sommet, de telle sorte quune mme couleur ne soit pas attribue deux sommets adjacents (relis par une arte). Lorsque le graphe est planaire, ce problme peut sexprimer par rapport au graphe dual, en coloriant les faces, et non les sommets, et en imposant que deux faces voisines soient colories de couleurs diffrentes (il sagit du problme de coloriage dune carte). 23

Le nombre minimum de couleurs ncessaires pour colorier un graphe G est appel le nombre chromatique de G, et not X (G). Remarque : le problme du coloriage dun graphe avec un nombre limit de couleurs est un problme combinatoire (on dit quil sagit dun problme NP-complet). Cela signie que tout algorithme rsolvant ce problme de faon exacte pourra prendre un temps exponentiel par rapport au nombre de sommets du graphe (de lordre de 2n pour n sommets). Le problme de dterminer le nombre chromatique dun graphe est galement exponentiel, et est en fait encore plus difcile. Lalgorithme de Brlaz (galement appel DSATUR) est un algorithme glouton qui permet de calculer une borne maximale de X (G). Cet algorithme a une complexit polynomiale et procde de faon itrative. Plus prcisment, tant quil existe un sommet non colori, il choisit chaque itration le sommet non colori ayant le plus grand nombre de voisins coloris avec des couleurs diffrentes, les ex aequo tant dpartags en choisissant le sommet de plus fort degr. Le sommet choisi est alors colori par la plus petite couleur possible (en partant du principe que les couleurs sont tries selon un ordre donn) ; si toutes les couleurs existantes sont utilises par au moins un voisin du sommet colorier, alors une nouvelle couleur est ajoute lensemble des couleurs disponibles.

Exercice : Dterminez le nombre chromatique du graphe suivant :


a f e c b

Conjecture des 4 couleurs : 4.

Le nombre chromatique dun graphe planaire est infrieur ou gal

Cette conjecture a passionn de nombreux mathmaticiens, pendant plus dun sicle. Elle a t dmontre en 1976. Une application de cette conjecture est que lon peut colorier les pays dune carte gographique avec seulement 4 couleurs de telle sorte que deux pays voisins soient coloris avec des couleurs diffrentes.

Exercice : 5 tudiants (Dupont, Dupond, Durand, Duval et Duduche) doivent passer certains examens. Les examens que doivent passer chaque tudiant sont rcapituls dans le tableau suivant : Dupont Dupond Durand Duval Duduche Franais, Anglais, Mcanique Dessin, Couture Anglais, Solfge Dessin, Couture, Mcanique Dessin, Solfge

On dsire que tous les tudiants devant subir une mme preuve le fassent en mme temps. Chaque tudiant ne peut se prsenter qu une preuve au plus par jour. Quel est le nombre minimal de jours ncessaires lorganisation de toutes les preuves ? 24

Correction : On modlise ce problme par le graphe non orient G = (S, A) tel que S associe un sommet chaque preuve et A associe une arte entre deux sommets si un mme tudiant doit subir les preuves correspondantes. Il sagit alors de trouver le nombre chromatique du graphe, cest--dire 3.

Cliques : Etant donn un graphe non orient G = (S, A), une clique est un sous-ensemble de sommets S S qui sont tous connects 2 2 par des artes de sorte que (i, j ) S S , i = j (i, j ) A Dit autrement, une clique est un sous-graphe complet. Trouver une clique dordre k dans un graphe est galement un problme NP-complet, ce qui implique l encore que tout algorithme rsolvant ce problme de faon exacte aura une complexit exponentielle. Le problme de trouver la plus grande clique dun graphe est appel problme de la clique maximum, et est encore plus difcile...

Exercice : X (G).

Montrer que pour tout graphe G, lordre de la clique maximum est infrieur ou gal

Stables : Etant donn un graphe non orient G = (S, A), un stable est un sous-ensemble de sommets S S non connects par des artes de sorte que (i, j ) S S , i = j (i, j ) A Le problme de rechercher un stable dordre k dans un graphe G = (S, A) est quivalent au problme de rechercher une clique dordre k dans le graphe inverse G = (S, A ) tel que A contient une arte entre 2 sommets i et j ssi A ne contient pas darte entre ces 2 sommets.

Parcours de graphes

Beaucoup de problmes sur les graphes ncessitent que lon parcourt lensemble des sommets et des arcs/artes du graphe. On tudie dans la suite les deux principales stratgies dexploration : le parcours en largeur consiste explorer les sommets du graphe niveau par niveau, partir dun sommet donn ; le parcours en profondeur consiste, partir dun sommet donn, suivre un chemin le plus loin possible (jusqu un cul-de-sac ou un cycle), puis faire des retours en arrire pour reprendre tous les chemins ignors prcdemment. Dans les deux cas, lalgorithme procde par coloriage des sommets : Initialement, tous les sommets sont blancs. On dira quun sommet blanc na pas encore t dcouvert. Lorsquun sommet est dcouvert (autrement dit, quand on arrive pour la premire fois sur ce sommet), il est colori en gris. Le sommet reste gris tant quil reste des successeurs de ce sommet qui sont blancs (autrement dit, qui nont pas encore t dcouverts). Un sommet est colori en noir lorsque tous ses successeurs sont gris ou noirs (autrement dit, lorsquils ont tous t dcouverts). 25

De faon pratique, on va utiliser une liste dattente au coloriage en noir dans laquelle on va stocker tous les sommets gris : un sommet est mis dans la liste dattente ds quil est colori en gris. Un sommet gris dans la liste dattente peut faire rentrer dans la liste ses successeurs qui sont encore blancs (en les coloriant en gris). Quand tous les successeurs dun sommet gris de la liste dattente sont soit gris soit noirs, il est colori en noir et il sort de la liste dattente. La diffrence fondamentale entre le parcours en largeur et le parcours en profondeur provient de la faon de grer cette liste dattente au coloriage en noir : le parcours en largeur utilise une le dattente, o le premier sommet arriv dans la le est aussi le premier en sortir, tandis que le parcours en profondeur utilise une pile, o le dernier sommet arriv dans la pile est le premier en sortir.

8.1

Arborescence couvrante associe un parcours

On parcourt un graphe partir dun sommet donn s0 . Ce parcours va permettre de dcouvrir tous les sommets accessibles depuis s0 , cest dire tous les sommets pour lesquels il existe un chemin depuis s0 . En mme temps que lon effectue ce parcours, on construit larborescence de dcouverte des sommets accessibles depuis s0 , appele arborescence couvrante de s0 . Cette arborescence contient un arc (si , sj ) si et seulement si le sommet sj a t dcouvert partir du sommet si (autrement dit, si cest le sommet si qui a fait entrer sj dans la le dattente). Ce graphe est effectivement une arborescence, dans la mesure o chaque sommet a au plus un prdcesseur, partir duquel il a t dcouvert. La racine de cette arborescence est s0 , le sommet partir duquel on a commenc le parcours. Larborescence associe un parcours de graphe sera mmorise dans un tableau tel que [sj ] = si si sj a t dcouvert partir de si , et [sk ] = nil si sk est la racine, ou sil nexiste pas de chemin de la racine vers sk .

8.2

Parcours en largeur (Breadth First Search = BFS)

Le parcours en largeur est obtenu en grant la liste dattente au coloriage comme une le dattente (FIFO = First In First Out). Autrement dit, on enlve chaque fois le plus vieux sommet gris dans la le dattente, et on introduit tous les successeurs blancs de ce sommet dans la le dattente, en les coloriant en gris.

Structures de donnes utilises : On utilise une le F , pour laquelle on suppose dnies les oprations init_le(F) qui initialise la le F vide, ajoute_n_le(F,s) qui ajoute le sommet s la n de la le F , est_vide(F) qui retourne vrai si la le F est vide et faux sinon, et enleve_debut_le(F,s) qui enlve le sommet s au dbut de la le F . On utilise un tableau qui associe chaque sommet le sommet qui la fait entrer dans la le, et un tableau couleur qui associe chaque sommet sa couleur (blanc, gris ou noir). On va en plus utiliser un tableau d qui associe chaque sommet son niveau de profondeur par rapport au sommet de dpart s0 (autrement dit, d[si ] est la longueur du chemin dans larborescence de la racine s0 jusque si ). Ce tableau sera utilis plus tard, cf. 7.3. Algorithme de parcours en largeur (BFS)(S, A, s0 ) init_le(F ) 26

pour tout sommet si S faire [si ] nil d[si ] couleur[si ] blanc fin pour d[s0 ] 0 ajoute_n_le(F, s0 ) couleur[s0 ] gris tant que est_vide(F ) = faux faire enleve_debut_le(F, si ) pour tout sj succ(si ) faire si couleur[sj ] = blanc alors ajoute_n_le(F, sj ) couleur[sj ] gris [sj ] si d[sj ] d[si ] + 1 finsi fin pour couleur[si ] noir fin tant fin BFS

Complexit : Chaque sommet (accessible depuis s0 ) est mis, puis enlev, une fois dans la le. A chaque fois quon enlve un sommet de la le, on parcourt tous ses successeurs, de telle sorte que chaque arc (ou arte) du graphe sera utilis une fois dans lalgorithme. Par consquent, si le graphe contient n sommets (accessibles partir de s0 ) et p arcs/artes, alors BFS sera en - O(n2 ) dans le cas dune implmentation par matrice dadjacence, - O(n + p) dans le cas dune implmentation par listes dadjacence.

8.3

Applications du parcours en largeur

Le parcours en largeur peut tre utilis pour rechercher lensemble des sommets accessibles depuis s0 . A la n de lexcution de BF S (S, A, s0 ), chaque sommet est soit noir soit blanc. Les sommets noirs sont ceux accessibles depuis s0 ; les sommets blancs sont ceux pour lesquels il nexiste pas de chemin/chaine partir de s0 . Dune faon plus gnrale, le parcours en largeur permet de dterminer les composantes connexes dun graphe non orient. Pour cela, il suft dappliquer lalgorithme de parcours en largeur partir dun sommet blanc quelconque. A la suite de quoi, tous les sommets en noirs appartiennent la premire composante connexe. Sil reste des sommets blancs, cela implique quil y a dautres composantes connexes. Il faut alors relancer le parcours en largeur sur le sous-graphe induit par les sommets blancs, pour dcouvrir une autre composante connexe. Le nombre de fois o lalgorithme de parcours en largeur a t lanc correspond au nombre de composantes connexes. Le parcours en largeur peut aussi tre utilis pour chercher le plus court chemin (en nombre darcs ou artes) entre la racine s0 et chacun des autres sommets du graphe accessibles depuis s0 . Pour cela, il suft de remonter dans larborescence du sommet concern jusqu la racine s0 . Lalgorithme (rcursif) est le suivant : Algorithme plus_court_chemin(s0 , sj , ) 27

/* afche le plus court chemin pour aller de s0 a sj */ si s0 = sj alors afcher(s0 ) sinon si [sj ] = nil alors afcher(pas de chemin) sinon plus_court_chemin(s0 , [sj ], ) afcher(sj ) finsi fin plus court chemin

8.4

Parcours en profondeur (Depth First Search = DFS)

Le parcours en profondeur est obtenu en grant la liste dattente au coloriage en noir comme une pile (LIFO = Last In First Out). Autrement dit, on considre chaque fois le dernier sommet gris entr dans la pile, et on introduit devant lui tous ses successeurs blancs.

Structures de donnes utilises : On utilise une pile P , pour laquelle on suppose dnies les oprations init_pile(P) qui initialise la pile P vide, empile(P,s) qui ajoute s au sommet de la pile P , est_vide(P) qui retourne vrai si la pile P est vide et faux sinon, sommet(P) qui retourne le sommet s au sommet de la pile P , et depile(P,s) qui enlve s du sommet de la pile P . On utilise, comme pour le parcours en largeur, un tableau qui associe chaque sommet le sommet qui la fait entrer dans la pile, et un tableau couleur qui associe chaque sommet sa couleur (blanc, gris ou noir). On va en plus mmoriser pour chaque sommet si : - dec[si ] = date de dcouverte de si (passage en gris) - f in[si ] = date de n de traitement de si (passage en noir) o lunit de temps est une itration. La date courante est mmorise dans la variable tps.

Algorithme de parcours en profondeur des sommets accessibles depuis s0 DFS init_pile(P ) pour tout sommet si S faire [si ] nil couleur[si ] blanc fin pour tps 0 dec[s0 ] tps empile(P, s0 ) couleur[s0 ] gris tant que est_vide(P ) = faux faire tps tps + 1 si sommet (P ) si sj succ(si ) tel que couleur[sj ]=blanc alors empile(P, sj ) couleur[sj ] gris [sj ] si dec[sj ] tps sinon /* tous les successeurs de si sont gris ou noirs */ depile(P, si ) couleur[si ] noir 28

f in[si ] tps finsi fin tant fin DFS

Complexit : Chaque sommet (accessible depuis s0 ) est mis, puis enlev, une fois dans la pile, comme dans BFS. Par consquent, si le graphe contient n sommets (accessibles partir de s0 ) et p arcs/artes, alors DFS sera en - O(n2 ) dans le cas dune implmentation par matrice dadjacence, - O(n + p) dans le cas dune implmentation par listes dadjacence. Cet algorithme peut scrire rcursivement sans utiliser de pile explicite de la faon suivante :

Algorithme rcursif de parcours en profondeur des sommets accessibles depu DFSrec(S, A, s0 ) dec[s0 ] tps tps tps + 1 couleur[s0 ] gris pour tout sj succ(s0 ) faire si couleur[sj ]=blanc alors [sj ] s0 DFSrec(S, A, sj ) finsi finfaire couleur[s0 ] noir f in[s0 ] tps tps tps + 1 fin DFSrec Dans ce cas, les structures de donnes , couleur, dec et tps sont des variables globales et il est ncessaire de les initialiser auparavant. Algorithme dinitialisation avant lappel de DFSrec initDFSrec(S, A) pour tout sommet si S faire [si ] nil couleur[si ] blanc fin pour tps 0 fin La complexit de cet algorithme est la mme que sa version itrative.

8.5

Applications du parcours en profondeur

Recherche des composantes connexes Pour rechercher les composantes connexes dun graphe non orient, on peut procder comme avec le parcours en largeur, cest--dire appeler itrativement DFSrec partir de sommets blancs, jusqu ce que tous les sommets soient noirs ; le nombre dappels DFSrec correspond au nombre de composantes connexes : Algorithme global de parcours en profondeur DFSglobal(S, A) 29

initDFSrec(S, A) tant que si S tel que couleur[si ] = blanc faire /* si appartient une nouvelle composante connexe */ DFSrec(S, A, si ) fin tant fin DFSglobal

Recherche de circuits Lors du parcours en profondeur dun graphe non orient (resp. orient), si un successeur sj du sommet courant si au sommet de la pile est dja gris, cela implique quil existe une chaine (resp. un chemin) permettant daller de sj vers si , et donc quil existe un cycle (resp. un circuit). Ainsi, un algorithme pour dtecter les cycles/circuits dun graphe peut tre obtenu en rajoutant dans lalgorithme DFSrec linstruction si couleur[sj ]=gris alors afcher(existence dun cycle) juste aprs la boucle pour tout sj succ(s0 ) faire. De la mme faon, le parcours en profondeur permet de dcouvrir si un graphe possde plusieurs chemins lmentaires entre deux sommets. En effet, si lors du parcours en profondeur, un successeur sj du sommet courant si au sommet de la pile est dja noir, cela implique quil existe dj un chemin permettant daller dun anctre de si vers sj .

Tri topologique des sommets dun graphe orient Le tri topologique dun graphe orient sans circuit G = (S, A) consiste ordonner linairement tous ses sommets de telle sorte que si larc (u, v ) A, alors u apparaisse avant v . (Si le graphe comporte des circuits, aucun ordre linaire nest possible.) Le tri topologique dun graphe peut tre vu comme un alignement de ses sommets le long dune ligne horizontale de telle sorte que tous les arcs du graphe soient orients de gauche droite.

Thorme : f in[si ].

aprs lexcution de DFSglobal(S, A), pour tout arc (si , sj ) A, on a f in[sj ] <

En effet, lappel de DFSrec(S, A, si ), - si sj est noir alors f in[sj ] < tps < f in[si ] - si sj est blanc alors dec[si ] = tps < dec[sj ] < f in[sj ] < f in[si ] - sj ne peut pas tre gris car a impliquerait lexistence dun circuit. Par consquent, pour obtenir un tri topologique des sommets dun graphe, il suft dexcuter DFSglobal, puis de trier les sommets par ordre de valeur de f in dcroissante. Dune faon plus gnrale, les graphes orients sans circuit sont utiliss dans de nombreuses applications pour reprsenter des prcdences entre vnements : les sommets reprsentent les vnements, et les arcs les relations de prcdence. Dans ce cas, un tri topologique permet de trier les vnements de telle sorte quun vnement napparait quaprs tous les vnements qui doivent le prcder. Le problme gnral de la planication sera tudi plus en dtail au chapitre 5.

30

Recherche des composantes fortement connexes dun graphe orient Un algorithme pour rechercher les composantes fortement connexes dun graphe orient est donn ci-dessous. Une preuve de la correction de cet algorithme pourra tre trouve dans louvrage Introduction lalgorithmique rfrenc au chapitre 12. Algorithme de recherche des composantes fortement connexes(S, A) DFSglobal(S, A) inverser les sens de tous les arcs du graphe trier les sommets par ordre de numro de n dcroissant dans un tableau t initDFSrec(S,A) nbcf c 0 tant que si S tel que couleur[si ] = blanc faire soit sj le prochain sommet blanc dans le tableau t DFSrec(S, A, sj ) nbcf c nbcf c + 1 fin tant fin

Complexit : cet algorithme a la mme complexit quun parcours en profondeur, pour peu que lon trie les sommets par ordre de numro de n dcroissant au fur et mesure du parcours en profondeur (autrement dit, chaque fois que lon affecte un numro de n un sommet, on linsre au sommet dune liste).

Plus courts chemins

Un automobiliste souhaite trouver le plus court chemin possible (en nombre de kilomtres) pour aller de Strasbourg Bordeaux. Etant donne une carte routire de France, avec les distances de chaque portion de route, comment peut-il dterminer la route la plus courte ? Un parcours en largeur du graphe associ la carte de France ne permettra pas de rsoudre ce problme : il permettra de trouver litinraire comportant le moins dtapes (traversant le moins de sommets), mais cet itinraire nest pas ncessairement le plus court en nombre de kilomtres. Une possibilit consiste numrer tous les chemins entre Strasbourg et Bordeaux, additionner les distances pour chacun deux, et choisir le plus court. Cependant, on saperoit rapidement que, mme en nautorisant pas les chemins qui contiennent des circuits, il existe des milliers de possibilits, dont la plupart ne valent mme pas la peine dtre considres. On sintresse maintenant la rsolution de ce type de problme. On considre des graphes orients valus, tels quune valeur est associe chaque arc, et lon cherche le plus court chemin entre deux sommets du graphe. Cela permettra de rsoudre des problmes comme la recherche dun itinraire en train cotant le moins cher, ou encore tant le plus rapide.

9.1

Dnitions

Soit G = (S, A) un 1-graphe orient valu tel que la fonction cout : A R associe chaque arc (si , sj ) de A un cot rel cout(si , sj ). 31

Le cot dun chemin p =< s0 , s1 , s2 , . . . , sk > est gal la somme des cots des arcs composant le chemin, cest dire,
k

cout(p) =
i=1

cout(si1 , si )

Le cot dun chemin sera aussi appel poid du chemin. Le cot (ou poid) dun plus court chemin entre deux sommets si et sj est not (si , sj ) et est dni par (si , sj ) = + si de chemin entre si et sj (si , sj ) = min{cout(p)/p = chemin de si a sj } sinon Considrons par exemple le graphe valu orient suivant :
6 b 3 4 a 5 e 3 6 d 2 1 2 7 c

on a (a, b) = 3, (a, e) = 5, (a, c) = 9 et (a, d) = 11.

Conditions dexistence dun plus court chemin : sil existe un chemin entre deux sommets u et v contenant un circuit de cot ngatif, alors (u, v ) = , et il nexiste pas de plus court chemin entre u et v . Un circuit ngatif est appel un circuit absorbant. Considrons par exemple le graphe orient valu suivant :
a 3 s 5 2 3 e f 6 c 4 6 3 d 8 7 g b 4

Le chemin < s, e, f, e, f, g > contient le circuit < e, f, e > de cot ngatif 3. Autrement dit, chaque fois que lon passe dans ce circuit, on diminue de 3 le cot total du chemin. Par consquent, (s, g ) = et il nexiste pas de plus court chemin entre s et g .

Dnition du problme des plus courts chemins origine unique : Etant donn un graphe orient G = (S, A), une fonction cout : A R et un sommet origine s0 S , on souhaite calculer 32

pour chaque sommet sj S le cot (s0 , sj ) du plus court chemin de s0 sj . On supposera que le graphe G ne comporte pas de circuit absorbant. Variantes du problme : Si lon souhaite calculer le plus court chemin allant dun sommet s0 vers un autre sommet si (la destination est unique), on pourra utiliser la rsolution du problme prcdant (qui calcule tous les plus courts chemins partant de s0 ). On pourra aussi utiliser lalgorithme A* qui est gnralement plus efcace ds lors que lon dispose dune borne minimale de la longueur dun plus court chemin entre deux points (par exemple, la distance euclidienne). Si lon souhaite calculer tous les plus courts chemins entre tous les couples de sommets possibles, on pourrait aussi utiliser la rsolution du problme prcdent, mais dans ce cas, on nobtiendrait pas un algorithme optimal. Il faudra utiliser dans ce cas un algorithme spcique ce problme, par exemple, lalgorithme de Floyd-Warshall.

Arborescence des plus courts chemins : On va en fait calculer non seulement les cots des plus courts chemins, mais aussi les sommets prsents sur ces plus courts chemins. La reprsentation utilise pour reprsenter ces plus courts chemins est la mme que celle utilise pour les arborescences couvrantes calcules lors dun parcours en largeur ou en profondeur dun graphe. Cette arborescence est mmorise dans un tableau tel que - [s0 ] = nil, - [sj ] = si si si sj est un arc de larborescence. Pour connaitre le plus court chemin entre s0 et un sommet sk donn, il faudra alors remonter de sk jusque s0 en utilisant (cf lalgorithme dafchage du plus court chemin trouv par le parcours en largeur au chapitre 7). Remarque : (s0 , si ) = (s0 , [si ]) + cout( [si ], si ). Considrons par exemple le graphe valu orient suivant :
6 b 3 4 a 5 e 3 6 d 2 1 2 7 c

Ce graphe possde plusieurs arborescences des plus courts chemins dont lorigine est a, par exemple
6 b 3 a 5 e 6 d e d a c 3 2 4 2 b c

33

La premire de ces 2 arborescences est reprsente par le tableau tel que [a] = nil, [b] = a, [c] = b, [d] = e et [e] = a. On va maintenant tudier 2 algorithmes qui permettent de rsoudre des problmes de recherche de plus courts chemins origine unique : - lalgorithme de Dijkstra rsoud ce problme lorsque tous les cots sont positifs ou nuls, - lalgorithme de Ford-Bellman rsoud ce problme lorsque les cots sont positifs, nuls ou ngatifs, sous rserve quil ny ait pas de circuit absorbant (de cot ngatif). Les deux algorithmes procdent de la mme faon, selon une stratgie dite gloutonne. Lide est dassocier chaque sommet si S une valeur d[si ] qui reprsente une borne maximale du cot du plus court chemin entre s0 et si (cest--dire (s0 , si )). Ainsi, au dpart, - d[s0 ] = 0 = (s0 , s0 ), et - d[si ] = + (s0 , si ) pour tout sommet si = s0 . Lalgorithme diminue alors progressivement les valeurs d[si ] associes aux diffrents sommets, jusqu ce quon ne puisse plus les diminuer, autrement dit, jusqu ce que d[si ] = (s0 , si ). Pour diminuer les valeurs de d, on va itrativement examiner chaque arc si sj du graphe, et regarder si on ne peut pas amliorer la valeur de d[sj ] en passant par si . Cette opration de diminution est appele relchement de larc si sj , et scrit : proc relacher(si , sj ) si d[sj ] > d[si ] + cout(si , sj ) alors /* il vaut mieux passer par si pour aller sj */ d[sj ] d[si ] + cout(si , sj ) [sj ] si finsi fin relacher Les algorithmes de Dijkstra et Bellman-Ford procdent tous les deux par relchements successifs darcs. La diffrence entre les deux est que dans lalgorithme de Dijkstra, chaque arc est relch une et une seule fois, tandis que dans lalgorithme de Bellman-Ford, chaque arc peut tre relch plusieurs fois.

9.2

Algorithme de Dijkstra

Ide : On maintient 2 ensembles disjoints E et F tels que E F = S . Lensemble E contient chaque sommet si pour lequel on connait un plus court chemin depuis s0 (cest--dire pour lequel d[si ] = (s0 , si )). Lensemble F contient tous les autres sommets. A chaque itration de lalgorithme, on choisit le sommet si dans F pour lequel la valeur d[si ] est minimale, on le rajoute dans E , et on relche tous les arcs partant de ce sommet si . fonc Dijkstra(G = (S, A), cout : A R+ , s0 S ) retourne une arborescence des plus courts chemins dorigine s0 pour chaque sommet si S faire d[si ] + [si ] nil fin pour d[s0 ] 0 E 34

F S tant que F = faire soit si le sommet de F tel que d[si ] soit minimal /* d[si ] = (s0 , si ) */ F F { si } E E { si } pour tout sommet sj succ(si ) faire : relacher(si , sj ) fin tant retourner( ) fin Dijkstra

Correction de lalgorithme de Dijkstra : On peut se convaincre de la correction de lalgorithme de Dijkstra en montrant qu chaque fois quun sommet si entre dans lensemble E , on a d[si ] = (s0 , si ). En effet, le premier sommet entrer dans lensemble E est s0 , pour lequel d[s0 ] = 0 = (s0 , s0 ). A chaque itration, on fait entrer dans E un sommet si F tel que d[si ] soit minimal. Lide est que, dans ce cas, sil existe un autre chemin allant de s0 jusque si , alors il passera ncessairement par un sommet sj F tel que d[sj ] > d[si ] (puisque d[si ] est minimal).

sj s0 F E

si

Sachant que la n de ce chemin (de sj par si ) ne peut faire quaugmenter la distance du chemin, cet autre chemin sera forcment plus long. Par consquent, on ne pourra pas trouver de chemin plus court pour aller de s0 si , et on peut faire entrer si dans E , et relcher tous les arcs qui partent de si .

Complexit : La complexit de cet algorithme dpend de limplmentation du graphe (par matrice ou par liste dadjacence), mais aussi de la faon de grer lensemble F . On suppose que le graphe possde n sommets et p arcs. Si on utilise une matrice dadjacence, lalgorithme sera en O(n2 ). En revanche, si on utilise une liste dadjacence, alors : Si F est implment par une liste linaire, ou un tableau, il faudra chercher, chaque itration, le sommet dans F ayant la plus petite valeur de d. Etant donn quil y a n itrations, et quau premier passage F contient n lments, et qu chaque passage suivant F contient un lment de moins, il faudra au total faire de lordre de n + (n 1) + (n 2) + . . . + 2 + 1 oprations, soit O(n2 ). En revanche, chaque arc tant relach une seule fois, les oprations de relachement prendront de lordre de p oprations. Au total on aura donc une complexit en O(n2 ). Pour amliorer les performances de lalgorithme, il faut trouver une structure de donnes permettant de trouver plus rapidement la plus petite valeur dans lensemble F . Pour cela, on peut utiliser un tas binaire : un tas binaire permet de trouver le plus petit lment dun ensemble en 35

temps constant (immdiatement). En revanche, lajout, la suppression ou la modication dun lment dans un tas binaire comportant n lments prendra de lordre de log2 (n) oprations. Par consquent, si on implmente F avec un tas binaire, on obtient une complexit pour Dijkstra en O(p log (n)).

Exercice : On considre un rseau de tlcommunication, compos dmetteurs/rcepteurs pouvant senvoyer des messages, avec une certaine abilit de communication, cest dire une certaine probabilit pour que la communication ne soit pas interrompue. On modlise ce problme laide du graphe orient et valu suivant, o la valuation dun arc est une valeur relle comprise entre 0 et 1 et indiquant la probabilit pour que la communication se passe sans problme.
a 0.6 0.8 b 0.7 1 e 0.8 h 0.4 c 0.9 0.7 f 0.4

d 0.5

0.9

0.3 0.9 0.5

0.8 0.7

Quel est le chemin le plus able pour envoyer un message de a vers i ? Correction : on cherche le chemin pour lequel le produit des probabilits soit maximal. Pour cela, on peut adapter lalgorithme de Dijkstra de la faon suivante : pour chaque sommet si S faire d[si ] 0 [si ] nil fin pour d[a] 1 F S tant que F = faire soit si F le sommet tel que d[si ] soit maximal F F { si } pour tout sommet sj succ(si ) faire : si d[sj ] < d[si ] cout(si , sj ) alors d[sj ] d[si ] cout(si , sj ) [sj ] [si ] finsi fin pour fin tant Attention : cet algorithme ne marche que si les poids des arcs sont tous compris entre 0 et 1 de telle sorte qu chaque fois quon ajoute un arc un chemin, on diminue le cot total du chemin (pour la mme raison que Dijkstra ne marche que pour des cots positifs).

36

9.3

Algorithme de Bellman-Ford

Lalgorithme de Dijkstra ne marche pas toujours quand le graphe contient des arcs dont les cots sont ngatifs. Considrons par exemple le graphe suivant :
b 1 a 1 1 c e 1 f 4 4 d

Pour aller de a f , lalgorithme de Dijkstra va trouver le chemin < a, c, e, f >, de poids 3, alors que le chemin < a, b, d, e, f > est de poids 2. Lalgorithme de Bellman-Ford permet de trouver les plus courts chemins origine unique dans le cas o le graphe contient des arcs dont le cot est ngatif, sous rserve que le graphe ne contienne pas de circuit absorbant (dans ce cas, lagorithme de Bellman-Ford va dtecter lexistance de circuits absorbants). Lalgorithme de Bellman-Ford fonctionne selon le mme principe que celui de Dijkstra : on associe chaque sommet si une valeur d[si ] qui reprsente une borne maximale du cot du plus court chemin entre s0 et si . Lalgorithme diminue alors progressivement les valeurs d[si ] en relchant les arcs. Contrairement Dijkstra, chaque arc va tre relch plusieurs fois : on relche une premire fois tous les arcs ; aprs quoi, tous les plus courts chemins de longueur 1, partant de s0 , auront t trouvs. On relche alors une deuxime fois tous les arcs ; aprs quoi tous les plus courts chemins de longueur 2, partant de s0 , auront t trouvs... et ainsi de suite... Aprs la kime srie de relchement des arcs, tous les plus courts chemins de longueur k , partant de s0 , auront t trouvs. Etant donn que le graphe ne comporte pas de circuit absorbant, un plus court chemin est ncessairement lmentaire. Par consquent, si le graphe comporte n sommets, et sil ne contient pas de circuit absorbant, un plus court chemin sera de longueur infrieure n et au bout de n 1 passages, on aura trouv tous les plus courts chemins partant de s0 . (Si le graphe contient un circuit absorbant, au bout de n 1 passages, on aura encore au moins un arc (si , sj ) pour lequel un relachement permettrait de diminuer la valeur de d[sj ]. Lalgorithme utilise cette proprit pour dtecter la prsence de circuits absorbants.) fonc Bellman-Ford(G = (S, A), cout : S R, s0 S ) retourne une arborescence des plus courts chemins dorigine s0 pour chaque sommet si S faire d[si ] + [si ] nil fin pour d[s0 ] 0 pour k variant de 1 a | S | 1 faire pour chaque arc (si , sj ) A faire relacher(si , sj ) fin pour fin pour pour chaque arc (si , sj ) A faire si d[sj ] > d[si ] + cout(si , sj ) alors afcher(circuit absorbant) finsi fin pour retourner( ) 37

fin Bellman-ford

Complexit : si le graphe comporte n sommets et p arcs, chaque arc sera relch n 1 fois, et on effectuera donc au total (n 1)p relchements successifs. Si le graphe est reprsent par des matrices dadjacence, on aura une complexit en O(n3 ), alors que sil est reprsent par des listes dadjacence, on aura une complexit en O(np).

Remarque : En pratique, on pourra arrter lalgorithme ds lors quaucune valeur de d na t modie pendant une itration complte. On pourra aussi mmoriser chaque itration lensemble des sommets pour lesquels la valeur de d a chang, an de ne relcher lors de litration suivante que les arcs partant de ces sommets.

Exercice : Peut-on modier lalgorithme de Bellman-Ford pour quil trouve les plus longs chemins partir dun sommet donn ? Correction : oui, sous rserve que le graphe ne contienne pas de circuit absorbant de poids positif. On peut par exemple inverser les valuations des arcs cout(si , sj ) cout(si , sj ) pour tout arc (si , sj ), puis appliquer Bellman-Ford tel quel. On peut aussi modier lgrement lalgorithme, en remplaant les initialisations de valeurs de d[si ] de + , et en remplaant le test d[sj ] > d[si ] + cout(si , sj ) par d[sj ] < d[si ] + cout(si , sj ). Attention, on ne peut pas faire la mme chose pour lalgorithme de Dijkstra.

Exercice : En lan de grce 1479, le sire Gwendal, paludier Gurande, dsire aller vendre sa rcolte de sel lune des grandes foires du Duch. Il connat les gains quil pourra raliser dans chacune des foires, mais ceux-ci seront diminus des octrois quil devra acquitter le long du chemin emprunt pour sy rendre. A quelle foire, et par quel chemin le paludier doit-il se rendre de faon raliser le plus grand bnce possible ? Tableau des gains en cus dans les diffrentes foires : Foires Gains Rennes 550 Loudac 580 Pontivy 590 Lorient 600 9 5 10 20 Rennes 4 Loudac 5 Pontivy 20 Lorient 7

Tableau des octrois en cus dans les diffrentes villes : Villes 1 2 3 4 5 6 7 8 Octrois 10 12 15 5 15 10 3 10

Graphe des chemins possibles de Gurande aux diffrentes foires :


1 4 7 Rennes

Gurande

Loudac

Pontivy

10

Lorient

38

Correction : On peut chercher le plus long chemin de Gurande Fin dans le graphe suivant :
1 10 12 Gurande 15 3 2 15 15 10 5 20 10 6 20 10 7 Lorient 5 5 4 3 10 8 7 4 4 5 20 590 9 20 20 Pontivy 600 Loudac Rennes 550

580 Fin

Remarque : Dans cet exercice, le graphe ne contient pas de circuit. Comment peut-on utiliser cette proprit pour amliorer lalgorithme de Bellman-Ford. Correction : on peut rsoudre ce problme en ne relchant chaque arc quune seule fois. Lide est de ne relcher un arc (si , sj ) que si tous les arcs arrivant si ont dj t relchs. Pour cela, il suft de trier topologiquement les sommets du graphe (en utilisant un parcours en profondeur dabord par exemple, cf chapitre 7), puis de considrer chaque sommet dans lordre ainsi dni et relcher chaque fois tous les arcs partant de ce sommet. Cet algorithme sera utilis au chapitre 11 pour calculer des plus longs chemins dans un problme de planication.

9.4

Synthse

En rsum, en fonction des caractristiques du problme rsoudre il faudra choisir le bon algorithme : Si le graphe ne comporte pas de circuit alors, que lon recherche un plus court chemin ou un plus long chemin, il suft de trier les sommets topologiquement avec un parcours en profondeur dabord, puis de considrer chaque sommet dans lordre ainsi dni et relcher chaque fois tous les arcs partant de ce sommet ; Si le graphe comporte des circuits, alors Si la fonction cot est telle que tout sous chemin dun chemin optimal est galement optimal, alors on pourra appliquer Dijkstra ; Sinon, on appliquera Bellman-Ford, et on vriera en mme temps que le graphe ne comporte pas de circuits absorbants ;

10

Arbres couvrants minimaux (ACM)

Vous tes chargs de linstallation du cble dans la rgion Rhne-Alpes. Vous disposez pour cela dune carte de lensemble du rseau routier (le cble est gnralement dispos le long des routes). On vous demande de dnir le rseau cbl de telle sorte que la longueur totale de cble soit minimale et quun certain nombre de lieux soient desservis. On peut modliser ce problme de cblage laide dun graphe non orient connexe G = (S, A), o S associe un sommet chaque lieu devant tre desservi, et A contient une arte pour chaque

39

portion de route entre 2 lieux. Ce graphe est valu par une fonction cot qui spcie pour chaque arte (si , sj ) la longueur de cble ncessaire pour connecter si sj . Il sagit alors de trouver un sous-graphe connexe et sans cycle de ce graphe (autrement dit, un arbre) qui recouvre lensemble des sommets du graphe. Ce graphe est appel arbre couvrant. On cherche minimiser le poids total des artes de larbre. On dira quon cherche larbre couvrant minimal, abrg par ACM. De faon plus formelle, un ACM dun graphe G = (S, A) est un graphe partiel G = (S, A ) de G tel que G est connexe et sans cycle (G est un arbre), et la somme des cots des artes de A est minimale. Remarque : il peut exister plusieurs ACM, de mme cot, associs un mme graphe. Par exemple, le graphe
a 1 4 4 b 1 c d

possde les 2 ACMs suivants :


4 a 1 4 b 1 c d 1 a b 1

Pour construire un ACM, on adopte une stratgie locale gloutonne qui consiste slectionner, de pas en pas, une arte devant faire partie de lACM. A chaque fois, on choisira larte la meilleure selon un certain critre. Il existe deux algorithmes diffrents suivant une telle stratgie gloutonne et permettant de calculer un ACM partir dun graphe : lalgorithme de Kruskal et lalgorithme de Prim. Ces deux algorithmes ont des complexits quivalentes. On tudiera ici lalgorithme de Kruskal.

Principe de lalgorithme de Kruskal : On commence par trier lensemble des artes du graphe par ordre de cot croissant. On va slectionner de proche en proche les artes devant faire partie de lACM. Au dbut, cet ensemble est vide. On considre ensuite chacune des artes du graphe selon lordre que lon vient dtablir (de larte de plus faible cot jusqu larte de plus fort cot). A chaque fois, si larte que lon est en train de considrer peut tre ajoute lensemble des artes dj slectionnes pour lACM sans gnrer de cycle, alors on la slectionne, sinon on labandonne. Considrons par exemple le graphe suivant :
b 4 a 8 h 11 7 1 i 6 g 2 f 8 2 4 14 10 c 7 d 9 e

40

On trie les artes du graphe. On obtient lordre suivant : hg < ic = gf < ab = cf < ig < hi = cd < bc = ah < de < fe < bh < df On ajoute alors successivement dans lACM les artes : hg, ic, gf, ab, cf, cd, bc, de

Mise en uvre : la difcult majeure pour implmenter lalgorithme de Kruskal rside dans la faon de dterminer si larte en cours dexamen doit ou non tre slectionne. Il sagit de savoir si, en rajoutant larte (si , sj ), on cre un cycle ou non, autrement dit, il sagit de savoir sil existe dj une chaine entre si et sj . An de pouvoir rpondre cette question, on va partitionner lensemble des sommets du graphe en composantes connexes. Pour savoir si on peut slectionner une arte (si , sj ), il sufra de vrier que si et sj appartiennent deux composantes connexes diffrentes. A chaque fois quon slectionnera une arte (si , sj ), on fusionnera les deux composantes connexes correspondantes en une seule.

Reprsentation dune composante connexe : chaque composante connexe tant un arbre, on choisit de reprsenter les diffrentes composantes connexes par un vecteur de telle sorte que si [si ] = nil alors si est la racine dun arbre, et si [si ] = sj , alors si est un prdcesseur de sj dans larbre. Ainsi, pour savoir si deux sommets si et sj appartiennent la mme composante connexe, il sufra de remonter dans le vecteur de si jusqu la racine ri de larbre contenant si , puis de sj jusqu la racine rj de larbre contenant si , et enn de comparer ri et rj : si ri = rj alors les deux sommets si et sj appartiennent la mme composante connexe.

Algorithme de Kruskal fonc Kruskal(G = (S, A), cout : A R) retourne un ACM G = (S, K ) pour chaque sommet si S faire [si ] nil trier les artes de A par ordre de cot croissant K tant que | K |<| S | 1 faire soit (si , sj ) la k ieme plus petite arte de A /* recherche de la racine ri de la composante connexe de si */ ri si tant que [ri ] = nil faire ri [ri ] /* recherche de la racine rj de la composante connexe de sj */ rj sj tant que [rj ] = nil faire rj [rj ] si ri = rj alors /* on ajoute (si , sj ) lACM */ K K {(si , sj )} /* on fusionne les deux composantes connexes */ [ri ] rj fin si fin pour retourne(S, K ) fin Kruskal

41

Remarque : en pratique, an dviter dobtenir des arbres dsquilibrs dans , lorsquon fusionne les deux arbres de racines ri et rj , on prendra soin de rattacher larbre le moins profond sous larbre le plus profond. Pour cela, on grera un vecteur prof qui associe chaque racine r sa profondeur prof [r], et si prof [ri ] > prof [rj ] alors on fera [rj ] ri , sinon on fera [ri ] rj . En procdant de cette faon, on garantit que le chemin de nimporte quel noeud de larbre jusque sa racine est de longueur infrieure ou gale log2 (n) si le graphe comporte n sommets. Complexit : On considre un graphe non orient de n sommets et p artes. Pour trier lensemble des artes, avec une procdure de tri efcace (e.g., quicksort, mergesort ou heapsort), il faut excuter de lordre de p log (p) oprations. On passe ensuite, dans le pire des cas, p fois dans la boucle tant que | K |<| S | 1 (une fois pour chaque arte (si , sj )). A chaque fois, il faut remonter des sommets si et sj jusquaux racines des arbres correspondants. En grant astucieusement la reprsentation des arbres par , on a vu que cette opration pouvait tre faite en O(log (n)). Par consquent, on a une complexit totale en O(p log (p)) (sous rserve dutiliser une reprsentation par listes dadjacence).

11

Rseaux de transport

Les rseaux de transport peuvent tre utiliss pour modliser lcoulement de liquide lintrieur de tuyaux, la circulation de pices dans une chane de montage, du courant dans les rseaux lectriques, de linformation travers les rseaux de communication, ... Dune faon plus gnrale, un rseau de transport dsigne le fait quun matriau (de leau, de llectricit, de linformation, ...) doit scouler depuis une source, o il est produit, jusqu un puits, o il est consomm. La source produit le matriau un certain dbit, et le puits consomme ce matriau avec le mme dbit. Entre la source et le puits, ce matriau est transport par des conduits ; chacun de ces conduits a une capacit qui reprsente la quantit maximale de matriau pouvant transiter par le conduit pendant une unit de temps (par exemple, 200 litres deau par heure dans un tuyau, ou 20 ampres de courant lectrique travers un cble). Les rseaux de transport peuvent tre modliss par des graphes : Chaque arc du graphe correspond un conduit du rseau de transport, par lequel le matriau est achemin. Chaque arc est valu par la capacit du conduit correspondant. Chaque sommet du graphe correspond une jonction de plusieurs conduits du rseau de transport. Le graphe possde en plus deux sommets particuliers, nots s et p et correspondant respectivement la source et au puits du rseau de transport. De faon plus formelle, un rseau de transport sera dni par un quadruplet (G, c, s, p) tel que - G = (S, A) est un graphe orient, - c : A R+ est une fonction qui associe chaque arc sa capacit, - s S est la source, et - p S est le puits. On suppose quil ny a pas de sommet inutile, cest--dire que pour tout sommet si S , il existe un chemin de s p passant par si . Pour des raisons de commodit dcriture, on supposera que la fonction de capacit c est dnie pour tout couple de sommets si , sj de telle sorte que si (si , sj ) nest pas un arc du rseau, alors c(si , sj ) = 0.

42

Exemple : lusine Max & Fils, localise Lille, produit des voitures. Ces voitures sont achemines en train jusqu Lyon, o elles sont stockes dans un entrept puis vendues. Les capacits des trains sont : - sur la ligne Lille/Reims : 16 voitures par jour, - sur la ligne Lille/Paris : 13 voitures par jour, - sur la ligne Paris/Reims : 4 voitures par jour, - sur la ligne Reims/Paris : 10 voitures par jour, - sur la ligne Reims/Dijon : 12 voitures par jour, - sur la ligne Paris/Nevers : 14 voitures par jour, - sur la ligne Dijon/Paris : 9 voitures par jour, - sur la ligne Nevers/Dijon : 7 voitures par jour, - sur la ligne Nevers/Lyon : 4 voitures par jour, - sur la ligne Dijon/Lyon : 20 voitures par jour. Ce rseau de transport sera modlis par le graphe suivant :
Reims 16 Lille 13 Paris 14 Nevers 10 4 9 7 4 12 Dijon 20 Lyon

La source est Lille, et le puits Lyon. On sintresse ici au problme du ot maximal dans un tel rseau de transport. Il sagit de dterminer la plus grande quantit de matriau pouvant voyager depuis la source jusquau puits, sans violer aucune contrainte de capacit, et tout en prservant la proprit de conservation de ot : except la source et le puits, le matriau doit scouler dun sommet lautre sans perte ni gain. Autrement dit, le dbit lentre dun sommet doit tre gal au dbit en sortie. De faon plus formelle, un ot dun rseau de transport (G = (S, A), c, s, p) est une fonction f : S 2 R telle que 1. contrainte de capacit : (si , sj ) S 2 , f (si , sj ) c(si , sj ) 2. contrainte de symtrie : (si , sj ) S 2 , f (si , sj ) = f (sj , si ) 3. conservation du ot : si S {s, p},
sj S

f (si , sj ) = 0

La valeur dun ot f , note | f |, est gale la somme des ots partant de la source, et du fait de la proprit de conservation des ots, est aussi gale la somme des ots arrivant au puits : | f |=
si S

f (s, si ) =
si S

f (si , p)

43

Exemple : Un ot pour le rseau de transport de lusine Max & Fils est :


3 3 Reims 3 Lille 2 2 Paris 4 4 Nevers
2

1 3 Dijon 2 4 4 1 Lyon

Ce ot sera gnralement reprsent en ne faisant gurer que les arcs de valeurs positives :
Reims 3 Lille 2 Paris 4 Nevers 2 4 3 Dijon 1 Lyon

Dnition du problme du ot maximal : Etant donn un rseau de transport (G, c, s, p), il sagit de trouver un ot f tel que | f | soit maximal.

Modlisation en programmation linaire : Le problme du ot maximal peut tre exprim comme un problme de programmation linaire, cest--dire comme une fonction linaire maximiser tout en respectant un certain nombre de contraintes linaires. Etant donn le rseau de transport (G = (S, A), c, s, p), il sagit de rsoudre le problme linaire suivant : maximiser si S f (s, si ) telque f (si , sj ) c(si , sj ) (si , sj ) A f (si , sj ) = f (sj , si ) (si , sj ) S 2 si S sj S f (si , sj ) = 0 On tudie ici lalgorithme de Ford-Fulkerson permettant de rsoudre le problme du ot maximal sans passer par sa modlisation linaire. Lalgorithme procde selon une approche gloutonne, en augmentant progressivement un ot : Au dpart, le ot est nul, cest--dire que f (si , sj ) = 0 pour tout couple de sommets (si , sj ) S2. On augmente ensuite itrativement le ot f en cherchant chaque fois un chemin amliorant, cest--dire un chemin allant de la source s jusquau puits p et ne passant que par des arcs dont le ot actuel est infrieur la capacit. Pour cela, chaque itration, on calcule la capacit rsiduelle de chaque arc, cest--dire la quantit de ot pouvant encore passer. De faon plus formelle, tant donn un rseau de transport (G = (S, A), c, s, p), et un ot f , on dnit :

44

la capacit rsiduelle dun couple de sommets (si , sj ) S 2 , note cf (si , sj ), est la quantit de ot pouvant encore passer par (si , sj ) sans dpasser la capacit : cf (si , sj ) = c(si , sj ) f (si , sj ) le rseau rsiduel de G, not Gf = (S, Af ), est le graphe partiel de G ne contenant que les artes dont la capacit rsiduelle est positive : Af = {(si , sj ) S 2 /cf (si , sj ) > 0} un chemin amliorant est un chemin sans circuit allant de s p dans le rseau rsiduel Gf la capacit rsiduelle dun chemin amliorant ch , note cf (ch) est la plus grande quantit de ot transportable par les arcs du chemin, et correspond donc la valeur minimale de la capacit rsiduelle des arcs du chemin.

Thorme : Soient - (G, c, s, p), un rseau de transport, - f , un ot de G, - ch, un chemin amliorant dans le rseau rsiduel Gf , et - f un ot dni par : f (si , sj ) + cf (ch) si (si , sj ) ch f (si , sj ) = f (si , sj ) cf (ch) si (sj , si ) ch f (si , sj ) sinon alors, f est un ot de (G, c, s, p) tel que | f |>| f |.

Algorithme de Ford-Fulkerson fonc Ford-Fulkerson(G = (S, A), c : S S R+ , s S, p S ) retourne un ot maximal pour chaque (si , sj ) S 2 faire f (si , sj ) 0 cf (si , sj ) c(si , sj ) fin pour tant que il existe un chemin amliorant ch dans le graphe rsiduel faire /* calcul de la capacit rsiduelle du chemin amliorant */ cf (ch) min(si ,sj )ch (cf (si , sj )) /* mise jour du ot et de la capacit rsiduelle le long des arcs de ch */ pour tout arc (si , sj ) du chemin amliorant ch faire f (si , sj ) f (si , sj ) + cf (ch) f (sj , si ) f (sj , si ) cf (ch) cf (si , sj ) cf (si , sj ) cf (ch) cf (sj , si ) cf (sj , si ) + cf (ch) fin pour fin tant retourne(f ) fin Ford-Fulkerson

45

Recherche dun chemin amliorant dans le rseau rsiduel : Il sagit dun point critique de lalgorithme, qui peut faire varier considrablement lefcacit de lalgorithme. Considrons par exemple le rseau de transport suivant :
s1 1 1000 1000

1000 s

1000 p

s2

Au dpart, on peut trouver plusieurs chemins amliorants diffrents pour ce rseau, savoir <s,s1,s2,p>, ou <s,s1,p>, ou encore <s,s2,p>. Si lon choisit le premier chemin (<s,s1,s2,p>), de capacit rsiduelle 1, alors le rseau rsiduel devient :
s1 1 1000 999

999 s

1000 p

s2

On peut alors trouver un deuxime chemin amliorant <s,s2,s1,p>, de capacit rsiduelle 1, et le rseau rsiduel devient :
999 s 999 s1 1 999 999 p

s2

On peut continuer ainsi, de telle sorte qu chaque fois on trouve un chemin amliorant de capacit rsiduelle gale 1. Par consquent, ce nest quau bout de 2000 tapes successives que lon trouvera le ot maximal et que lalgorithme sarrtera. Cet exemple a t propos par Edmonds et Karp, qui ont ensuite montr quen choisissant chaque tape le chemin amliorant le plus court (celui qui comporte le moins darcs), lalgorithme converge plus rapidement, et ncessite au plus n p calculs de chemins amliorants successifs (avec n = nombre de sommets et p = nombre darcs). Par consquent, pour chercher le chemin amliorant chaque tape de lalgorithme de Ford-Fulkerson, il faudra utiliser un parcours en largeur dabord (tudi au chapitre 7), permettant de trouver un plus court chemin amliorant (en nombre darcs).

Complexit : Si on considre un rseau de transport ayant n sommets et p arcs, linitialisation (premire boucle pour) ncessitera de lordre de n2 oprations. On passera ensuite au plus n p fois dans la boucle tant que. A chaque passage dans cette boucle, on effectue un parcours en largeur pour chercher le chemin amliorant, ce qui ncessite de lordre de n + p oprations, puis on parcourt les arcs du chemin amliorant trouv pour calculer la capacit rsiduelle du chemin et mettre jour le ot et la capacit rsiduelle du rseau. Le chemin amliorant tant acyclique, il comporte au plus n 1 arcs, et donc cette srie de traitements ncessite de lordre de n oprations. Au total, on fera de lordre de n2 + (n p) (n + p) oprations. Etant donn que le rseau est connexe, on a p n 1. Par consquent, la complexit globale de lalgorithme est en O(n p2 ).

46

12

Planication de projet par les rseaux

On sintresse ici au problme de la planication des diffrentes tapes dun projet. Lobjectif de cette planication est notamment de dterminer, pour chaque tape du projet, sa date de dbut de ralisation. Cette date doit tre xe en tenant compte dun certain nombre de paramtres lis la tche (en particulier sa dure et son cot), ainsi que des diffrents contraintes imposes par le projet. Il est important de noter que cette planication doit pouvoir tre ajuste dynamiquement dans le temps, au fur et mesure de lavancement du projet, an de pouvoir prendre en compte les modications (gnralement nombreuses) survenant sur les donnes ou les contraintes. Dans le contexte de ce cours, on va plus particulirement tudier comment les graphes, et les diffrents algorithmes que nous avons vus jusquici, peuvent aider la modlisation et la rsolution de problmes de planication.

12.1

Cot et dure dune tche

Un projet est gnralement dcompos en diffrentes tches effectuer. Chaque tche correspond une tape lmentaire dans la ralisation du projet et a une dure et un cot. La dure et le cot dune tche sont deux donnes inter-dpendantes : en augmentant le cot dune tche, on peut gnralement en rduire la dure (dans certaines limites), et inversement. Dautre part, ces donnes ne sont gnralement pas certaines, mais elles sont estimes, notamment partir des expriences passes dans la gestion de projets similaires. Les aspects concernant la manire destimer le cot et la dure dune tche ne seront pas tudis dans ce cours, et dans la suite, on considrera que la dure dune tche est une donne du problme, et on notera duree(i) la dure de la tche i.

12.2

Contraintes

La ralisation des diffrentes tches doit tre planie en respectant les contraintes du problme que lon peut classer en quatre catgories : Les contraintes de prcdence imposent que certaines tches ne peuvent commencer que si dautres tches sont effectivement termines. Par exemple, le toit dune maison ne peut tre pos que si les murs sont termins. Il est bien videmment ncessaire que toutes les contraintes de prcdence soient compatibles, autrement dit, quil ny ait pas de circuit dans le graphe correspondant. Les contraintes de localisation temporelle expriment le fait quune tche doit tre ralise lintrieur dune priode de temps impose. Par exemple, la charpente dune maison devra tre pose pendant lt. Les contraintes dexclusion expriment le fait que plusieurs tches ne peuvent tre faites en mme temps. Ces contraintes interviennent gnralement lorsque plusieurs tches ont besoin dune ressource commune. Les contraintes cumulatives expriment le fait que lon dispose dun nombre limit de certaines ressources, et qu tout moment la quantit de ces ressources demande par les tches en cours de ralisation soit infrieure la quantit disponible. Il sagit dune gnralisation des contraintes dexclusion. Par exemple, si lon dispose de 5 ouvriers, et si une tche i demande 3 ouvriers, une tche j en demande 4, une tche k en demande 2, ... alors on ne pourra pas excuter en mme temps les tches j et k , ...

47

Traitement des contraintes disjonctives : Les contraintes dexclusion et les contraintes cumulatives sont appeles des contraintes disjonctives et sont particulirement difciles prendre en compte. En effet, la seule faon de les traiter est denvisager chaque possibilit sparment : si deux tches i et j ne peuvent pas tre effectues en mme temps, alors il faudra envisager sparment deux ordonnancements. Un premier o la tche i prcde la tche j , et un deuxime o la tche j prcde la tche i. Ainsi, si le projet comporte n contraintes dexclusion, il faudra envisager de lordre de 2n ordonnancements diffrents. Rappelons que 210 = 103 , 220 = 106 , 230 = 109 , ... Par consquent, mme avec un ordinateur surpuissant, on ne pourra pas envisager, de faon complte, plus dune trentaine de contraintes disjonctives. Dans la pratique, lexploration de ces diffrentes possibilits se fait par une approche par sparation et valuation (branch and bound), qui tente de couper la combinatoire, gnralement en utilisant des heuristiques. Cet aspect nest pas tudi dans ce cours.

Traitement des contraintes de localisation temporelle : Ces contraintes peuvent tre facilement ramenes des contraintes de prcdence en rajoutant des tches ctives de dure gale zro, et dont la date de dbut est xe. Par exemple, si la tche i doit tre effectue entre le 1.5.99 et le 31.8.99, alors on crera les tches T1 et T2 telles que duree(T1 ) = duree(T2 ) = 0, et T1 commence le 1.5.99, et T2 commence le 31.8.99, puis on ajoutera les contraintes de prcdences T1 i T2 .

12.3

Modlisation des contraintes de prcdence par un graphe

Les contraintes de prcdence peuvent tre aisment modlises laide dun graphe. Il existe essentiellement deux faons de modliser ces contraintes : la mthode dorigine amricaine P.E.R.T., aussi appele mthode potentiels-tapes, et la mthode dorigine franaise M.P.M., due M.B. Roy, aussi appele mthode potentiels-tches.

Graphe potentiels-tapes Lide est dassocier un arc du graphe chaque tche du projet, tandis que les sommets du graphe reprsentent des tapes dans lavancement des travaux : chaque sommet correspond au fait que les tches qui y arrivent doivent tre termines avant que ne dbutent les tches qui en partent. Considrons par exemple le problme suivant : Tche A B C D E F G H I J Dure 15 14 12 14 8 10 7 9 5 9 Contraintes G acheve E acheve B acheve G acheve A et I acheves E acheve D acheve B et J acheves G acheve

Pour exprimer le fait que les tches G et B ne peuvent commencer quune fois que la tche E est termine, on dessinera le graphe : 48

G (7) _/E E (8) E/GB B (14)

G/DAJ

B/CI

Pour plus de clart, on dsigne un sommet par un couple (xx/yy) o xx correspond lensemble des tches se terminant sur ce sommet tandis que yy correspond lensemble des tches commenant sur ce sommet.

Introduction de tches ctives : Pour reprsenter certaines contraintes de prcdence, il est ncessaire dintroduire des tches ctives. Considrons par exemple les contraintes de prcdence portant sur les tche C et I : la tche B doit tre ralise avant la tche C, tandis que les tches B et J doivent tre ralises avant la tche I. Pour reprsenter ces contraintes, il est ncessaire dintroduire une tche ctive, de dure nulle, de la faon suivante :
B(14) C (12)

_/B

B/C (0)

C/_

_/J

J (9)

BJ/I

I (5)

I/_

Sur lexemple prcdent, on dessine le graphe potentiel-tapes suivant :


D/H H (9) AI/F F (10) HFC/_ C (12) I (5) JB/I B (14) (0) B/C

D (14) G (7) _/E E (8) E/GB G/DAJ J (9) A (15)

Critique de cette reprsentation : Cette reprsentation a lavantage dtre descriptive et de donner une reprsentation visuelle de lenchanement des tches. En revanche, cette reprsentation est assez rigide, dans la mesure o elle ne permet pas de prendre en compte facilement lintroduction, ou la suppression, de contraintes de prcdence.

Graphe potentiels-tches Lide est dassocier un sommet du graphe chaque tche du projet, tandis que les arcs traduisent les contraintes de prcdence entre tches. A chaque arc du graphe sera associe la dure de ralisation de la tche correspondant au sommet de dpart de larc. Pour plus de clart on rajoute un sommet nal ctif et on rajoute un arc entre tout sommet nayant pas de successeur et le sommet nal ctif. Sur lexemple prcdent, on obtient le graphe suivant : 49

7 8 E 8 G 7 7

14 A 15

H 9 F 5 I 12 C 10 Fin

J 14

B 14

Critique de cette reprsentation : Cette reprsentation est bien moins descriptive que la prcdente. En contrepartie, elle est plus exible dans le sens o elle permet de prendre en compte trs facilement lajout ou la suppression de contraintes de prcdence (il suft de supprimer ou ajouter les arcs correspondants).

12.4

Dure minimale dexcution

Il sagit de calculer la date au plus tt de n de ralisation du projet. La date au plus tt dune tche i, note ti , est le temps minimum qui spare le dbut de cette tche du dbut du projet, si toutes les tches ont la dure prvue. Quelle que soit la reprsentation choisie (graphe potentiels/tapes ou potentiels/tches), on procde de faon similaire, aux dtails de reprsentation prs. On choisit ici de dvelopper ce calcul pour la reprsentation potentiels/tches (o un sommet est associ chaque tche). Etant donn que chaque arc est valu par la dure de la tche associe lextrmit initiale de larc, il sagit, pour chaque tche i de trouver le plus long chemin allant du sommet initial jusquau sommet associ i. Etant donn que le graphe est acyclique (sans quoi le problme est insoluble), on peut utiliser lalgorithme introduit au chapitre 8 de la faon suivante : Algorithme de calcul de la date au plus tt ti dune tche i : 1. Trier les sommets du graphe topologiquement (cf chapitre 7), de telle sorte que si une tche i doit tre ralise avant une autre tche j , alors le sommet correspondant i soit plac avant le sommet correspondant j dans lordre topologique. En mme temps, on pourra vrier que le graphe des contraintes est effectivement acyclique. 2. Pour chaque tche i, initialiser ti 0. 3. Considrer chaque tche i selon lordre topologique et faire Pour chaque successeur j de i faire : si tj < ti + duree(i) alors tj ti + duree(i) Lalgorithme consiste donc relcher chaque arc (correspondant une contrainte de prcdence) une et une seule fois selon un ordre topologique sur les sommets du graphe. Ainsi, si le projet comporte n tches et p contraintes dantriorit, le calcul des dates au plus tt se fera en O(p). Sur lexemple prcdent, on pourra considrer lordre topologique suivant : E, G, D, B, A, J, C, I, H, F, Fin On relchera alors les arcs du graphe dans lordre suivant : 50

Arc relch Date modie Arc relch 1 : E/G tG 8 8 : B/C 2 : E/B tB 8 9 : A/F 3 : G/D tD 15 10 : J/I 4 : G/J tJ 15 11 : C/F in 5 : G/A tA 15 12 : I/F 6 : D/H tH 29 13 : H/F in 7 : B/I tI 22 14 : F/F in A la n, on obtiendra les dates au plus tt suivantes : tche E G D B A J date au plus tt 0 8 15 8 15 15

Date modie tC 22 tF 30 tI 24 tF in 34 tF in 38 tF in 40 C 22 I 24 H 29 F 30 Fin 40

12.5

Date au plus tard

Il sagit de dterminer, pour chaque tche i de combien de temps on peut reculer sa date de dbut (par rapport sa date au plus tt) sans retarder la date de n du projet. Pour cela, on va calculer, pour chaque tche i sa date au plus tard Ti , cest--dire le temps maximum qui peut sparer le dbut de lexcution de la tche i du dbut du projet, sans augmenter la dure totale du projet, si toutes les tches ont la dure prvue. Pour calculer les dates au plus tard, il suft de relcher chaque arc une et une seule fois, dans lordre inverse de celui utilis pour le calcul des dates au plus tt : Algorithme de calcul de la date au plus tard Ti dune tche i : 1. Reprendre lordre topologique dni sur les sommets pour le calcul des dates au plus tt, et linverser. 2. Pour chaque tche i, initialiser Ti tF in . 3. Considrer chaque tche i selon lordre topologique invers et faire : Pour chaque prdcesseur j de i faire si Tj > Ti duree(j ) alors Tj Ti duree(j ) Si le projet comporte n tches et p contraintes dantriorit, le calcul des dates au plus tard se fera donc en O(p). Sur lexemple prcdent, on pourra considrer lordre topologique invers suivant : Fin, F, H, I, C, J, A, B, D, G, E On relchera alors les arcs du graphe dans lordre suivant : Arc relch Date modie Arc relch Date modie 1 : F/F in TF 30 8 : B/I TB 11 2 : H/F in TH 31 9 : D/H TD 17 3 : I/F TI 25 10 : G/A TG 8 4 : C/F in TC 28 11 : G/J 5 : J/I TJ 16 12 : G/D 6 : A/F TA 15 13 : E/B TE 3 7 : B/C TB 14 14 : E/G TE 0 A la n, on obtiendra les dates au plus tard suivantes : tche E G D B A J C I H F Fin date au plus tard 0 8 17 11 15 16 28 25 31 30 40 51

12.6

Marge totale

A partir de la date au plus tot et de la date au plus tard dune tche, on peut calculer la marge totale associe cette tche, cest dire le battement maximum dont on dispose, en plus de la dure propre de la tche, pour xer sa ralisation, sans pour autant perturber la date nale de n du projet. Etant donne une tche i, la marge totale associe cette tche, note i , est dnie par i = Ti ti Sur lexemple prcdent, on calcule les marges totales suivantes : tche Marge totale E 0 G 0 D 2 B 3 A 0 J 1 C 6 I 1 H 2 F 0 Fin 0

Ainsi, la tche H a une marge totale de 2, ce qui signie que lon peut retarder le dbut de lexcution de cette tche de 2 units de temps aprs avoir ni lexcution de la tche prcdente D (ou encore, que lon peut augmenter la dure de ralisation de H de 2 units de temps), sans pour autant retarder le projet. Notons que la marge totale suppose que tout ce qui a prcd la tche i se soit toujours accompli le plus tt possible, tandis que tout ce qui suit sera accompli le plus tard possible. Une consquence de cela est que les marges totales se partagent, ce qui signie quon ne peut les utiliser quune seule fois sur toutes les tches dun chemin non rami. Sur notre exemple, les tches D et H ont toutes les deux une marge totale de 2. Nanmoins, si on retarde de 2 units de temps le dbut de lexcution de la tche D, alors on naura plus aucune marge pour lexcution de la tche suivante H.

12.7

Chemins et tches critiques

Certaines tches ne disposent daucune marge pour leur ralisation. Le moindre retard dans la ralisation dune telle tche entrainera ncessairement un retard global du projet. Cest pourquoi de telles tches sont dites tches critiques. Sur lexemple prcdent, les tches E , G, A et F sont critiques. La ralisation de ces tches devra tre particulirement surveille car le moindre retard se transmettra lensemble du projet. Dune faon plus gnrale, on appelle chemin critique tout chemin dans le graphe allant du sommet de dbut au sommet de n du projet et ne passant que par des tches critiques. Tout projet possdera au moins un chemin critique, correspondant au plus long chemin entre les sommets de dbut et de n du projet. Certains projets peuvent avoir plusieurs chemins critiques, sil y a plusieurs plus longs chemins.

13

Pour en savoir plus

La thorie des graphes Aim Sache Presses universitaires de France, srie Que sais-je ? Introduction lalgorithmique T. Cormen, C. Leiserson, R. Rivest Editions Dunond - 1997 52

Exercices et problmes rsolus de recherche oprationnelle ROSEAUX Editions Masson - 1986

53

Das könnte Ihnen auch gefallen