Université Mohamed Bachir El Ibrahimi Bordj Bou Arreridj 2eme année Informatique
Théorie des graphes Mehemmel Abbas 2014 / 2015
Chap 0 Un peu d’histoire Tiré du cours de Catherine Philippe & Christian Vassard IREM de Rouen 2
1
1736…. …problème des ponts de Königsberg, résolu par Euler en 1736 dans Solutio problematis ad geometriam situs pertinentis
Leonhard Euler (1707-1783)
1852… quatre couleurs suffisent-elles à colorier une carte de géographie de façon à ce que deux pays limitrophes ne soient pas coloriés de la même couleur ?
Augustus de Morgan (1806-1871)
En 1857… Hamilton invente un jeu, The icosian game, qu’il commercialise en 1859. Le jeu est constitué d’un dodécaèdre dont les 20 sommets portent le nom d’une grande ville dans le monde. Le but du jeu consistait à trouver un chemin sur les arêtes du dodécaèdre permettant de visiter chaque ville une fois et une fois seulement, en revenant à la ville de départ.
Hamilton (1805-1865)
1878… … le mot graphe est introduit pour la première fois par l’anglais J. J. Sylvester (1814-1897)
XXe siècle… La théorie des graphes devient une branche des mathématiques avec les travaux de König, Kuratowski et plus récemment de Berge, Erdös et Harary.
Quelques Domaines d‘applications
Le plan d’une ville, avec ses sens interdits…
Un autre exemple
Une carte routière…
Les graphes sont très utilisés dans l'informatique: • les réseaux, l'ordonnancement de processus, ... . modéliser des problèmes comme. • un réseau de chemin de fer ou un réseau routier. En utilise les graphes aussi en: • Chimie • Sociologie • Bio-informatique • Recherche opérationnelle • Réseaux de communication 13 • Fonctionnement de systèmes Autres domaines d’application… • • • • • • • • •
Géographie (cartographie), architecture (plans), linguistique (sémantique), etc. Le WEB (graphe des liens, calcul de pertinence dans les moteurs de recherche, etc.) Les réseaux optiques (producteurs-consommateurs, bande passante, etc.) Bases de données (dépendances) Bases de connaissances Techniques de compilation Imagerie numérique (scènes, compression) Grammaires de graphes (aspects dynamiques) Etc.
Modéliser une situation avec des graphes
15
Nous sommes en 3002. Il existe un transport interplanétaire entre les neuf planètes du système solaire. Des navires spatiaux assurent les liaisons suivantes : Pluton-Vénus, Uranus-Neptune, Terre-Mercure, Jupiter-Mars, Mercure-Vénus, Saturne-Neptune, Terre-Pluton, Saturne-Jupiter, Uranus-Mars, Pluton-Mercure. Peut-on partir de la Terre et arriver sur Mars ?
Vénus
Mercure
Pluton
Terre
Mars Neptune
Jupiter
Uranus Saturne
Loup, chèvre, chou Un passeur doit faire traverser une rivière à un loup, une chèvre et un chou, dans une barque si petite qu’il ne peut emporter que l’un d’eux à chaque voyage. Pour des raisons évidentes, il ne peut laisser le loup et la chèvre seuls sur une rive, pas plus que la chèvre et le chou. Comment s’y prend-il ?
LL C Chou rien LC C Chou Chou /// rien rien
LL LC C C /// Chou Chou Chou
LL L Chou Chou Chou /// C C C
C C C Chou Chou Chou /// L L L
LL L /// C C C Chou Chou Chou
C C C /// LL L Chou Chou Chou
Chou Chou /// L LC C Chou L C
rien /// LL LC C Chou Chou rien rien C Chou
Dans une réunion de 5 personnes, combien de poignées de mains sont échangées ? On suppose que tout le monde salue tout le monde… Même question avec 35 personnes.
Contenu : graphe complet, lemme des poignées de mains
Une personne Une poignée de mains
Comptons donc les arêtes de ce graphe…
Et les coups de pieds aux fesses ? Albert
C’est un graphe orienté… Edouard
Denis
Bernar
Charles
nombre de coups de pieds donnés = nombre de coups de pieds reçus = nombre d’arêtes (orientées)
Chap I Définitions de base 23
• Vocabulaire de base : Graphes, sommets, arêtes • Définition: Un graphe G (non orienté) est constitué d’un ensemble S = {s1, s2, ..., sn} de points, appelés sommets, et d’un ensemble A = {a1, a2, ..., am} d’arêtes, tels qu’à chaque arête ai sont associés deux éléments de S, appelés ses extrémités, et que nous noterons [sj , sk]i • sj et sk sont dits adjacents • Les deux extrémités peuvent être distinctes ou confondues ; • dans ce dernier cas, l’arête s’appelle une boucle. • Définition: L’ordre d’un graphe est le nombre de ses sommets. • Définition: Un graphe est dit simple si deux sommets distincts sont joints par au plus une arête et s’il est sans boucle. • Deux arêtes sont dites parallèles lorsqu’elles ont mêmes extrémités
24
• Exemple : Considérons le graphe G1 d’ordre 4 défini par : • S = {s1, s2, s3, s4}
et
A = {a, b, c, d, e}
• tel qu’aux arêtes a, b, c, d, e •
soient respectivement
associés [s1, s1], [s1, s2], [s1, s2], [s1, s3], [s2, s3].
• Une représentation possible de ce graphe est : l’arête a est une boucle
Le point s4 est un point isolé ,
25
• Exemple : Considérons le graphe G1 d’ordre 4 défini par : • S = {s1, s2, s3, s4}
et
A = {a, b, c, d, e}
• tel qu’aux arêtes a, b, c, d, e •
soient respectivement
associés [s1, s1], [s1, s2], [s1, s2], [s1, s3], [s2, s3].
• Une représentation possible de ce graphe est : b et c sont des arêtes ayant mêmes extrémités, [s1, s2] est une arête multiple,
26
• Exemple : Considérons le graphe G1 d’ordre 4 défini par : • S = {s1, s2, s3, s4}
et
A = {a, b, c, d, e}
• tel qu’aux arêtes a, b, c, d, e •
soient respectivement
associés [s1, s1], [s1, s2], [s1, s2], [s1, s3], [s2, s3].
• Une représentation possible de ce graphe est :
les sommets s1 et s2 sont adjacents, puisqu’ils sont reliés par une arête. ainsi que s1 et s3,
27
Représentation graphique • • • • •
Il existe une infinité de manières de représenter graphiquement un graphe. Exemple: Ensemble des sommets : V = { 1, 2, 3, 4, 5 } Ensemble des arêtes : E = { (1, 3), (1, 4), (1, 5), (2, 3), (3, 4), (3, 5), (4, 5) }
28
représentent le même graphe
représentent aussi le même graphe
29
Est-ce que les deux dessins représentent le même graphe?
30
Définitions Si l'arête e relie les sommets a et b, on dira que ces sommets sont adjacents, ou incidents avec e, On appelle ordre d'un graphe le nombre de sommets (n) de ce graphe. Ordre du graphe G =
5
Graphe G
31
• Un graphe simple est dit complet si tous ses sommets sont adjacents. • On nomme un graphe complet à n sommets un Kn graphe.
Un K5 Graphe
• Graphe complet K5 • V = {1, 2, 3, 4, 5} • E = {(1,2), (1,3),(1,4),(1,5),(2,3),(2,4), (2,5),(3,4),(3,5), (4,5)} 32
Degrés • Degré d'un sommet • Pour un graphe ou un multi graphe, on appelle degré du sommet v, et on note d(v), le nombre d'arêtes incidentes avec ce sommet. • Attention ! une boucle sur un sommet est comptée deux fois. • Dans un graphe simple, on peut aussi définir le degré d'un sommet comme étant le nombre de ses voisins (la taille de son voisinage). s1 est de degré 5, s2 de degré 3, s4 de degré 0. 33
Lemme des poignées de mains La somme des degrés des sommets d'un graphe est égale à deux fois le nombre d'arêtes.
d ( x) 2 * A
C’est un nombre pair
x X
Où X est l’ensemble des sommets du graphe et A l’ensemble des arêtes. Chaque arête du graphe incrémente de deux la somme des degrés. D'où le résultat. 34
Un graphe dont tous les sommets ont le même degré est dit régulier. Si le degré commun est k, alors on dit que le graphe est k-régulier. 35
Un graphe orienté est un graphe dont les arêtes ont un sens.
Albert
Edouard
Denis
Bernar
Charles
36
Chaînes et cycles • Une chaîne est une suite alternée de sommets et d'arêtes. • La longueur d’une chaîne est le nombre d’arêtes qui la composent. • Un cycle est une chaîne dont les arêtes sont distinctes et dont l'origine et l'extrémité sont confondues. • Une chaîne est élémentaire si chaque sommet y apparaît au plus une fois. • Une chaîne est simple si chaque arête apparaît au plus une fois.
37
Donner des exemples de: Chaîne Longueur Cycle Chaîne élémentaire Chaîne simple
38
Graphe Connexe: Un graphe est connexe s'il existe pour chaque paire de sommet une chaîne reliant chacun des deux sommets. Graphe non connexe V = { 1, 2, 3, 4, 5, 6 } E = { (1,3), (1,4), (2,3), (3,4), (5,6) }
C’est un graphe à 2 composantes connexes
39
• Théorème • Pour tout graphe ayant m arêtes, n sommets et p composantes connexes, on a : • μ(G) = m – n + p 0 • De plus, μ(G) = 0 si et seulement si G est sans cycles. • μ(G) est appelé le nombre cyclomatique. Prononcer « nu de G ». 40
Graphe partiel et sous-graphe
• Soit le graphe G = (V, E) • V = {v1, v2, v3, v4, v5} • E = {e1=(v1,v2), e2=(v2,v3), e3=(v1,v3), e4=(v3,v4), e5=(v3,v5)}
Graphe partiel de G V' = V E' = {e1, e4, e5}
H=(Y, B) est un graphe partiel de G= (V, E) ssi Y = V et B E 41
Graphe partiel et sous-graphe
• Soit le graphe G = (V, E) • V = {v1, v2, v3, v4, v5} • E = {e1=(v1,v2), e2=(v2,v3), e3=(v1,v3), e4=(v3,v4), e5=(v3,v5)}
Sous-graphe de G V' = {v1, v3, v4, v5} E' = {e3, e4, e5}
H = ( Y, B ) est un Sous graphe de G= ( V, E ) si Y V et B E 42
Graphe partiel et sous-graphe
• Soit le graphe G = (V, E) • V = {v1, v2, v3, v4, v5} • E = {e1=(v1,v2), e2=(v2,v3), e3=(v1,v3), e4=(v3,v4), e5=(v3,v5)}
Sous-graphe partiel de G V' = {v1, v2, v3, v4} E' = {e1, e4} 43
Graphe partiel et sous-graphe
• Soit le graphe G = (V, E) • V = {v1, v2, v3, v4, v5} • E = {e1=(v1,v2), e2=(v2,v3), e3=(v1,v3), e4=(v3,v4), e5=(v3,v5)}
Une clique de G V' = {v1, v2, v3} E' = {e1, e2, e3} clique un sous-graphe complet de G. 44
Graphe partiel et sous-graphe
• Soit le graphe G = (V, E) • V = {v1, v2, v3, v4, v5} • E = {e1=(v1,v2), e2=(v2,v3), e3=(v1,v3), e4=(v3,v4), e5=(v3,v5)}
Un stable de G V' = {v1, v4, v5} E' = {} 45
Matrices d’incidence sommet-arc • C’est une matrice A, de taille n × m. • On associe les sommets aux lignes, et les arcs aux colonnes. • L’écriture de cette matrice nécessite la numérotation des arcs; • la matrice d’incidence d’un graphe orienté A est définie par:
1 1 0 46
Matrices d’incidence sommet-arête • la matrice d’incidence d’un graphe non orienté A est définie par: é ê 1 2 ê 0
on parle de matrice d'incidence orientée et de matrice d'incidence non orientée.
47
48
Listes d'adjacences On peut aussi représenter un graphe en donnant pour chacun de ses sommets la liste des sommets auxquels il est adjacent. listes d'adjacences du graphe G: 1: 2: 3: 4: 5: 6:
2, 4, 6 4, 5 4 5 2
graphe G: 49
Matrice d'adjacence
M=
• caractéristiques: Elle est carrée: il y a autant de lignes que de colonnes. Il n'y a que des zéros sur la diagonale. Un 1 sur la diagonale indiquerait une boucle. Elle est symétrique pour les graphes non orientés (Mij = M 50 ji)
Matrice d'adjacence • On peut représenter un graphe par une matrice d'adjacences. • Une matrice (n x m) est un tableau de n lignes et m colonnes. • (i, j) désigne l'intersection de la ligne i et de la colonne j. • Dans une matrice d'adjacences, les lignes et les colonnes représentent les sommets du graphe. • Un 1 à la position (i, j) signifie que le sommet i est adjacent au sommet j. 51
• On a calculé ci-dessous les matrices M2 et M3. • Pour chacune de ces matrices, à quoi correspondent les nombres obtenus?
M2 =
52
• On a calculé ci-dessous les matrices M2 et M3. • Pour chacune de ces matrices, à quoi correspondent les nombres obtenus?
M3 =
Théorème Le coefficient général de Mk est le nombre de chemins (ou chaînes) de longueur k entre i et j. 53
Exercice: Décrivez les graphes ci-dessous par: des matrices d’incidences, des matrices d'adjacences et des listes d'adjacences.
54
Quelques types de graphes • Graphe biparti • V = {1, 2, 3, 4, 5} • E = {(1,2), (1,4), (2,3), (2,5), (3,4), (4,5)}
55
Graphe d'intervalles et graphe triangulé • Un graphe est un graphe triangulé si tout cycle de longueur > 3 admet une corde, c'est à dire une arête reliant deux sommets non consécutifs. • Soit une famille de segments (d'intervalles) d'une même droite du plan euclidien.
Propriété : un graphe représentatif d'intervalles est triangulé
56
5. Graphes eulériens • On dit qu'un graphe est eulérien s'il est possible de trouver un cycle passant une et une seule fois par toutes les arêtes. • On dit qu'un graphe est semi-eulérien s'il est possible de trouver une chaîne passant une et une seule fois par toutes les arêtes. • Plus simplement, on peut dire qu'un graphe est eulérien (ou semi-eulérien) s'il est possible de dessiner le graphe sans lever le crayon (et sans passer deux fois sur le même trait). 57
• Théorème Un graphe non orienté connexe possède une chaîne eulérienne si et seulement si le nombre de sommets de degré impair est égal à 0 ou 2. Il admet un cycle eulérien si et seulement si tous ses sommets ont un degré pair.
58
59
Donner le graphe du problème des ponts de Königsberg,
Graphes hamiltoniens • On dit qu'un graphe est hamiltonien s'il est possible de trouver un cycle passant une et une seule fois par tous les sommets. • On dit qu'un graphe est semi-hamiltonien s'il est possible de trouver une chaîne passant une et une seule fois par tous les sommets. • Un graphe possédant un sommet de degré 1 ne peut être hamiltonien. • Si un sommet dans un graphe est de degré 2, alors les deux arêtes incidentes à ce sommet doivent faire partie du cycle hamiltonien. • Les graphes complets Kn sont hamiltoniens. 61
• Théorème (Ore) • Soit G = (V, E) un graphe simple d'ordre n 3. • Si pour toute paire {x, y} de sommets non adjacents, on a d(x) + d(y) n, alors G est hamiltonien. • Corollaire (Dirac) • Soit G = (V, E) un graphe simple d'ordre n 3. Si pour tout sommet x de G, on a d(x) n/2, alors G est hamiltonien. • En effet, un tel graphe vérifie les conditions du théorème précédent. Si x et y ne sont pas adjacents, on a bien : • d(x) + d(y) n/2 + n/2 = n • Problème du voyageur de commerce • Le problème du voyageur de commerce (Traveling Salesman Problem en anglais) consiste à trouver le plus court cycle passant par tous les sommets dans un graphe où les arêtes sont pondérées. • On travaille souvent sur un graphe complet. 62
Graphes planaires • On dit qu'un graphe est planaire si on peut le dessiner dans le plan de sorte que ses arêtes ne se croisent pas. • Une carte, ou graphe planaire topologique, est une représentation particulière d'un multi-graphe planaire fini. • On dit qu'une carte est connexe si son graphe l'est. • Une carte divise le plan en plusieurs régions.
63
Graphes planaires • Exemple: la carte, avec six sommets et neuf arêtes, divise le plan en cinq régions (A, B, C, D, E). • On remarque que quatre régions sont limitées alors que la cinquième (E), extérieure au diagramme, ne l'est pas. • Le degré d'une région r, noté d(r), est la longueur du cycle qui limite r. Dans le graphe ci-contre, d(A) = 4, d(B) = 3, d(C) = 3, d(D) = 5, d(E) = 3. • Remarque: toute arête limite deux régions, ou est contenue dans une région et est alors comptée deux fois dans la chaîne fermée. 64
• Lemme • La somme des degrés des régions d'une carte connexe est égale à deux fois le nombre d'arêtes. • Théorème (Euler) • Euler a établi une formule qui relie le nombre de sommets S, le nombre d'arêtes A et le nombre de régions R d'une carte connexe. •
S-A+R=2
65
Théorème (Kuratowski) Un graphe est non planaire si et seulement si il contient un sousgraphe homéomorphe à K3,3 ou K5.
66
Graphes orientés (digraphes) • Un digraphe est fortement connexe, si toute paire ordonnée (a, b) de sommets distincts du graphe est reliée par au moins un chemin. En d'autres termes, tout sommet est atteignable depuis tous les autres sommets par au moins un chemin. • On appelle composante fortement connexe tout sous-graphe induit maximal fortement connexe (maximal signifie qu'il n'y a pas de sous-graphe induit connexe plus grand contenant les sommets de la composante). 67 • Soit un graphe orienté G(X, E). • On appelle cocycle d'un sommet l'ensemble des sommets qui lui sont adjacents ou l'ensemble des arcs qui lui sont incidents. On note:
• Les cocycles sont des cocycles de sommets. • Les cocycles sont des cocycles d'arcs. – Les deuxièmes se révèlent beaucoup plus utiles.
• Pour un 1-graphe, G peut être parfaitement déterminé par (X, ) , notation à la base d’une représentation informatique très utilisée, les listes d’adjacence 68
Listes d'adjacences
69
graphe valué
70
Graphes pondérés - graphes probabilistes • un graphe pondéré, un graphe, orienté ou non, dont les arêtes (ou les arcs) possèdent un poids. • "graphes valués", • "graphe probabiliste".
71
Exercice: • Algorithme qui renvoie la longueur minimal entre 2 sommets en utilisant la matrice des valeurs.
72
Parcours de graphes • Les parcours peuvent se faire de deux sortes,
parcours en largeur parcours en profondeur. • Les graphes peuvent contenir des cycles.
73
Parcours en largeur 1. à partir d'un sommet donné, 2. visiter tous les sommets successeurs. 3. On répète l'opération tant qu'il existe des sommets non visités.
• Les informations à prendre en compte : Un sommet déjà visité ne doit pas être revisité. On explore les sommets successeurs directs.
• Une file peut maintenir à jour la liste des sommets à visiter. 74
Exemple: parcourir le graphe en largeur en partant du sommet 1. Le parcours en largeur de ce graphe donnerait la liste suivante : 1 2 3 4 6 5 7 8. Une autre solution serait la suivante: 1 3 2 6 4 5 8 7. Elles sont toutes les deux valables.
75
On part du sommet 1, On liste tous les sommets successeurs, Il s'agit donc des sommets 2 et 3. Marquons les d'une couleur différente
76
On recommence par le sommet 2, le seul successeur est le sommet 4, On l'affiche et on le marque comme étant parcouru. On passe au sommet 3, Son successeur est le sommet 6 On l'affiche et on le marque Le sommet 4 a deux successeurs, le sommet 5 et le sommet 6. On ajoutera seulement le sommet 5 à la file des sommets à parcourir.
. . .
77
• Pour identifier les sommets parcourus, on utilise le coloriage. • Généralement, un sommet est blanc s'il n'a pas été parcouru et est noir dans le cas contraire. • Initialisation: Pour tous les sommets S du graphe faire S.couleur = blanc;
78
• Ajouter le sommet de départ à la file • on prend le sommet de la file et on y effectue les choses : parcourir la liste des successeurs Si de S : Si Si est blanc alors Si devient noir et on ajoute Si à la File.
• L'algorithme s'arrête donc tout naturellement lorsque la file devient vide.
79
• ParcoursLargeur(G : Graphe , S : Sommet ) { • F : File de sommets; • Initialiser (G); • S.couleur = Noir; • Ajouter S à F; • tant que F n'est pas vide faire • S = Defiler(F); • pour tous les successeurs Si de S faire • si (Si.couleur == Blanc ) alors • Si.couleur <- Noir; • Ajouter Si à F; • fin si • fin pour • fin tant que }
80
Donner un parcours en largeur de ce graphe
81
Exercice (TP) : • programmer cet algorithme en utilisant la matrice d’adjacence pour représenter un graphe.
82
Parcours en profondeur • Il s'agit d'un parcours où l'on explore un chemin jusqu'a ce que l'on ne puisse plus avancer. • Dans ce cas, il faut rebrousser chemin dans notre exploration et partir d'un sommet qui n'a pas été visité. • 1,2,4,5,7,8,6,3 • 1,3,6,4,5,8,7,2 83
Parcours en profondeur • Initialiser(G); • ParcoursProfondeur( Graphe G, Sommet S) { •
S.couleur <- Noir;
•
Pour tous les successeurs Si de S faire
•
Si Si.couleur == Blanc alors ParcoursProfondeur(G , Si);
• • •
Fin si Fin Pour }
84
• Exercice: • Dérouler l’algorithme pour les exemples suivants:
Refaire le même algorithme sans récursions; 85
• Composantes connexes • utiliser les algorithmes de parcours pour déterminer les composantes connexes d'un graphe. • Rappel : les composantes connexes d'un graphe sont les ensembles de sommets accessibles les uns depuis les autres. • on utilise l'algorithme de parcours en profondeur d'abord et on colorie les sommets rencontrés avec une couleur correspondant à la composante connexe courante. 86
• Composantes-Connexes Partir d'un sommet S'il n’est pas colorié alors choisir une couleur appliquer parcours en profondeur en marquant les sommets avec la couleur
87
Fin Chap I
88
C h a p II Les arbres 89
Les arbres Un arbre (non orienté) !
Une arborescence (orientée) ! 90
Les arbres
Définitions : Un arbre est un graphe non orienté dans lequel il existe une et une seule chaine entre toute paire de sommets. • Cette chaine sera donc simple, la plus courte, . . .
Une arborescence est un graphe orienté quasi-fortement connexe tel qu’il existe un et un seul chemin orienté de la racine vers tout autre sommet. • D’abord, il n’y a qu’une seule racine ! • On n’a pas de chemins multiples, ni de circuits !
Les arbres d’algorithmique sont des arborescences !
91
• Théorème • Les définitions suivantes sont équivalentes: pour tout graphe G = (V, E) à n sommets. 1. G est un arbre, 2. G est connexe et sans cycles, 3. G est connexe et comporte n-1 arêtes, 4. G est sans cycles et comporte n-1 arêtes, 5. chaque paire {u, v} de sommets distincts est reliée par une seule chaîne simple (et le graphe est sans boucles).
92
Quelques définitions des arbres Définition 6: Un graphe est connexe minimal s’il est connexe et n’a pas plus d’arêtes qu’aucun autre graphe connexe !
L’idée: si nous enlevons une arête de la chaine unique, nous cassons la connexité! Définition 7: Un graphe est connexe minimal s’il est connexe et comporte n-1 arêtes.
Définition 8: Un graphe est sans cycles, maximal s’il est sans cycles et n’a pas moins d’arêtes qu’aucun autre graphe sans cycles ! 93
Les arborescences
Une arborescence peut être caractérisée comme suit.
Elle possède (n-1) arcs.
Tous les sommets sauf un ont un degré entrant unitaire.
Un seul sommet a un degré entrant nul.
94
Les arborescences
Toute arborescence peut être transformée en un arbre !
Il suffit de changer les arcs en arêtes.
Nous aurons (n-1) arêtes.
Tout arbre peut être transformé en une arborescence en nous laissant le choix de la racine !
95
Les arbres de recouvrement
Un arbre de recouvrement ( AR ) d’un graphe G connexe est un sous-graphe de G qui comporte tous les sommets et qui a la propriété d’être un arbre.
Propriétés : Nous préservons la connexité ! Nous n’avons pas de cycles ! Nous avons un nombre minimal d’arêtes ! Le choix de l’AR n’est pas unique en général !
96
Les arbres de recouvrement
Un arbre de recouvrement ( AR ) d’un graphe G connexe est un sous-graphe de G qui comporte tous les sommets et qui a la propriété d’être un arbre.
Propriétés : Nous préservons la connexité ! Nous n’avons pas de cycles ! Nous avons un nombre minimal d’arêtes !
Un autre arbre de recouvrement !
97
Les arbres de recouvrement
Un arbre de recouvrement ( AR ) d’un graphe G connexe est un sous-graphe de G qui comporte tous les sommets et qui a la propriété d’être un arbre.
Propriétés : Nous préservons la connexité ! Nous n’avons pas de cycles ! Nous avons un nombre minimal d’arêtes ! Le choix de l’AR n’est pas unique en général ! Un arbre de recouvrement !
98
Les arbres de recouvrement
Un arbre de recouvrement ( AR ) d’un graphe G connexe est un sous-graphe de G qui comporte tous les sommets et qui a la propriété d’être un arbre.
Propriétés : Nous préservons la connexité ! Nous n’avons pas de cycles ! Nous avons un nombre minimal d’arêtes ! Le choix de l’AR n’est pas unique en général !
Un arbre de recouvrement !
Un autre arbre de recouvrement !
99
Arbre de poids minimal ou arbre de recouvrement minimal
• Problème : • Tracer l’arbre le plus court qui touche tous les nœuds, c-à-d. minimiser la longueur totale des arcs contenus dans l’arbre. • 1. Algorithme de Kruskal; • 2. Algorithme de Prim 100
Algorithme de Kruskal 1. Trier les arcs en ordre croissant de poids ; 2. Construire un arbre en sélectionnant les arcs selon l’ordre établi à l’étape 1.
101
Algorithme de Kruskal 1. Trier les arcs { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) }
102
Algorithme de Kruskal 2. Construire un arbre T = { } { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) }
103
Algorithme de Kruskal On évalue (3,4) : { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) } T= { (3,4) }
104
Algorithme de Kruskal On évalue (3,4) : { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) } T= { (3,4) }
105
Algorithme de Kruskal On évalue (2,4) : { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) } T= {(3,4), (2,4)}
106
Algorithme de Kruskal On évalue (4,5): { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) } T= { (3,4), (2,4), (4,5) }
107
Algorithme de Kruskal On évalue (2,3): { (3,4), (2,4), (4,5), (2,3), (1,3), (3,5), (1,2), (5,6),(4,6) } T= { (3,4), (2,4), (4,5) }
108
Algorithme de Kruskal On évalue (1,3): { (3,4), (2,4), (4,5), (2,3), (1,3) , (3,5), (1,2), (5,6),(4,6) } T= { (3,4), (2,4), (4,5), (1,3) }
109
Algorithme de Kruskal On évalue (3,5): { (3,4), (2,4), (4,5),(2,3), (1,3) , (3,5) , (1,2), (5,6),(4,6) } T= { (3,4), (2,4), (4,5), (1,3) }
110
Algorithme de Kruskal On évalue (1,2): { (3,4), (2,4), (4,5),(2,3), (1,3) ,(3,5), (1,2), (5,6) ,(4,6) } T= { (3,4), (2,4), (4,5), (1,3) }
111
Algorithme de Kruskal On évalue (5,6): { (3,4), (2,4), (4,5),(2,3), (1,3) ,(3,5), (1,2), (5,6) ,(4,6) } T= { (3,4), (2,4), (4,5), (1,3), (5,6) }
112
Algorithme de Kruskal On évalue (4,6): { (3,4), (2,4), (4,5), (2,3), (1,3) , (3,5), (1,2), (5,6), (4,6)} T= { (3,4), (2,4), (4,5), (1,3), (5,6) }
113
Algorithme de Prim • 0. Initialiser T={}, S={} et W= V (sommets) • 1. Choisir un nœud i W, poser S = { i } et W = W \ { i } • 2. Choisir un nœud j W tel que l’arc (i, j), où i S, ait le ci,j le plus petit; • 3. Si (i,j) ne forme pas de cycle alors inclure cet arc dans • l’arbre, i.e. T = T (i,j), j S et W = W \ { j } et aller à • l’étape 4; • sinon exclure l’arc et retourner à l’étape 2; • 4. Si S = V alors l’arbre de poids minimal est trouvé; sinon • retourner à l ’étape 2. 114
Algorithme de Prim S ={} W = { 1, 2, 3, 4, 5, 6 } T= {}
115
Algorithme de Prim S ={1} W = { 2, 3, 4, 5, 6 } T= {}
116
Algorithme de Prim S = { 1,3 } W = { 2, 4, 5, 6 } T = { (1,3) }
117
Algorithme de Prim S = { 1,3 } W = { 2, 4, 5, 6 } T = { (1,3), (3,4) }
118
Algorithme de Prim S = { 1, 3, 4} W = { 2, 5, 6 } T = { (1,3), (3,4) }
119
Algorithme de Prim S = { 1, 3, 4} W = { 2, 5, 6 } T = { (1,3), (3,4), (2,4) }
120
Algorithme de Prim S = { 1, 3, 4, 2 } W = { 5, 6 } T = { (1,3), (3,4), (2,4) }
121
Algorithme de Prim S = { 1, 3, 4, 2 } W={6} T = { (1,3), (3,4), (2,4), (4,5) }
122
Algorithme de Prim S = { 1, 3, 4, 2, 5 } W={6} T = { (1,3), (3,4), (2,4), (4,5) }
123
Algorithme de Prim S = { 1, 3, 4, 2, 5 } W={6} T = { (1,3), (3,4), (2,4), (4,5) }
124
Algorithme de Prim S = { 1, 3, 4, 2, 5 } W={6} T = { (1,3), (3,4), (2,4), (4,5) }
125
Algorithme de Prim S = { 1, 3, 4, 2, 5 } W={6} T = { (1,3), (3,4), (2,4), (4,5) }
126
Algorithme de Prim S = { 1, 3, 4, 2, 5 } W={6} T = { (1,3), (3,4), (2,4), (4,5) }
127
Algorithme de Prim S = { 1, 3, 4, 2, 5, 6 } W={} T = { (1,3), (3,4), (2,4), (4,5), (5,6) }
128
Algorithme de Prim S = { 1, 3, 4, 2, 5, 6 } ; W={} T = { (1,3), (3,4), (2,4), (4,5), (5,6) } Poids de l’arbre = 27 unités
129
Théorème sur les coupes • Un arbre T* est un arbre de poids minimal, si et seulement si il satisfait la condition d’optimalité suivante sur les coupes : • (i, j) T* , ci,j ck,l pour chaque (k, l) appartenant à la coupe obtenue de l’élimination de l’arc (i, j) de T*.
130
Théorème sur les coupes
131
Théorème sur les coupes Ici on a (i, j) = (2,4) et (k, l) {(2,4), (3,4), (3,5)}
Poids de T* = (24 + 4) (24 + 6) unités (24 + 7) unités
132
Théorème sur les coupes
133
Théorème sur les coupes
134
Théorème sur les chemins • Un arbre T* est un arbre de poids minimal, si et seulement si il satisfait la condition d’optimalité suivante sur les chemins : • (k, l) G(V,E) tel que (k, l) T* , on a ci,j ck,l pour chaque (i, j) appartenant au chemin sur l’arbre T* reliant k et l.
135
Théorème sur les chemins
136
Théorème sur les chemins
137
Théorème sur les chemins
138
Fin Chap II
139
Chap III Le Problème du Plus courts chemins 140
Problème du Plus courts chemins Étant donné un Graphe valué: G = (S,A,v) avec valuation v:AR Source du graphe : s S Problème: pour tout t S calculer
(s, t) = min { v(c) ; c chemin de s à t } {+}
Exemple: 3 s
a 1 1
5
b
5 1
5 c
Coûts
5
3
3
0 s
3 a 1 1
5 1
5
d
3
3
c 4
8 b
5
5
3 d 9
141
Arbres de plus courts chemins Arbres de racine s les branches sont des chemins de coût minimal
0 s
3
3 a 1 1
5 1
5 3
c 4
8 b
5
5
3 d 9
0 s
3
3 a 1 1
5 1
5 3
c 4
8 b
5
5
3 d 9 142
Existence Proposition
pour tout t S (s, t) > -
ssi le graphe n’a pas de circuit de coût < 0 accessible depuis s a
3
1 1
s
5
b
5 1
5 c
5
-3 d
3
143
Propriétés de base Propriété 1 : G = (S, A, v) soit c un plus court chemin de p à r dont l’avantdernier sommet est q Alors (p, r) = (p, q) + v(q, r) p
q r
Propriété 2 : G = (S, A, v) soit c un chemin de p à r dont l’avant-dernier sommet est q Alors (p, r) (p, q) + v(q, r)
144
Relaxation Calcul des (s, t) par approximations successives t S d(t) = estimation de (s, t) (t) = prédécesseur de t : avant-dernier sommet d’un chemin de s à t ayant pour coût d(t) Initialisation de d et INIT
pour chaque t S faire { d(t) ; (t) nil;} d(s) 0; Relaxation de l’arc (q, r) s RELAX(q, r) si d(q) + v(q, r) < d(r) alors { d(r) d(q) + v(q, r) ; (r) q ; }
d(r) r
q d(q) 145
Algorithme de Dijkstra Condition : v(p, q) 0 pour tout arc (p, q) début INIT; QS; // l’ensemble de Sommets tant que Q faire { q MINd (Q) ; Q Q - {q } ; pour chaque r successeur de q faire RELAX(q, r) ; } fin 146
Exemple 1: a
3
0 s
1
b
5 5
1
1
5
3 a
3
0 s
5
c
3
1 1
3
d b
5 5 1
5 c 5
3
S={s,a,b, c, d } Q={s,a,b, c, d } d = {0 , , , , } = {nil , nil , nil ,nil ,nil }
5
3 d
S={s,a,b, c, d } Q={ a,b,c, d } d = {0, 3, , 5 , } = {nil , s , nil ,s , nil }
147
Exemple 1 suite: 3
0 s
3 a 1 1
5 1
5 3
0 s
3
c 5 3 a 1 1
5
3
3 d
8 b
5 5 1
5 c 4
b
5
5
3 d
S={s,a,b, c, d } Q={ a,b, c, d } d = {0, 3, , 5 , } = {nil , s , nil ,s , nil }
S={s,a,b, c, d } Q={ b, c, d } d = {0, 3, 8 , 4 , } = {nil , s , a , a , nil } 148
Exemple 1 suite: 3 a
3
0 s
1 1
5 1
5 3
3
0 s
c 4 3 a 1 1
5
3
3 d
8 b
5 5 1
5 c 4
8 b
5
5
3 d 9
S={s,a,b, c, d } Q={ b, c, d } d = {0, 3, 8 , 4 , } = {nil , s , a , a , nil }
S={s,a,b, c, Q={ b , d = {0, 3 , 8 , 4 , = {nil , s , a , a ,
d } d } 9} c} 149
Exemple 1 suite: 0 s
3
3 a 1 1
5 1
5 3
c 4
8 b
5
5
3 d 9
a
b
c
d
s
S={s,a,b, c, Q={ b , d = {0, 3 , 8 , 4 , = {nil , s , a , a ,
d } d } 9} c}
S={s,a,b, c, Q={ d = {0, 3 , 8 , 4 , = {nil , s , a , a , puis Q =
d d 9 c
} } } } 150
Implémentation Si |S| = n et |V| = m Par matrice d'adjacence temps global O(n2) Par listes de successeurs Q : file de priorité (tas) n opérations MINd O( n . log (n)) m opérations RELAX O((m). log (n)) temps global O ((n + m) . log (n)) 151
Exemple 2
152
Algorithme de Bellman-Ford L’algorithme de DIJKSTRA MOORE ne permet pas de considérer les arcs négatifs, car une fois qu’un sommet est marqué on ne peut changer ce marquage lors des itérations suivantes. fixation d’étiquettes. On considère donc ici un algorithme qui permet un marquage qui n’est pas définitif tant que le programme n’est pas déterminé (le marquage est modifié itérativement). correction d’étiquettes. L’ algorithme de BELLMAN-FORD est valable pour des graphes sans circuit, valués par des longueurs quelconques. 153
Notations : S = L’ensemble de n sommets est numéroté de 1 à n. (p) = Sommet précédant p sur le plus court chemin de l’origine à p. d = Plus courte distance de l’origine aux autre sommets.
154
Initialisation : n = nombre de sommets de G = tableau initialisé à 0 d = tableau des distances initialisé à + (sauf d(s) = 0) W = matrice des poids des arcs ( si l’arc n’existe pas) Traitement : k = 1 tant que k ≤ n et il y a eu des modifications à l’étape précédente pour tout sommet x faire pour tout y successeur de x faire si d(x) +W(x, y) < d(y) alors d(y) = d(x) +W(x, y) (y) = x fin fin fin k=k+1 Fin Temps : O( n . m ) 155
Exemple 1 3
0 s
a 1 -1
5 -1
5 -3
c
b
5
5
3 d
0 s
3
3 a 1 -1
5 -1
5 -3
c 4
8 b
5
5
3 d 7
Étape 1 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s)
156
Exemple 1 (suite) 3
0 s
3 a 1 -1
5 -1
5 c 4
-3
8 b
5
5
3 d 7
3
0 s
3 a 1 -1
5 -1
5 c 4
-3
8 b
5
5
3 d 7
Étape 2 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) pas de réduction possible : coûts corrects 157
Exemple 2 0 s
3
a 1 1
5 1
5 3
c
b
5
5
-3 d
0 s
3
3 a 1 1
5 1
5 3
c 4
6 b
5
5
-3 d 9
Étape 1 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s)
158
Exemple 2 (suite) 0 s
3
3 a 1 1
5 1
5 c 4
3
6 b
5
5
-3
0 s
3
3 a 1 1
5 1
5
d 9
c 4
3
4 b
5
5
-3 d 7
Étape 2 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s)
159
Exemple 2 (suite) 0 s
3
3 a 1 1
5 1
5 3
c 4
4 b
5
5
-3 d 7
0 s
3
3 a 1 1
5 1
5 3
c 4
2 b
5
5
-3 d 5
Étape 3 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s)
160
Exemple 2 (suite) 0 s
3
3 a 1 1
5 1
5 3
c 4
2 b
5
5
-3
0 s
d 5
3
3 a
5
1 1
1
5 3
0 b
5
5
c 4
-3 d 3
Étape 4 relaxation de tous les arcs dans l’ordre : (s,a) (s,c) (a,b) (a,c) (b,d) (c,a) (c,b) (c,d) (d,b) (d,s) réduction possible : cycle de coût négatif 161
Graphes acycliques Tri topologique • Théorème: Soit G(X; A) un graphe orienté sans circuit. G possède un tri topologique, c'est à dire un ordre (x1; x2; … ; xn) sur les sommets tel que tous les arcs de G sont orientés dans le sens croissant de l'ordre : • pour tout arc (xi , xj) A , on a xi < xj.
3
-6
a
s
-1
5 -1
5 c
b
5
d
-3
162
Graphes acycliques Aucune condition : pour tout arc (p, q), v (p, q) R Calcul après ordre topologique début INIT; pour chaque q S en ordre topologique faire pour chaque r successeur de q faire RELAX(q, r) ; Fin Temps : O(|S |+ |A|) chaque sommet et chaque arc est examiné une fois 163
Exemple 3
-6
a
s
-1
5 -1
5 c
b
5
Ordre topologique c, s, a, b, d
d
-3
5 -1 c
5
s
3
a -3
-6
b
-1
d
5 164
Calcul des coûts 5 c
-1 5
0 s
a -6
3 -3
b
d
-1
5
Examen de c
5 c
-1 5
0 s
a -6
3 -3
Examen de s
c
-1 5
0 s
-3
-1
d
-1
-3 d
5 5 3 a -6
3
b
b
5
165
Calcul des coûts (suite) 5 Examen de a
c
-1 5
0 s
3 a -6
3 -3
-3 b -1
-3 d
-3 b -1
-4 d
5 5
Examen de b
c
-1 5
0 s
3 a -6
3 -3
5
Examen de d inutile 166
Cycle et circuit • Un cycle est une chaîne telle que : le même arc ne figure pas deux fois dans la séquence ; les deux sommets aux extrémités de la chaîne coïncident.
• Un cycle élémentaire est un cycle ne rencontrant pas deux fois le même sommet (excepté le sommet initial qui coïncide nécessairement avec le sommet final).
167
Exemples • C1 = (1,5,4) est un cycle élémentaire de longueur 3 • C2 = (1,2,7,9,8,3) est un cycle élémentaire de longueur 5 • (1,5,6,2,5,4) n'est pas un cycle • C3 = (3, 4, 9, 7, 6. 8) est un cycle de longueur 7 qui n'est pas élémentaire
168
Notation Vectorielle • Les arcs du graphe étant numérotés de 1 à m, on peut faire correspondre à tout cycle un m-uplet (un "vecteur") composé de -1, 1 et 0 de la manière suivante : • Si l'arc n'appartient pas au cycle, on met un "0" • Si l'arc appartient au cycle et est parcouru dans le bon sens (on le qualifie alors de "direct"), on met un +1 • Si l'arc appartient au cycle mais parcouru dans le mauvais sens (on le qualifie alors de "inverse"), on met un -1
169
• Exemples : • •
C1 = (1,5,4) C1 = (1, 0, 0, -1, 1, 0, 0, 0, 0)
• •
C2 = (1,2,7,9,8,3)
C2 = (1, 1, 1, 0, 0, 0, 1, 1, 1)
• C3 = (3, 4, 9, 7, 6. 8) • et C3 = (0, 0, 1, 1, 0, -1, -1, 1, -1)
170
• On peut donc assimiler un cycle à un vecteur et définir la somme (vectorielle) de 2 ou plusieurs cycles. • Exemple : C3 = (3, 4, 9, 7, 6. 8) • est la somme du cycle (3,4,8) et du cycle (9,7,6). •
(0,0,1,1,0,0,0,1,0) + (0,0,0,0,0,-1,-1,0,-1) = (0,0,1,1,0,-1,-1,1,-1)
• Propriétés: Tout cycle est la somme de cycles élémentaires sans arc commun. Un cycle est élémentaire si et seulement s'il est minimal. 171
• On peut donc définir une base de cycles (au sens vectoriel) comme étant • une famille de cycles libre (tous les cycles indépendants, aucun ne peut se définir comme combinaison linéaire des autres) • et génératrice (tout cycle peut s'écrire comme combinaison linéaire des cycles de la famille). • Le Cardinal (Nombre d'éléments) commun de toutes les bases de cycles sera appelé nombre cyclomatique et noté μ.
172
• Propriété : Soit un graphe G d'ordre n (n sommets) avec m arcs et p composantes connexes: μ(G) = m - n + p . • Définition: Soit A un ensemble de sommets du graphe, on appellera cocycle associé à A, qu'on notera ω(A), l'ensemble des arcs incidents à A, ceux qui quittent A seront notés positivement et ceux qui pointent vers A seront notés négativement. • Un cocycle c'est donc l'ensemble des arcs qui relient A aux autres sommets du graphe; si on enlève les arcs du cocycle on "déconnecte" A. • Cycle et cocycle sont des notions duales. 173
• Exemple : En réutilisant le graphe ci-dessus, si A = {b, e} ω(A) = {-1 , +2 , -4 , +6 , +8 , -9} • On peut, bien sûr appliquer la notation vectorielle définie pour les cycles, aux cocycles; • on obtiendrait pour l'exemple ci-dessus le vecteur : • (-1,1,0,-1,0,1,0,1,-1).
174
• Définition : Un cocycle sera dit élémentaire quand il est composé d'arcs reliant deux sous-ensembles de sommets connexes qui partitionnent une composante connexe du graphe (donc tous les sommets en cas de graphe connexe). • Le cocycle donné dans l'exemple n'est pas élémentaire parce qu'il est composé d'arcs reliant {b, e} à {a, c, d, f} • {b,e} est connexe, • ce n'est pas le cas de {a, c, d, f}. • Le cocycle associé à {a, b, d} dont la notation vectorielle est (0, 1, 0, 1, 1, 0, 0, -1, 0) est élémentaire. 175 • Le Cardinal (Nombre d'éléments) commun de toutes les bases de cocycles sera appelé nombre cocyclomatique et noté λ • Soit un graphe G d'ordre n (n sommets) avec p composantes connexes: λ(G) = n - p. • • • •
Exercice: 1) Déterminer tous les cycles élémentaires 2) Extrayez-en une base 3) Déterminer tous les cocycles élémentaires • 4) Extrayez-en une base
176
Et 3!
177
C h a p IV Réseaux de flots Problème du flot maximum
178
PROBLEME DE FLOTS 1.
Les réseaux de transport
2.
Le flot maximum et la coupe minimum
3.
L'algorithme de Ford et Fulkerson
179
Les réseaux de transports • Réseau de transport : graphe orienté avec pour chaque arc une capacité. • La capacité c(a) est un entier positif ou nul. • Il y a aussi une source s et un puits t. • Aucun arc n'arrive à la source • Et aucun arc ne quitte le puits.
Réseau de transport avec les capacités 180
• Un flot est une fonction entière positive ou nulle f définie sur les arcs satisfaisant : • Contrainte de capacité:
f(a) c(a) ;
Pour le graphe si dessous: 11 16, 8 13, 0 10, 12 12 , … , 4 4
Un flot sur le réseau de transport 181
Conservation du flot: pour tout sommet autre que s et t, la somme des flots sur les arcs entrants et la somme des flots sur les arcs sortants sont égales. Exemples : circuits électriques ou hydrauliques, réseaux de communication, modélisation de transports Sommet A : 11+1 = 12 + 0 , sommet C: 12+7=4+15
Un flot sur le réseau de transport 182
Quand deux arcs en sens inverse relient deux sommets, on peut toujours annuler la fonction flot sur l'un des deux. Propriété : la somme des flots sur les arcs sortant de source et la somme des flots sur les arcs arrivant au puits sont égales ; cette valeur est la valeur du flot | f | ;
Un flot sur le réseau de transport 183
Une coupe est une partition de l'ensemble des sommets en 2 parties disjointes, l'une contenant la source et l'autre le puit: EF=A, EF= ;
sE, tF
La capacité C(E, F) d'une coupe est la somme des capacités des arcs de E a F.
Un flot sur le réseau de transport
C(E, F) = 26
184
Propriété : Le flux de E à F dans un flot f est :
f (E, F )
f (u )
uExF
et le flux orienté de la coupe (E , F) ou ( flot net traversant la coupe ) est:
| f | ( E , F ) f ( E , F ) f ( F , E )
C(E, F) = 12+14 = 26 f(E, F) = 12+11 = 23 (E, F) = | f | = (12+11) - 4 = 19
Un flot sur le réseau de transport 185
La deuxième propriété est donc que le flot net traversant une coupe ne dépend pas de la coupe. Tout flot a pour valeur Vf = f( {s}, X\{s} ) = ( {s}, X\{s} ). Lemme: Plus généralement Vf = ( E, F) pour toute coupe. | f | est inférieur à la capacité de n'importe quelle coupe.
Un flot sur le réseau de transport | f | = (12+7+4) – 4 = 19
186
Le flot maximum et la coupe minimum Il existe toujours un flot possible qui est le flot nul. Problème : comment trouver un flot qui a la valeur maximum ? Recherche d'un chemin améliorant. Déterminer le réseau résiduel : Un flot est saturé si sur tout chemin de s a t il existe un arc a tel que f(a) = c(a).
187
pour chaque arc a = uv, f(a) ≤ c(a), on peut augmenter le flot de c(a) - f(a), et on peut le diminuer de f(a), donc faire passer un flot f(a) sur un arc -a = vu. Si cet arc existe déjà avec une capacité c(-a), celle-ci s'ajoute à f(a).
Le flot
Le réseau résiduel correspondant 188
Le graphe orienté avec ces capacités est le réseau résiduel. On cherche un chemin de s à t dans le réseau résiduel. Il correspond à une possibilité d'amélioration du flot en modifiant de la valeur du minimum des capacités résiduelles sur le chemin.
Le réseau résiduel 189
Un chemin améliorant
Le flot après amélioration 190
Le nouveau réseau résiduel
Dans ce réseau, il n'y a pas de chemin de s à t, donc pas de chemin améliorant.
191
Théorème (flot maximum et coupe minimum) Si f est un flot dans un réseau de transport, les trois conditions suivantes sont équivalentes : 1. f est un flot maximum ; 2. Le réseau résiduel de f ne contient aucun chemin améliorant ; 3. Il existe une coupe E/F dont la capacité vaut | f |. Remarque : La condition 3. implique que | f | est la valeur minimum des capacités des coupes du réseau, puisqu'on sait déjà que | f | est inférieur à la capacité de n'importe quelle coupe. Valeur du flot maximal = Capacité de la coupe minimale. 192
L'algorithme de Ford et Fulkerson o On part d'un flot quelconque (éventuellement nul) ; o On fabrique le réseau résiduel ; o On cherche un chemin améliorant ; o On itère jusqu'à ce qu'on ne trouve plus de tel chemin.
193
Variantes et applications : Parfois, il y a plusieurs sources et plusieurs puits. On peut dans ce cas rajouter une "super-source" et un "superpuits" reliés respectivement aux sources et aux puits par des arcs de capacité infinie.
Adjonction d'une super-source et d'un super-puits 194
Valeur de ce flot?
195
Flot maximum?
196