Académique Documents
Professionnel Documents
Culture Documents
Cours Graph e 01
Cours Graph e 01
1. Introduction : La notion de graphe est une structure combinatoire permettant de reprsenter de nombreuses situations rencontres dans des applications faisant intervenir des mathmatiques discrtes et ncessitant une solution informatique. Circuits lectriques, rseaux de transport (ferrs, routiers, ariens), rseaux d'ordinateurs, ordonnancement d'un ensemble de tches sont les principaux domaines d'application o la structure de graphe intervient. 2. Quelques exemples dapplication dans les graphes Exemple 1. Le problme des ponts de Knigsberg La ville de Knigsberg comprenait 4 quartiers, spars par des ponts. Les habitants de Knigsberg se demandaient sil tait possible, en partant dun quartier quelconque de la ville, de traverser tous les ponts sans passer deux fois par le mme et de revenir leur point de dpart. Le plan de la ville peut se modliser laide dun graphe ci-dessous, les quartiers sont reprsents par les 4 sommets, les 7 ponts par des artes :
Exemple 2. Choix d'un itinraire Sachant qu'une manifestation d'tudiants bloque la gare de Poitiers, et connaissant la dure des trajets suivants : Bordeaux Nantes 4 h Bordeaux Marseille 9 h Bordeaux Lyon 12 h Nantes Paris-Montparnasse 2 h Nantes Lyon 7 h Paris Montparnasse Paris Lyon 1 h (en autobus) Paris-Lyon Grenoble 4 h 30 Marseille Lyon 2 h 30 Marseille Grenoble 4 h 30 Lyon Grenoble 1 h 15 Question : Comment faire pour aller le plus rapidement possible de Bordeaux Grenoble ? Les donnes du problme sont faciles reprsenter par un graphe dont les artes sont tiquetes par les dures des trajets :
Il s'agit de dterminer, dans ce graphe, le plus court chemin entre Bordeaux et Grenoble. Exemple 3. Organisation d'une session d'examens Des tudiants A, B, C, D, E et F doivent passer des examens dans diffrentes disciplines, chaque examen occupant une demi-journe : Chimie : tudiants A et B lectronique : tudiants C et D Informatique : tudiants C, E, F et G Mathmatiques : tudiants A, E, F et H Physique : tudiants B, F, G et H On cherche organiser la session d'examens la plus courte possible. On peut reprsenter chacune des disciplines par un sommet, et relier par des artes les sommets correspondant aux examens incompatibles (ayant des tudiants en commun) : Il s'agit alors de colorier chacun des sommets du graphe en utilisant le moins de couleurs possible, des sommets voisins (relis par une arte) tant ncessairement de couleurs diffrentes.
Exemple 4. Planification de travaux Pour rnover une maison, il est prvu de refaire l'installation lectrique (3 jours), de ramnager (5 jours) et de carreler (2 jours) la salle de bains, de refaire le parquet de la salle de sjour (6 jours) et de repeindre les chambres (3 jours), la peinture et le carrelage ne devant tre faits qu'aprs rfection de l'installation lectrique. Si la rnovation est faite par une entreprise et que chacune des tches est accomplie par un employ diffrent, quelle est la dure minimale des travaux ? On peut reprsenter les diffrentes tapes de la rnovation sur un graphe dont les arcs sont tiquets par la dure minimale sparant deux tapes
Il s'agit de dterminer la dure du plus long chemin du dbut la fin des travaux. De manire gnrale, un graphe permet de reprsenter simplement la structure, les connexions, les cheminements possibles dun ensemble complexe comprenant un grand nombre de situations, en exprimant les relations, les dpendances entre ses lments. En plus de son existence purement mathmatique, le graphe est aussi une structure de donnes puissante pour linformatique.
3. Dfinition Un graphe G est constitu de 2 ensembles V et E. V est un ensemble non vide de sommets.
E est un ensemble de paires de sommets de V. Ces paires sont appels artes. V(G) et E(G)
reprsentent, respectivement lensemble des sommets et dartes du graphe G. On crit aussi G = (V,E) pour reprsenter le graphe. Dans un graphe non orient, la paire de sommets reprsentant une arte nest pas
ordonnes. Autrement dit, les (v1, v2) et (v2, v1) reprsentent la mme arte. Dans un graphe orient (diagraphe diagraphe), diagraphe chaque arte est reprsente par la paire oriente <v1,
v2>; v1 tant lorigine et v2 lextrmit de larte dans ce cas, on ne parle plus darte mais
darc. Par consquent, <v2, v1> et <v1, v2> reprsentent deux arcs diffrents. La figure cidessous reprsentent deux graphes.
graphe orient
4. Terminologie : avant de continuer, il est utile de prsenter la terminologie (mme rduite) utilise dans la thorie des graphes.
Terme adjacence arc arte boucle chane Signification deux arcs sont adjacents s'ils ont une extrmit commune; deux sommets sont adjacents s'il existe un arc, ou une arte, les reliant couple (x,y) dans un graphe orient nom d'un arc, dans un graphe non orient arc reliant un sommet lui-mme Nom d'un chemin dans un graphe non orient ; squence darcs avec une extrmit commune dans un graphe orient. suite d'arcs connexes reliant un sommet un autre. Par exemple (a;b) (b;c) (c;d) (d;b) (b;e) est un chemin reliant a e ; on le note (a,b,c,d,b,e). Un chemin est une chane, la rciproque tant fausse dsigne un chemin simple passant une fois et une seule par toutes les artes du graphe ; il nexiste pas toujours dsigne un chemin simple qui passe une fois et une seule par chaque sommet cest le nombre minimal de couleurs ncessaires pour colorier tous les sommets du graphe sans que deux sommets adjacents aient la mme couleur ; pour les cartes de gographie, le nombre chromatique est 4 ; ce fut, en 1976, la premire dmonstration informatique dun thorme mathmatiques, sous rserve quil ny ait pas eu de bug dans le programme il aura fallu 700 pages de listing ! chemin dont l'origine et l'extrmit sont identiques Un graphe est connexe sil existe toujours une chane, ou un chemin, entre deux sommets quelconques. Par exemple le plan dune ville doit tre connexe. un graphe est complet si quels que soient deux sommets distincts, il existe un arc (ou une arte) les reliant dans un sens ou dans l'autre nom d'un circuit dans un graphe non orient ; dans un graphe orient, un cycle est une chane dont l'extrmit initiale concide avec l'extrmit finale nombre d'arte issues d'un sommet dans un graphe non orient ; nombre darcs arrivant ou partant dun sommet dans un arc orient ; on peut vrifier facilement que la somme des degrs de tous les sommets, est donc le double du nombre des artes (puisque chacune est compte deux fois). le diamtre dun graphe est la plus grande chane (chemin) de toutes reliant deux sommets quelconques du graphe la distance entre deux sommets dun graphe est la plus petite longueur des chanes, ou des chemins, reliant ces deux sommets. dsigne un graphe o le couple (x,y) nimplique pas lexistence du couple (y,x) ; sur le dessin, les liens entre les sommets sont des flches dsigne un graphe non orient nayant pas de boucle ni plus dune arte reliant deux sommets. Sur le dessin, les liens entre les sommets sont des segments, et on ne parle alors plus d'arcs mais d'artes ; tout graphe orient peut donc tre transform en graphe simple, en remplaant les arcs par des artes nombre d'arcs du chemin (ou dartes de la chane) nombre de sommets du graphe Dans l'arc (x;y), x est prdcesseur de y
chemin
chromatique (nombre)
graphe simple
longueur d'un chemin (ou dune chane) Ordre dun graphe prdcesseur
Rang
sous graphe
le rang dun sommet est la plus grande longueur des arcs se terminant ce sommet le graphe G' est un sous graphe de G si l'ensemble des sommets de G' est inclus dans l'ensemble des sommets de G, et si l'ensemble des arcs de G' est gal au sousensemble des arcs de G reliant entre eux tous les sommets de G ; on a donc retir de G certains sommets, et tous les arcs adjacents ces sommets ; soit un graphe G (E ; R), et F un sous-ensemble de sommets. On dit que F est un sous ensemble stable de E sil nexiste aucun arc du graphe reliant deux sommets de F. dans l'arc (x;y), y est successeur de x nombre darcs (artes) dont une extrmit part de ce sommet. nombre darcs (artes) dont lextrmit finale arrive dans ce sommet nombre darcs (artes) dont lextrmit dorigine part de ce sommet
Stable successeur
Arcs( artes) incidents un sommet
Arcs incidents un sommet vers lintrieur Arcs incidents un sommet vers lextrieur
Un sommet pendant est un sommet de degr 1. Un pont est une arte telle que sa suppression disconnecte le graphe en question. Demi-degr intrieur (degr entrant) dun sommet x, d ( x) , est le nombre d,arcs entrant x, Demi-degr extrieur (degr sortant) dun sommet x, d + ( x) , est le nombre darcs sortant de x. Le degr d(x) est gal ( d + ( x) + d ( x) ) Un graphe valu (pondr) est un graphe o les arcs (artes) possdent un poids. Graphe partiel Soit G = (V, E) un graphe. Le graphe G' = (V, E') est un graphe partiel de G, si E' est inclus dans E. Autrement dit, on obtient G' en enlevant une ou plusieurs arte graphe G.
Exercice
Exercice :
successeurs (C)? prdcesseurs (B)? arcs incidents E vers l'extrieur? Exercice: Caractriser les graphes de diamtre 1. Trouver le diamtre des graphes ci-dessous.
5. Reprsentation d'un graphe a) Utilisation de matrices L'ensemble des sommets du graphe n'volue pas. On utilise un tableau de boolens, dite matrice d'adjacence, de dimension n x n o n= |V|.
L'lment d'indice i et j est vrai si et seulement si il existe un arc entre les sommets i et j.
Avantages : rapidit des recherches, compacit de la reprsentation, simplicit des algorithmes de calcul. Inconvnients : reprsentation ne convenant qu'aux graphes simples; redondance des informations pour les graphes non orients; stockage inutile de cas inintressants (les zros de la matrice), examiner quand on parcourt le graphe (pour la complexit des algorithmes, le nombre dartes E est remplacer par V 2 ). Exercice a) quelle est la matrice d'adjacence du graphe suivant? b) que se passe-t-il si le graphe est simple (non orient)? c) comment procder dans un graphe valu? d) comment traiter tous les successeurs du sommet S1? e) crire une fonction qui retourne le demi-degr extrieur de S3?
b. Matrice d'incidence Un graphe non oriente n sommets numrots et p arcs numrots peut tre reprsent par une matrice (n; p) d'entiers : l'lment M[i][j] vaut 1 si le sommet i est une extrmit de l'arte j, 0 sinon :
Avantages : rapidit des recherches, compacit de la reprsentation, informations non redondantes pour les graphes non orients; Inconvnients : stockage et examen inutile de zros; les calculs de matrices classiques ne s'appliquent pas.
Exercice a) crire, en C-C++ ou en Java, les dclarations qui correspondent cette liste b) faire la distinction entre un graphe o le nombre de sommets volue c) comment faire si le graphe est valu d) avantages et inconvnients de cette solution e) crire une fonction qui retourne le demi-degr extrieur de x.
et cette somme est paire d'aprs (1) d'o le rsultat Un exemple Est-il possible de dessiner, dans le plan, 9 segments de telle manire que chacun en coupe exactement 3 autres ? En reprsentant chaque segment par un sommet dun graphe et en reliant deux sommets par une arte lorsque les deux segments se coupent, le problme se ramne la recherche dun graphe 9 sommets o tous les sommets sont dordre 3. Or le nombre de sommets de degrs impairs est ncessairement pair, 9 tant impair, le problme na pas de solutions. En modifiant lnonc comme suit:
Est-il possible de dessiner, dans le plan, 8 segments de telle manire que chacun en coupe exactement 3 autres ?
Il ny a plus de contradiction avec le thorme prcdent mais il nest pas sr que le problme admette une solution. Quelques ttonnements permettent cependant de rpondre positivement la question pose
10
le graphe correspondant
Un dessin possible
Thorme Dans un graphe simple G, il y a au moins 2 sommets distincts ayant le mme degr. Preuve: Soit n le nombre de sommets de G et soit d(x) le degr du sommet x dans G. On a toujours 0
d(x) n-1. Si tous les degrs sont distincts, toutes les valeurs de d() sont atteintes, en particulier 0 et n1. Soit a un sommet de degr n-1. Alors les n-1 sommets restants sont extrmits dune arte ayant a comme autre extrmit. Les sommets ont donc tous un degr non nul, en contradiction avec lhypothse.
Soit A un graphe n sommets. Thorme - Les proprits suivantes sont quivalentes. (a) A est un arbre. (b) A ne contient aucun cycle et possde n-1 artes. (c) A est connexe et possde n-1 artes. (d) A est connexe, et chaque arte est un pont. (e) Deux sommets quelconques de A sont relis par un unique chemin. (f) A est acyclique mais l'addition d'une quelconque nouvelle arte cre exactement un cycle.
11
(b)
(c)
(d)
(e)
(f)
(a)
On raisonne par induction sur n. L'quivalence des six proprits est vidente pour n= 1. (a) (b) : il faut montrer que A possde n-1 artes. Supprimons une arte de A. Cela le disconnecte (sinon A contiendrait un cycle) en deux sous-graphes B et C tous deux connexes et sans cycle, donc possdant, d'aprs l'hypothse de rcurrence, p -1 et q -1 artes (o p+q=n). Il en rsulte que A possde (p -1) + (q -1) + 1 = n -1 artes. (b) (c) : il faut montrer que A est connexe. S'il ne l'tait pas, chacune de ses composantes serait connexe et sans circuit. Donc, par hypothse de rcurrence, elle possderait qi-1 artes. On aurait donc
(o k est le nombre de composantes). Par consquent, k=1, d'o la contradiction. (d) : il faut montrer que si l'on enlve une arte, le graphe n'est plus connexe, ou encore qu'un (c) graphe possdant n sommets et n-2 artes n'est pas connexe. S'il l'tait, il aurait forcment un sommet pendant (sommet de degr 1), puisque la somme des degrs est gale 2n-4, alors qu'elle vaut au moins 2n pour un graphe sans sommet pendant. Retirant ce sommet et l'arte qui lui correspond, on aurait un graphe n-1 sommets et n-3 artes qui serait connexe, ce qui est faux d'aprs l'hypothse de rcurrence (ou alors : qui entrane, en recommenant le mme raisonnement, l'existence d'un graphe connexe deux sommets et zro arte). (e) : puisque A est connexe, ce chemin existe. S'il y en avait deux, A contiendrait un circuit et la (d) suppression d'une arte quelconque de ce circuit laisserait A connexe, en contradiction avec l'hypothse que toutes les artes sont des ponts. (e) (f) : si A contenait un circuit, deux sommets sur ce circuit seraient relis par deux chemins. Si l'on ajoute une arte vw, puisque v et w taient dj relis dans A, on cre un circuit. On ne peut en crer qu'un : si l'on en crait deux, on aurait la figure suivante
12
(f) (a) : si A n'tait pas connexe, l'adjonction d'une arte entre deux composantes ne pourrait crer de circuit.
enfiler (debut) ; marquer[debut] = 1; tant que (file non vide) { s = defiler () ; // traitement ncessaire sur le sommet s pour tout w adjacent s faire si (Marque[w] == 0 ) { Marquer[w] = 1; enfiler (w); } }} Exemple sur un graphe
Ordre de parcours : 1, 2, 4, 5, 3 Un autre exemple: le parcours en BFS est indiqu par les numros rouges.
14
Complexit : Il est clair que cette complexit est donne par celle de la boucle while. Comme un sommet nest jamais visit plus dune fois, cette boucle est au plus rpte n fois. Le nombre ditrations de la boucle for est proportionnel au degr de chaque sommet u+1 (le +1 car mme si degre(u)=0, la boucle fera quand mme le test) . En additionnant sur les sommets, on obtient :
T (n) = O (n + deg re(u ) + 1) = O (2n + 2e) = O (n + e)
uV
15
Ordre de visite : 1, 2, 4, 3, 5;
Complexit Observons que DFS examine chaque sommet au plus une fois. Pour chaque sommet u, un temps proportionnel (degreexterne(u)+1) est ncessaire pour traiter les sommets adjacents de u (pourquoi le +1 ?). Par consquent, la complexit de DFS est :
T (n) = O(n + deg reexeterne(u ) + 1) = O(n + deg reexterne +n) = O(2n + e) = O(n + e)
uV uV
16
Application 1 : Accessibilit Pour connatre les sommets accessibles depuis un sommet donn d'un graphe (orient ou non), il suffit de faire un parcours en profondeur partir de ce sommet, en marquant les sommets visits : marquage des sommets accessibles depuis un sommet s : visiter s visiter un sommet k: si k n'a pas encore t visit alors marquer k; visiter tous les sommets adjacents de k finsi
Application 2 : composantes connexes Dfinition : Un graphe est connexe si et seulement si, quelque soit deux sommets, ils sont relis par une chane (chemin).
Dfinition: Une composante connexe est un sous graphe connexe de taille maximale. Remarque : il est toujours possible de partitionner un graphe en composantes connexes. Par exemple, sur la figure ci-dessous, le graphe est scind en 3 composantes connexes.
17
Thorme Soit G un graphe simple n sommets. Si G possde k composantes connexes, le nombre m de ses artes vrifie
Preuve:
n-k m ?
Chaque composante connexe de G est un graphe simple connexe. Il est clair que le plus petit (en nombre dartes) graphe connexe est un arbre (pourquoi ?). Il en rsulte que chacune des k composantes connexes possde au moins n1-1 artes. Autrement dit :
m n1 1 + n 2 1 + ... + n k 1 = n k
m (n-k)(n - k +1)/2?
Nous pouvons supposer que chaque composante est un graphe complet. Supposons que nous ayons deux composantes Ci et Cj de G qui soient des graphes complets possdant respectivement ni et nj sommets, avec ni nj > 1. Remplaons Ci et Cj par des graphes complets ni+1 et nj -1 sommets respectivement (en d'autres termes. Dans une telle opration, le nombre de composantes et celui de sommets reste inchang. En revanche, le nombre d'artes augmente de:
Le nombre m sera donc maximal quand il n'y aura plus qu'une seule composante ayant plus d'un sommet, c'est--dire quand on aura k-1 sommets isols et un graphe complet n - k + 1 sommets et, par consquent, (n - k)(n - k + 1)/2 artes.
for i = 1 to n do marquer(i) = 0 fin pour pour i = 1 n si marquer(i) = 0 alors DFS(i) (ou alors BFS); restituer le sous graphe visit par DFS (formant une composante connexe) fin pour Complexit : Si G est reprsent par sa liste adjacente, alors le temps total pris par DFS est en O(e), e tant le nombre dartes. La restitution peut tre complte en temps O(e) si DFS garde une liste de 18
tous les sommets nouvellement visits. Comme la boucle pour est en O(n), la complexit totale, pour gnrer toutes les composantes connexes est en O(n + e).
19
Exemple : Un camion de ramassage des ordures part du dpt reprsent en noir ci-dessous et doit passer sur chaque route du rseau ci-dessous pour effectuer la collecte des dchets. Comment doit-il sy prendre ? On cherche ici un cycle eulrien.
Thorme dEuler : Un graphe simple connexe est eulrien si et seulement si pour tout sommet x, d(x) est pair. Preuve : Supposons G admet un cycle eulrien, soit alors c un cycle eulrien et x un sommet de G. Le cycle c contient toutes les artes de G, donc toutes les d(x) artes ayant x comme extrmit. Lors d'un parcourt de c on arrive en x autant de fois qu'on en repart, chaque arte de G tant prsente une et seule fois dans c, d(x) est ncessairement un nombre pair. Rciproquement, choisissons un sommet arbitraire x0, puis considrons lautre extrmit de cette arte : ce deuxime sommet tant de degr pair, on peut en repartir par une autre arte et atteindre ainsi un autre sommet nouveau. Et ainsi de suite, comme le graphe admet un nombre fini dartes, jusqua ce que la chane forme se referme sur elle pour former un cycle c (si elle ne se referme pas, alors lextrmit aura un degr impair). Si ce cycle est eulrien, on arrte. Sinon, chacune des composantes du graphe restant vrifie les proprits du thorme: elle est finie, connexe et chacun des sommets est de degr pair.
20
Cycle c
x0.
x1.
Cycle c1
Comme G est connexe, chacune des composantes restantes possde au moins un sommet commun avec le cycle c. Soit x1 un tel sommet. Construisons alors, de la mme manire que prcdemment, un cycle c1 dans cette composante partir de x1. Rallongeons le cycle c1 en insrant partir du sommet x1 le cycle c1 pour former un cycle c'1 de x0 x0. Si ce cycle c'1 possde toutes les artes de G, c'1 est le cycle eulrien cherch.
processus, qui se terminera car les sommets du graphe G sont en nombre fini. Sinon, on continue ce
Exemple dapplication le plus connu: le problme dit des 7 ponts de Knigsberg mentionn en introduction:
Comment partir de A et revenir A, en passant par chaque pont une fois et une seule ? Le problme revient chercher un cycle eulrien de A A.
21
Ce graphe est bien connexe (tout sommet peut tre reli un autre) et on a Sommet Degr A 3 B 3 C 3 D 5
Il y a quatre sommets de degr impair : il nexiste donc pas de chemin Eulrien. Autrement dit, le problme des 7 ponts de Knigsberg na donc pas de solution. Exercice Lequel des deux graphes ci-dessous admet une cycle eulrien.
figure 1
figure 2
Lalgorithme dEuler permet de trouver explicitement, lorsque cela est possible, une chane eulrienne dans un graphe. Les conditions dexistence dun parcours eulrien sont donnes comme suit :
Un graphe connexe admet une chane eulrienne si le nombre de sommets de degr impair est 0 ou 2. Un graphe connexe admet un cycle eulrien si tous ses sommets sont de degr pair.
22
Note : Cet algorithme ne conduit pas une solution unique: le choix de la chane de dpart et des chanes fermes est arbitraire. Exercice : dduire un algorithme dterminant un cycle eulrien (en supposant que tous les degrs des sommet soient pairs). Quelle est sa complexit, en reprsentant le graphe comme : 1. matrice dadjacence 2. matrice dincidence 3. liste dadjacence.
Graphes hamiltoniens
Dfinition : une chane hamiltonienne est une chane passant une et une seule fois par tous les sommets du graphe. Si le sommet initial et le sommet final sont confondus, on parle alors de cycle eulrien.
23
Exemple : Un voyageur de commerce part tous les matins de son domicile reprsent en noir cidessous et doit rendre visite un ensemble de clients reprsents en blanc, puis retourner son domicile. Comment doit-il sy prendre pour minimiser la distance totale parcourue. (On suppose que les distances entre toutes les paires de clients ainsi quentre les clients et le domicile du voyageur de commerce sont connues). On cherche ici un cycle hamiltonien de longueur minimale.
Contrairement aux graphes eulriens, il nexiste pas de caractrisation simple des graphes hamiltoniens. On peut cependant noncer quelques proprits et conditions suffisantes. 1. Un graphe possdant un sommet de degr 1 ne peut tre hamiltonien. 2. Si un sommet dans un graphe est de degr 2, alors les deux artes incidentes ce sommet doivent faire partie du cycle hamiltonien. 3. Les graphes Kn sont hamiltoniens. (Kn tant un graphe complet de n sommets) Thorme (Ore) Soit G = (X,A) un graphe simple dordre n 3 . Si pour toute paire de sommets {x, y} non adjacents, on a d(x) + d(y) > |X | alors G est hamiltonien. Corollaire (Dirac) Soit G = (X,A) un graphe simple dordre n 3 Si pour tout sommet x de G on a n d ( x) alors G est hamiltonien. 2
24
Lorsquon a affaire des gros graphes ou quon dsire obtenir des solutions trs rapidement, on utilise ce quon appelle des heuristiques qui fournissent des solutions de qualit raisonnable en des temps raisonnables. Heuristique du plus proche voisin 1) Choisir un sommet de dpart x 2) Tant que tous les sommets ne sont pas encore visits faire lopration suivante se rendre au sommet le plus proche pas encore visit Exemple
Toute heuristique, y compris celle du plus proche voisin, peut facilement tre amliore en rajoutant la fin une procdure de post-optimisation. Celle-ci consiste vrifier sil existe une paire dartes sur le cycle qui peut tre remplace par une autre paire dartes (il ny a quun remplacement possible par paire dartes) tout en diminuant la distance totale parcourue. Tant que de telles paires dartes existent, les changes sont effectus.
Illustration
Cette procdure de post-optimisation permet de rduire considrablement lcart loptimum. Par exemple, on a pu constater que la combinaison de lheuristique du plus proche voisin suivie dune postoptimisation a amlior la performance de lalgorithme en moyenne denviron 2 3%. Il existe des mthodes qui permettent de rduire cet cart quelques diximes de pourcent, mais ces mthodes sont beaucoup plus complexes mettre en place. 25
Question : Comment cbler le rseau moindre cot ? Rponse : Il s'agit d'enlever des artes au graphe de faon qu'il reste connexe, et que la somme des pondrations des artes soit la plus petite possible. Remarquons que le graphe partiel recherch est sans cycle (pourquoi ?)
Ce problme se pose, par exemple, lorsqu'on dsire relier n villes par un rseau routier de cot minimum. Les sommets du graphe reprsentent les villes, les artes, les tronons qu'il est possible de construire et les poids des artes correspondent aux cots de construction du tronon correspondant. Le problme est ramen au problme suivant :
Dfinition : Le problme de l'arbre recouvrant de poids minimal est celui qui consiste dterminer un arbre qui soit un graphe partiel dun graphe G simple connexe et dont le poids total est minimal Exemple de solutions sur le graphe ci-dessus
Algorithme de Kruskal
La stratgie de cet algorithme consiste construire larbre en question comme suit : on part dune solution vide. On choisit, chaque fois, une arte de G de poids minimum et qui ne cre pas de cycle. Soit E l'ensemble des sommets de G. On utilisera un ensemble d'artes T qui sera en sortie l'arbre couvrant minimal et un ensemble d'artes F qui reprsentera les artes qui peuvent tre choisies.
26
T = { }; F= E; tant que |T| < n - 1 faire trouver une arte e de F de poids minimal F=F-e si T + e est acyclique alors T = T + e finsi fin tant que
Exemple 1:
Exemple 2 : Reprenons le graphe ci-dessus, et construisons larbre recouvrant de poids minimum laide de lalgorithme de Kruskal. Poids 2 2 3 4 4 5 6 Artes B-C D-E C-D B-D A-E A-B B-E
Preuve doptimalit: Soit n lordre du graphe. Lalgorithme produit bien un arbre recouvrant du graphe puisquil termine lorsque les n 1 artes sont choisies et T est acyclique. Supposons maintenant que larbre recouvrant T ne soit pas minimal. Si e1 , e2 ,..., en 1 alors p (e1 ) p (e2 ) ... p (en 1 ) par
construction ( p (ei ) tant le poids de larte ei ). Soit alors A un arbre couvrant minimal tel que lindice de la premire arte de T, qui ne soit pas une arte de A, soit maximum. Soit donc k cet indice. On a alors e1 , e2 ,..., ek T , e1 , e2 ,..., ek 1 A et ek A . Alors A + ek contient un unique cycle C. C ne peut pas tre constitu uniquement dartes de T (hormis ek ) car sinon T contiendrait un cycle. Soit alors e , une arte de C appartenant A mais non T. Nous avons alors A + ek e , est donc un arbre
27
Complexit : Si les artes sont classes par ordre de cot croissant, ce qui peut se faire en O (e log e) ; e tant le nombre dartes dans le graphe, il reste valuer la complexit de test dacyclicit. Si les composantes connexes du graphe T sont connues, ce test se rduit vrifier que les extrmits de larte choisie sont dans eux composantes connexes distinctes. Il reste alors grer ces composantes connexes de manire fusionner deux composantes connexes relies par larte choisie. Cela peut se faire par la technique de fusion rapide en O (e log n) - comment? Lalgorithme de Kruskal a une complexit de lordre O (e max(log n, log e))
Algorithme de Prim
Lalgorithme de Kruskal veille maintenir la proprit dacyclicit dun arbre alors que lalgorithme de Prim se base sur la connexit dun arbre. Lalgorithme de Prim fait pousser un arbre couvrant minimal en ajoutant au sous-arbre T dj construit une nouvelle branche parmi les artes de poids minimal joignant un sommet de T un sommet qui nest pas dans ce dernier. Lalgorithme sarrte lorsque tus les sommets du graphe sont dans T. Soit X lensemble de sommets du graphe de dpart G. On utilisera un ensemble dartes qui sera en sortie larbre recouvrant en question, et S un ensemble qui contiendra les sommets de T. T = S= S x tant que S X faire trouver une arte e = {y,s} de poids minimal tel que yX-S et sS T = T {y,s} S=Sy findutantque
Preuve de lalgorithme : Soit n lordre du graphe G. Lalgorithme produit bien un arbre couvrant du graphe puisquil termine lorsque tous les sommets de X sont dans S, et chaque itration, une arte est choisie. Donc T contient les sommets de G et a exactement n 1 artes.
Supposons maintenant que larbre couvrant T ne soit pas minimal. Soit A un arbre couvrant minimal qui a le maximum dartes en commun avec T. Si e1 , e2 ,..., en 1 sont les artes de T dans lordre de choix de lalgorithme, alors p (T ) = p (ei ) . Soit
i =1 n 1
de T qui ne soit pas dans A). On notera S i lensemble des sommets du sous-graphe induit par les artes e1 , e2 ,..., ei . Le graphe A + e j nest pas un arbre donc contient un unique cycle C. Or, par construction, e j relie ncessairement un sommet de S j 1 un sommet de X- S j 1 . Donc C doit contenir une arte e e j qui elle aussi relie un sommet de S j 1 un sommet de X- S j 1 . Le graphe A + e j e est alors un arbre couvrant du graphe de dpart G. Mais par construction de T, p (e j ) p (e) , do p ( A + e j e) p ( A) + p (e j ) p (e) : A + e j e est alors un arbre couvrant minimal qui a plus dartes en commun avec T ce qui contredit lhypothse sur A.
Complexit : Si S possde k sommets, pour choisir une arte de poids minimal reliant un sommet de S un sommet de X-S, on doit trouver le poids minimum parmi au plus k (n k ) artes puisque chaque sommet de S est adjacent au plus (n k ) sommets de X-S. Or k varie entre 1 et n, donc
k (n k ) < (n 1) 2 . Ce choix est effectue n fois dans la boule tant que. Donc la complexit est en O(n 3 ) .
Exercice : Proposez une structure de donnes pour le graphe G de telle manire que la complexit temporelle de lalgorithme de Prim soit en O (e log n) .
Rfrences : dautres solutions de meilleures complexits existent dans la littrature. Ainsi, ce problme peut rsolu en un temps linaire si les poids sont de petits entiers (Freedman and Willard : trans-dichotomous algorithms for minimum spanning trees and shorets paths, 31st IEEE Symp. Fournadations of Compu. Sci., 1990, pp. 719-725).
Autrement, la meilleure solution existant dans la littrature est proche de linaire. La borne exacte est O (e log (e, n)) o la fonction (e, n) est le plus petit indice i tel que log(log(log(... log(n)...))) plus e petit que (Gabow, Galil, Spencer et Tarjan : efficient algorithms for finding minimu spanning trees n in undirected and directed grahs, Combinatorica, Vol. 6, 1986, 109-122.
29
Thorme : Si un sommet w dans frontire possde le plus petit chemin temporaires Tw parmi les sommets de cet ensemble, alors ce poids devient permanent. Preuve: La preuve est par contradiction. Supposons que Tw ne peut pas tre mis comme tant le plus petit chemin pour le sommet w. Alors, il doit exister un autre chemin de poids plus petit du sommet S au sommet w (voir figure ci-dessous).
30
Ce nouveau chemin contient le plus petit chemin de S x, ensuite, a continue vers v. Ensuite, une autre suite de sommets (reprsent dans la figure par des lignes courbes), avant darriver au sommet w. Autrement dit, Tv + poids du chemin en ligne courbe < Tw . Mais cette ingalit ne peut pas tre vraie pour la simple raison que le poids du chemin en ligne courbe est positive. Do le rsultat du thorme. S
v w
POUR tout sommet t d(s; t) := +infini FINPOUR; T[s] = 0; TANT QU'il reste des sommets non fixs choisir un sommet w non fix tel que T[t] soit minimal; supprimer w des sommets non fixs POUR tout (w,x) dans E SI T[x] > T[w] + poids (w,x) ALORS T[x] = T[w] + poids (w,x) Si x nest pas membre de frontiere Alors ajouter x frontiere FIN SI FIN POUR FIN TANT QUE
Exemple : Soit chercher les plus courts chemins depuis le sommet A vers tous les autre sommets dans le graphe suivant :
31
Le tableau suivant donne les distances depuis A et les arcs marqus au cours des diffrentes tapes de l'algorithme :
Parmanent
{} {A} {A,D} {A,D,C} {A,D,C,E} {A,D,C,E,B}
frontiere
{A} {B,C,D} {B,C} {E,B} {B} {}
Exercice : comment changer lalgorithme pour quil donne le plus court chemin un sommet donn dune manire explicite. Complexit et structure de donnes: Nous avons besoin dune structure de donnes pour supporter lensemble frontiere. Nous pouvons le reprsenter comme un TAS H et un vecteur dindices X dans le TAS. Utilisant ce vecteur, tant donn un sommet, sa location dans le TAS H est dtermin en O(1).
TAS H
v i
Vecteur X
i
32
X[v] = 0 si le sommet v nest pas dans le TAS. Si maintenant le sommet v est stock dans la location H[i], alors X[v] prendra la valeur i. Les oprations sur lensemble frontiere peuvent tre implantes comme suit : v
Ajouter (x, frontiere) : utiliser T comme un TAS et insrer x . chaque fois quun lment de T est mis jour (T[i] =j) mettre jour aussi le vecteur X (X[j] = i). Supprimer minimum (x, frontiere) : utiliser T comme un TAS et y supprimer x. De plus, chaque fois quune location du TAS est efface par un indice j, mettre jour le vecteur X en faisant X[j] =i. et aussi, comme x est supprim de lensemble frontiere, son indice doit aussi tre supprim (X[x] = 0). Modification de poids (x,frontiere): le nouveau poids de x est donn par T[x]. Par ailleurs, T doit tre maintenu comme un TAS en le remontant sa bonne location vers la racine. Chaque fois quun lment de T est mise jour (T[i] =j), on doit aussi mettre jour aussi le vecteur X (X[j] = i).
La complexit de ces oprations est comme suit : Ajouter(x,frontiere) : Supprimer-minimum(x,frontiere) : Membre(x,frontiere) : Modification de poids(x, frontiere) : O (log n) O (log n) O (1) O (log n)
O(n +
n log n +
e+
initialisation
supprimer_min
Membre
ajouter frontiere
modifier poids
Lalgorithme de Dijkstra et les distances ngatives : Cet algorithme ne gnre pas la bonne solution si les poids des artes sont ngatifs. Par exemple, considrons le graphe ci-dessous :
A 3 C 2 B
-2
33
Lalgorithme ne va jamais trouver que le plus court chemin allant de A vers B est 1(passant par C).
Exemple Soit chercher les plus longues distances depuis le sommet A dans le graphe suivant :
Le tableau suivant donne les plus longues distances depuis A calcules au cours des diffrentes tapes de l'algorithme:
34
Optimalit de l'algorithme: on montre rcursivement que lorsqu'on visite un sommet t qui n'est pas dans la liste, la liste comporte la suite des sommets d'un chemin acyclique allant de s t; d'autre part, les tats de la liste sont distincts chacune des entres dans la procdure visiter. Par consquent l'algorithme termine (il ne peut y avoir qu'un nombre fini d'tats de la liste, correspondant aux chemins acycliques depuis le sommet s). Pour tout sommet t, tout instant, si T[t] < +infini, T[t] reprsente le poids d'un chemin acyclique allant de s t. Comme tous les chemins sont examins, on obtiendra bien le poids maximal. Complexit : dans le pire des cas (graphe complet), le nombre d'entres dans la procdure visiter est le nombre de chemins acycliques d'origine s, c'est--dire
35
(chaque terme de la somme est le nombre de chemins acycliques d'origine s comportant k sommets). chacun de ces appels, on examine les |S| successeurs du sommet que l'on visite. La complexit est par consquent de l'ordre de |S !|.
Thorme Soit G = (X,A) un graphe orient, avec X = {x1, x2 ,,xn }; de matrice d'adjacence M = (m i,j). Pour tout entier naturel k, non nul notons Mk la kme puissance de la matrice. Alors m k ij est gal au nombre de chemins de longueur k du sommet xi au sommet xj . Dmonstration Effectuons une rcurrence sur k : m k ij = m i,j dsigne bien le nombre de chemins allant de xi xj. Supposons le rsultat vrai pour l'entier k - 1; comme Mk = Mk - 1 M , on a par dfinition :
mij = mil
k l =1 n k 1
mlj
k 1
est gal 1 si (xl, xj) est une arte de G et 0 sinon. Observons que mil mlj est le nombre de chemins de longueur k allant de xi xj dont la dernire arte est (xl, xj), la somme de ces termes est donc bien le nombre de chemins de longueur k allant de xi xj
Exemple
36
c'est--dire 8.
37
1. Concevoir des solutions en tant vorace (glouton): Cette approche consiste, partir dun solution vide, construire une solution partir de rgles simples qui, souvent obissent au bon sens. Le plus simple exemple que nous puissions donner est celui de lalgorithme de Kruskal. Comme nous lavons vu, chaque itration, cet algorithme expand sa solution partielle courante en choisissant larte de poids minimal qui ne cre pas de cycle. Dans certaine situations, tre glouton localement peut conduire une solution optimale globalement. 2. Concevoir des solutions en divisant et rgnant : Cette approche consiste subdiviser le problme de dpart en plusieurs sous-problmes de tailles plus petites. Dune manire rcursive, ce processus va tre continu en des sous problmes de taille de plus en plus petite jusqu arriver des problme de taille dont la rsolution est plutt facile. Ensuite, on remonte cette rcursivit en combinant les solutions de ces sous-problmes en des solutions des problmes qui les a subdivis. Ainsi de suite, jusqu arriver la solution du problme de dpart. Pour obtenir des solutions de meilleures complexits, il est conseill davoir des sous-problmes de tailles identiques ou presque. Lexemple que nous pouvons mentionner est celui du tri par fusion. Cet algorithme consiste diviser le tableau en deux partie gales. Dune manire rcursive, ces deux parties sont ensuite divises de la mme manire jusqu avoir deux tableau dun lment chacun. Ensuite, on remonte cette rcursivit en fusionnant deux parties dun tableau tries en un seul tableau tri jusqu arriver au tableau de dpart. 3. Concevoir des solutions en faisant attention la manire de diviser et rgner : Dans certaines situations, dans la mthode de diviser et rgner, la subdivision de haut en bas, telle que mentionne plus haut, est telle que les sous problmes gnrs peuvent tre rsolus plusieurs fois. Cela engendre des solutions de mauvaise complexit. Afin dviter ces rptitions, une autre approche consiste commencer rsoudre les problmes de taille plus petite et ensuite daller des tailles de plus en plus grande. Cette approche est connue sous le nom de programmation dynamique. Quand le nombre de sous-problmes diffrents nest pas trs lev,
38
cette approche gnre des algorithmes de complexit efficace. Un bon exemple mentionner est celui des nombres de Fibonacci. On a vu que limplantation directe de cette fonction conduisait une complexit exponentielle. La raison est que des sous-problmes sont excuts plusieurs fois (dessinez le schma dexcution des diffrents appels rcursifs pour, par exemple, n =5) .
4. Concevoir des solutions en faisant de lnumration intelligente: Dans certains situations, il est possible dnumrer toutes les solutions du problmes et prendre celle qui nous arrange. Linconvnient majeur de cette approche est le nombre prohibitif du nombre de solutions. La mthode de branch and bound (procdure par valuation et sparation progressive) consiste numrer ces solutions dun manire intelligente en ce sens, en utilisant certaines propits du problme en question, elle arrive liminer des solutions partielles qui ne mnent pas la solution que lon recherche. Bien entendu, dans le pire cas, on retombe toujours sur llimination explicite de toutes les solutions du problme.
Pour ce faire, cette mthode se dote dune fonction qui permet de mettre une borne sur certaine solutions pour les exclure de les maintenir comme des solutions potentielles. Bien entendu, la performance dune mthode de branch and bound depend, entre autres, de la qualit de cette fonction (de sa capacit dexclure des solutions partielles tt). Illustrons ce point, prenons lexemple du voyageur de commerce.
Dfinition : Soit un graphe G=(V,E). Un cycle est hamiltonien si et seulement si tous les sommets de G apparaissent une et seule fois dans ce cycle. Dfinition : Soit un graphe G=(V,E) valu. Le problme du voyageur de commerce consiste trouver un cycle hamiltonien dont la somme des poids est minimale.
Soit donc le graphe de la figure ci-dessous : C 4 4 E 8 D B 3 7 5 9 6 5 A
Nous pouvons rsoudre ce problme en commenant par exemple partir du sommet E. Soit la borne v pour ce sommet (on verra plus loin comment la trouver !) c'est--dire la valeur de toutes les solutions incluant le sommet E vont avoir un cot v . Le prochain sommet du cycle que nous recherchons est soit A, B, C ou D. Pour chacune de ces solutions partielles, nous calculons une nouvelle borne (signifiant que toutes les solutions comprenant cette solution partielle va avoir un cot cette nouvelle borne).
39
Initialement, nous pouvons mettre le cot de la meilleure solution trouve un trs grand nombre. Lide de cette mthode la suivante : toute solution partielle dont le cot est plus grand que celui de la meilleure solution trouve jusqu'`prsent va tre exclue de la recherche. Ce processus est continu jusqu' avoir une solution complte. Si le cot de cette solution complte est infrieure celui de la meilleure solution que nous avons, alors nous remplaons ce cot comme tant celui de la meilleure solution courante. Il existe plusieurs manires de dcider quelle solution partielle explorer en premier. Celle que nous allons dcrire ci-dessous est celle qui consiste choisir toujours la solution ayant la plus petite borne. Mais il existe dautres manires de procder. Les unes se valent que les autres. La partie cruciale de branch and bound est la qualit de la fonction F. Si elle est trop simple, probablement que lexclusion des solutions partielles se fera des moment avancs. Cela a pour effet de rallonger encore les temps dexcution des ces algorithmes. Une fonction F peut tre comme suit : Soit le cycle hamiltonien suivant : v1 , v 2, ,..., v n , v n +1 = v1 . Il est facile de voir que, quelque soit la solution, son cot est 1 n (arc vi1 + arc vi2 ) o 2 i =1 adjacents au sommet i ayant le plus petit poids.
arc vi1 et arc vi2 dsignent deux arcs
En commenant partir de E, on aura : Le cot est {(3+4)+(4+4)+(5+5)+(3+6)+(4+7)}= 22.5 Les prochain sommets dans le cycle peuvent tre : A, B, C ou D. Pour chacune des ces solutions partielles, une borne est calcule. Par exemple pour D, la nouvelle borne est : {(8+3)+(4+4)+(5+5)+(3+6)+(4+8)}= 25. Ceci est fait pour chacun des sommets. On obtient successivement : 22.5 pour le sommet C, 23 pour le sommet A et 22.5 pour le sommet B. Parmi ces quatre valeurs, nous allons explorer le sommet ayant la plus petite valeur, soit le sommet (remarquez quil existe dautre manires de procder dans le choix de la prochain solution partielle explorer; chacune a ses propres avantages et inconvnients. titre dexemple, nous pouvons citer DFS et BFS. Ce processus est ensuite rpt. Quand une solution complte est trouve, la meilleure solution courante est modifie si cela est ncessaire. Par exemple, dans notre exemple, la premire solution trouve a pour cot 26 remplaant ainsi lancienne valeur que nous avons initialise un grand nombre. Lide de Branch and Bound est rsume dans ce qui suit : Quand un sommet a une borne plus grande que cette valeur, il ny a plus lieu de le considrer tant donne que cette solution partielle ne mnera pas la solution minimale. Ce processus de gnration de solutions partielles, avec le calcul de leur borne, gnre une arborescence. Pour exemple ci-dessus, larborescence obtenue est la suivante :
40
41
Exercice : proposez une autre fonction F et la comparer celle prsente ci-dessus. Exercice : discuter la structure de donnes la mieux approprie pour implanter cette mthode, dans le contexte du problme de voyageur de commerce. Quels problmes, selon vous, cette mthode risque de poser lors de son excution ?
5. Concevoir des solutions en tant moins exigeant : Souvent on est en face dun dilemme pour rsoudre un problme: 1. obtenir la solution optimale mais, souvent, un prix extrmement lev en temps de calcul, comme cest le cas de la mthode de branch & bound. 2. ou alors obtenir une solution un prix raisonnable (en temps de calcul et espace). Seulement, souvent, cette solution produit des solutions qui ne sont pas optimales (solutions approches). Do le nom dapproche heuristique.
Une fois le choix de lapproche heuristique accept (pour certains problmes, ce choix est impos), ltape suivante est de savoir comment en concevoir une. Il existe plusieurs approches heuristiques. Les plus utilises sont : 1. mthodes voraces (gloutonnes) 2. mthodes itratives 3. mthodes lagrangiennes Celle qui nous intresse dans ce chapitre est la premire cite.
42
Solution : Une des solutions approches utilises consiste mettre les n tches dans une liste. Ensuite, ds quune machine devient libre, on lui affecte la premire tche de la liste. Illustration: Complexit : discuter en classe ! Qualit de la solution : Une manire dvaluer la qualit de la solution obtenue est de calculer lcart maximal qui spare le rsultat obtenu par cette heuristique et la rsultat obtenu par la solution optimale (quon ne connat pas). En gnral, lapproche utilis pour arriver ce genre de rsultats est lutilisation de borne infrieures (suprieures pour les problmes de maximisation).
En termes formels, si opt(I) est la valeur de la solution optimale et H(I) la valeur solution gnre par lheuristique H pour une instance quelconque I du problme, lanalyse dans le pire de lheuristique H consiste trouver deux valeurs et r tels que:
H ( I ) opt(I) +r
43
Rfrences et sources
1. Anne Dicky : Graphes et algorithmes, Conservatoire National des Arts et Mtiers Informatique - Cycle A - 1997/1998. 2. Joelle Cohen, Thorie des graphes et algorithmes MIAGE, 2002 3. Manoochehr Azmoodeh, abstract data types and algorithms, MacMillan, 1988. 4. T. H. Cormen et al. (1990): Algorithms, MCGraw Hill. 5. Anany Levitin (2003): Introduction to the design and analysis of algorithms, Addison Wesley. 6. O. Carton (2003): Notes de cours dalgorithmique avance en master de Bio-Info, Universit Paris
44