Vous êtes sur la page 1sur 25

Algorithmique des graphes

I. Introduction et rappels
Définition 1 : graphe orienté
Soit E un ensemble fini et R ⊆ E × E une relation dans E alors le couple G = < E , R > est un
graphe orienté (simple). E est l'ensemble des sommets de G. R est l’ensemble des arcs de G.

Notation

< x, y >∈R ⇔ xRy ⇔ x→y (x est le prédécesseur de y, y est le successeur de x)

R(x) = { y | < x, y > ∈ R } est l’ensemble des successeurs de x

R-1(y) = { x | < x, y > ∈ R } est l’ensemble des prédécesseurs de y

Exemple

E = { 1, 2, 3, 4, 5, 6 , 7 }

R = { < 1, 3 >, < 1, 6 >, < 3, 1 >, < 3, 7 >, < 4, 5 >, < 5, 5 > < 6, 1 >, < 6, 3 >, < 6, 7 > }

R(1) = { 3, 6 } R(2) = Ø R(3) = { 1, 7 } … R(6) = { 1, 3, 7 } R(7) = Ø

R-1(1) = { 3, 6 } R-1(2) = Ø R-1(3) = { 1, 6 } … R-1(6) = { 1 } R-


1
(7) = { 3, 6 }

Définition 2 : demi-degrés et degré d’un sommet


Soit G = < E, R > et x∈E.

di(x) = |R-1(x)| est le demi-degré intérieur de x.

de(x) = |R(x)| est le demi-degré extérieur de x.

d(x) = di(x) + de(x) est le degré de x (la somme des demi-degrés intérieur et extérieur).

Définition 3 : sous-graphe
Soit G = < E, R > et A ⊂ E. Le sous-graphe engendré par A est le graphe GA = < A, RA > tel que RA
= R ∩ { A x A } i.e. les sommets de E - A et les arcs associés sont supprimés.

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 1


Exemple avec le graphe précédent et A = { 1, 2, 3, 5, 7 }

Définition 4 : graphe partiel


Soit G = < E, R > et L ⊂ R, le graphe partiel engendré par L (sous-ensemble d'arcs)

est le graphe GL = < E, L >

Exemple avec L = { < 1, 3 > , < 1, 6 > , < 5, 5 > , < 6, 1 > , < 6, 7 > }

Définition 5 : chemin
Un chemin de longueur k ≥ 0 est une suite d'arcs ( α1, α2, … ,αk ) telle que

∀ αi ( 1 ≤ i ≤ k - 1 ), l'extrémité de αi est l'origine de αi+1.

Remarques

• Si αi ≠ αj pour i ≠ j alors le chemin est simple (élémentaire)

• Pour k > 0, le chemin peut-être codé par la suite des sommets ( x0, x1, … , xk ) telle que

αi = ( xi-1, xi )

Définition 6 : cycle (ou circuit)


Un chemin non vide codé par ( x0, x1, … , xk ) est un cycle (ou circuit) si x0 = xk. Si xi ≠ xj pour ( i,
j ) ≠ ( 0, k ) alors le cycle est élémentaire (chaque sommet n’apparaît qu’une fois).

Définition 7 : circuit hamiltonien R+ = UR i

i≥1
Un cycle élémentaire d’un graphe G est dit hamiltonien s’il contient tous les sommets de G.

Remarque — TSP (Traveling Salesman Problem) — Etant donné un graphe G, déterminer parmi
tous les circuits hamiltoniens, un circuit particulier qui minimise un coût (distance).

Définition 8 : fermeture transitive


La fermeture transitive de G = < E, R > est le graphe G+ = < E, R+ > tel que

∀ xR+y⇔ <x, y > ∈ R+ ⇔ ∃ un chemin non vide de x à y

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 2


⇔ xRy ∨ xR2y ∨ … ∨ xRiy ∨ …

Rappel

Soit R1 et R2 deux relations binaires sur l’ensemble E,

le produit R1∙R2 = { < x, y > | ∃z tel que < x, z >∈R1 et < z, y > ∈ R2 }

Si R1 = R2 = R alors on note R∙R par R2.

Exemple

Définition 9 : fermeture transitive réflexive


La fermeture transitive réflexive de G est G* = < E, R* > telle que

xR*y ⇔ x = y ou ∃ un chemin non vide de x à y

Définition 10 : équivalence
Soit G = < E, R > x, y∈E

⎧∃ un chem in de x à y
x et y sont équivalents si x = y ou ⎨
⎪∃ un chem in de y à x

Exemple

1 et 6 sont équivalents. {1, 3, 6} est une classe d’équivalence.

Définition 11 : forte connectivité


Une composante fortement connexe de G est un sous-graphe de G engendré par une classe
d’équivalence.

Remarque

∃ un chemin entre 2 sommets quelconques d’une composante fortement connexe.

Définition 12 : graphe non orienté


Soit E un ensemble fini.

Si R = { {x, y} | x∈E et y∈E } alors G = < E, R > est un graphe non orienté.

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 3


E : ensemble de sommets

R : ensemble d’arêtes

Exemple

Définition 13 : graphe valué


Soit G = < E, R > un graphe orienté (ou non orienté), Vs et Va deux ensembles,

une valuation des sommets caractérisée par la fonction vs : E → Vs

une valuation des arcs (ou des arêtes) caractérisée par la fonction va : E → Va

alors G = < E, R, Vs, Va, vs, va > est un graphe valué (pondéré).

Définition 14 : graphe bipartite


Soit G = < E, R > un graphe. Si ∃ une partition de E en E1 et en E2 ( E1∩E2 = Ø et E1∪E2 = E ) telle
que ∀ x, y∈Ei ( i = 1, 2 ) ( x et y ne sont pas incidents / adjacents dans Ei - {x, y} ∉ R )

alors G est un graphe bipartite.

Définition 15 : isomorphisme
G = < E, R > et G’ = < E’, R’ > sont isomorphes si ∃ une bijection f : E → E’ telle que :

(u, v)∈R ⇔ (f(u), f(v))∈R’

Exemple

Définition 16 : graphe complet (clique)


G = < E, R > est un graphe complet si et seulement si ∀ x, y∈E, x≠y ⇒ {x, y}∈R

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 4


Remarque — Problème MaxClique — Etant donné un graphe G = < E, R >, déterminer le sous-
graphe complet (clique) de taille maximum.

Exemple

Définition 17 : graphe planaire


Soit G un graphe, G est dit planaire si G peut être dessiné sur un plan (2D) sans croisement
d’arêtes.

Exemples

Théorème

Tout graphe non planaire contient une copie d’au moins un des deux graphes K5 et K3∙3

Définition 18 : hypergraphe
Soit E un ensemble fini, F = {E1, … , En} une famille de parties de E (Ei ⊆ E pour 1 ≤ i ≤ n) telle
que

Ei ≠ Ø et U Ei = E
1≤i≤n

alors H = < E, F > est un hypergraphe, E : ensemble des sommets, F : ensemble des arêtes.

Exemple

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 5


{ s1, s2, s3, s4 } ⎧
⎪{ s1, s2, s3} { s2, s3} { s1, s4 } { s4 } ⎫

,⎨ , , , ⎬
E ⎪ E1 E2 E3 E4 ⎪
⎩ ⎭

Définition 19 : arbre
Un arbre est un graphe sans cycle.

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 6


II. Coloration de graphe et nombre chromatique
Définition 20 : k-coloration
(Problème de décision) Soit G un graphe et k entiers (1, 2, … k dites de couleurs), colorier les
sommets de G tel que deux sommets adjacents ne reçoivent pas la même couleur. Si une telle
coloration existe, le graphe G est dit k-coloriable.

Remarque Si G est k-coloriable, alors G est (k+i)-coloriable (i ≥ 1)

Définition 21 : nombre chromatique


(Problème d’optimisation) Soit G un graphe, le problème de coloration consiste à déterminer le plus
petit k tel que G est k-coloriable. k est alors le nombre chromatique de G, noté χG.

Remarque Problème NP-complet (ou NP-difficile)

Définition 22 : graphe complémentaire

Soit G = < E, R > un graphe, le graphe complémentaire de G est le graphe G = < E, R > tel que
∀ u,v ∈E,(u,v)∉R ⇔ (u,v)∈R

Définition 23 : ensemble indépendant


Soit G = < E, R > un graphe, un ensemble indépendant S de G est un sous-ensemble de E tel que ∀
u, v∈S, (u, v) ∉ R

Définition 24 : clique
Soit G = < E, R > une clique de G est un sous-graphe complet de G.

Théorème

Soit G’= < E’, R’> une clique du graphe G alors E’ est un ensemble indépendant de G.

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 7


Cas particuliers de la coloration
• Graphe planaire (théorème de 4 couleurs, 1974) : tout graphe planaire peut être colorié avec au
maximum 4 couleurs.

• Graphe complet (clique) : le nombre chromatique d’une clique de taille n est égal à n.

• Graphe bipartite : χ = 2

PVC (Problème du Voyageur de Commerce) — TSP (Traveling Salesman Problem)

Etant donné un graphe valué sur les arêtes (arcs) représentant les distances ( ≥ 0 ), déterminer un
circuit hamiltonien de longueur minimum.

Remarque

1. « Très difficile »

2. Par contre, le plus court chemin entre 2 sommets (distincts) est facile.

Représentation des graphes


1. Matrice d’adjacence

Soit G = < E, R >, on utilise une matrice T de |E| × |E| telle que T[i, j] = 1 ⇔ xiRxj

Remarque

1. Si le graphe est non orienté, la matrice est triangulaire

2. Si le graphe est valué (sur les arcs/arêtes), les valeurs de T sont les valuations

3. Cette représentation est particulièrement intéressante quand le graphe est dense.

2. Liste d’adjacence

Un graphe est représenté par un tableau dont chaque élément correspond à un sommet associé à une
liste chaînée comprenant les sommets adjacents.

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 8


III. Algorithmes sur les graphes
Parcours d’un graphe (à partir d’un sommet)
Idée

1. On commence avec un sommet vi

2. On marque le sommet

3. On récupère les voisins de ce sommet

4. On prend un sommet non visité et on reprend l’étape 1.

Algorithme — Parcours à partir d’un sommet vi — complexité O(|R|)

1. S ← { vi }

2. tant que S ≠ Ø faire

v ← choisir un sommet dans S

marquer v

S←S\{v}

pour chaque voisin v’ de v ( v’∈A(v) ) faire

si v’ n’est pas marqué et v’ ∉ S

alors S ← S ∪ { v’ }

fin pour

fin tant que

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 9


v5
v2 v6 v7 v3
S v1 v3 v4 Ø
(FIFO) v6 v7 v5 v4
v4

marqué v1 v2 v6 v7 v5 v3 v4

v2
v2 v2
v2 v5 v2
S v1 v5 v5 v2 Ø
(LIFO) v6 v3 v5
v7 v3
v4

marqué v1 v6 v7 v4 v3 v5 v2

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 10


Séparation et évaluation progressive (SEP) pour le plus court chemin entre 2 sommets a et b
(Branch and Bound - B&B)
On maintient 2 types de bornes :

• UB (Upper Bound) : une borne supérieure correspondant à la distance du plus court chemin déjà
découvert jusqu’à présent. Cela signifie que la vrai solution (optimale) ne dépasse pas la valeur de
UB.

• LB (Lower Bound) : une borne inférieure pour chaque chemin partiel i indiquant la distance de ce
chemin partiel. Ainsi, on sait que la solution optimale est au moins la valeur de LB.

Donc, si une LBi ≥ UB, le chemin partiel i est plus long qu’un chemin complet, alors il est inutile de
continuer sur ce chemin partiel i.

Algorithme B&B

S ← {s} /* S contient les sommets actifs, s est le sommet initial */

MC ← Ø /* Meilleur chemin trouvé jusqu’à présent */

UB ← ∞ /* Borne supérieure convenu jusqu’à présent */

tant que S ≠ Ø faire

v ← choisir un sommet dans S

S ← S - {v}

pour chaque sommet (fils) i ∈ adj(v) faire

générer sa borne inférieure associée à LBi

si LBi ≥ UB alors tuer le fils i

sinon /* LBi < UB */

si fils i est le sommet terminal

alors UB ← LBi // car LBi < UB

MC ← i // penser à restituer le chemin

sinon S ← S ∪ {i}

fin

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 11


fin

Algorithme de Dijkstra (glouton) pour les plus courts chemins à partir d’un sommet
Hypothèse : les valuations ci,j ≥ 0 pour tout arc <u, v> ∈ R d’un graphe G = < E, R >

⎧c i,j ≥ 0 ⇔ <u,v> ∈R
Représentation par matrice de distance : ⎨
⎩ci,j = ∞ ⇔ <u,v> ∉R

W = { x∈E | le plus court chemin de s à x est connu }

p[x] = la distance du plus court chemin de s à x passant uniquement par les sommets de W

L’idée de l’algorithme

On part avec W = {s}, p[s] = 0,

⎧c s,y ≥ 0 si <s, y> ∈ R


p[y] = ⎨
⎪cs,y = ∞ sinon

On étend W par un sommet x ∈ E - W tel que p[x] = min { p[y] | y ∈ E - W }

Mise à jour de p pour tout y ∈ E - W

⎧p[x] + c x,y si p[x] + c x,y < p[y]


p[y] = ⎨
⎩p[y] sinon

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 12


Algorithme de Dijkstra

Input :

- Graphe G = < E, R >, avec cu,v ≥ 0

- Un sommet initial s

Output :

p : vecteur de taille | E | , p[x] = la distance du plus court chemin de s à x, x ∈ E

début

W ← {s}

p[s] ← 0

pour tout y ← E - {s} faire p[y] ← cs,y /* cs,y ≥ 0 si <s,y>∈R, ∞ sinon

tant que W ≠ E faire

début

choisir x ∉ W tel que p[x] = min { p[y] | y ∈ E - W } // y ∉ W

W = W ∪ {x}

pour tout y ∈ E - W faire

p[y] = min { p[x] + cx,y , p[y] }

fin

fin

fin

Exemple :

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 13


Distances minimales — Algorithme de Floyd-Warshal (programmation dynamique)
Permet de déterminer les distances minimales pour chaque paire de sommets.

Idée de l’algorithme

On considère chaque sommet u tour à tour, comme un pivot, on examine toutes les paires v et w
ayant u comme sommet intermédiaire.

si dist[v, u] + dist[u, w] < dist[v, w] alors on remplace dist[v, w] par dist[v, u] + dist[u, w]

Hypothèses

1. Les sommets sont numérotés de 1 à n

2. Le graphe est représenté par une matrice arc[n*n] tel que

⎧x ≥ 0 si <v, w> ∈R
arc[v, w] = ⎨
⎩ ∞ sinon

3. On utilise une matrice de distance dist[n*n] pour représenter la distance minimale entre 2
sommets, initiée par la matrice arc[n*n]

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 14


Algorithme de Floyd-Warshall

var u, v, v : entier /* les entiers sont numérotés de 1 à n */

début

pour v = 1 à n faire

pour w = 1 à n faire

dist[v, w] = arc[v, w]

pour k = 1 à n faire

pour v = 1 à n faire

pour w = 1 à n faire

si dist[v, u] + dist[u,w] < dist[v, w]

alors dist[v, w] = dist[v, u] + dist[u,w]

fin

Justification

Une fois que l’algorithme a fini, on a :

∀ v, w, dist[v, w] = la longueur du plus court chemin entre v et w.

Définition 25 : k-chemin
Un k-chemin de v à w est un chemin dont les sommets intermédiaires ≤ k.

Exemple { 1, 2, 3, 4 } est un 3-chemin et {1, 6, 4, 3 } est un 6-chemin.

Un 0-chemin est un sommet ou un arc.

Remarque un n-chemin est un chemin quelconque.

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 15


Démonstration Assertion S(k) : si les valuations des arcs ≥ 0, alors juste après l’itération u = k dans
l’algorithme de Floyd, dist[v, w] est la longueur du plus court k-chemin de v à w ou ∞ si un tel
chemin n’existe pas.

• Base k=0, S(0) est vrai.

• Supposons S(k) vrai, on cherche à démontrer S(k+1), c’est-à-dire, après u = k+1, dist[v, w] est la
longueur du plus court (k+1)-chemin.

Soit C un plus court (k+1)-chemin de v à w, montrons que dist[v, w] est la longueur du chemin C
après l’itération (k+1). On a deux cas possibles :

1. C ne passe pas par le sommet (k+1) :

dist[v, w] ne change pas = la longueur du plus court k-chemin ( ou (k+1)-chemin )

2. C passe par le pivot (k+1)

dist[v, k+1] = la longueur du plus court k-chemin entre v et k+1

dist[k+1, w] = la longueur du plus court k-chemin entre k+1 et w

donc dist[v, k+1] + dist[k+1, w] < dist[v, w] réussit

dist[v, w] ← dist[v, k+1] + dist[k+1, w] d’où le résultat.

NB. Si ¬ dist[v, w] alors dist[v, w] = dist[v, u]∧dist[u,w].

Problème d’arbre de poids minimum — MST (Minimum Spanning Tree)

Définition 26 : arbre couvrant


Soit G = < V, E > un graphe non orienté, le graphe partiel G’ = < V, E’ > est un arbre couvrant de
G si G’ est un arbre.

Définition 27 : poids d’un graphe


Soit G = < V, E > un graphe valué sur les arêtes.

Etant donné un graphe couvrant G’ = < V, E’>, le poids de G’ est défini par :

w(G') = ∑ w(e)
e ∈ E'

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 16


Définition 28 : arbre couvrant de poids minimum
Le problème d’arbre couvrant de poids minimum d’un graphe G = < V, E > consiste à déterminer
un arbre couvrant de poids minimum G* = < V, E* > tel que

w(G*) = min { w(G’) | G’ est un arbre couvrant de G }

Principe d’un algorithme glouton ( greedy algorithm )


Faire une série de choix successif irrévocable et pour chaque choix, prendre le choix le plus
favorable (selon un critère de choix) au moment du choix.

Algorithme glouton générique pour un MST

A = Ø /* A contient toujours les arêtes d’un arbre couvrant de poids minimum partiel */

tant que A ne forme pas un arbre couvrant complet faire

choisir une arête (u, v) sûre pour A

A = A∪{ (u, v) } /* Après l’ajout de (u,v) A reste un arbre couvrant de poids


minimum /*

retourner A

Définition 29 : coupe
Une coupe ( S, V - S ) d’un graphe G = < V, E > est une partition de V.

Remarques

• Une arête (u, v)∈E croise une coupe si u∈S et v∈V - S. Exemple : (a, h)

• Etant donné un ensemble d’arêtes A et une coupe, la coupe respecte A si aucune arête de A croise
la coupe. Exemple : la coupe ( {a, b, d, e}, {h, i , g, c, f} } respecte A = { (a, b), (d, e) } et A’ = { (h,
i), (c, f), (g, f) }

• Soit une coupe ( S, V - S ), on définit C ( S, V - S ) = { e | e∈E et e croise la coupe }

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 17


Exemple : C ( S, V - S ) = { (a, h), (b, h), (b, c), (c, d), (d, f), (e, f) }

• e∈C ( S, V - S ), e est de poids minimum si ω(e) = min { ω(e’) | e’∈C ( S, V - S ) }

Théorème

Soit G = < V, E > un graphe non orienté valué sur les arêtes par une fonction ω : E → R

Soit A ⊆ E un MST partiel, ( S, V - S ) une coupe respectant A et (u, v) une arête de poids
minimum qui croise ( S, V - S ) alors (u, v) est une arête sûre pour A, ie. l’ajout de l’arête (u, v)
dans A conduit à un autre MST partiel.

Algorithme de Prim
Idée de l’algorithme

Partant d’un arbre de poids minimum partiel T, on construit T’ = T⊕{ e } de manière que T’ soit lui
aussi un arbre de poids minimum partiel. Pour choisir e, on prend l’arête sûre de poids minimum.

Algorithme de Prim

T : l’ensemble des arêtes de l’arbre de poids minimum partiel

A : l’ensemble des sommets de T

B : une liste contenant les arêtes adjacentes à un sommet de A (pourrait être triée dans l’ordre
décroissant des poids)

T = Ø /* l’arbre vide */

A={u} /* Future racine */

B = Adj(u) /* les arêtes adjacentes à u */

tantque A ≠ V faire

1. Déterminer une arête e = (u, v)∈B telle que ω(e) = min { ω(e’) | e’∈B }. Soit v
l’extrêmité de e qui n’est pas dans A.

2. T = T∪{e’}

3. A = A∪{v}

4. B = (B∪Adj(v)) - (B∩Adj(v))

fin

I A B

Ø {a} { (a, b), (a, h) }

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 18


I A B

{ (a, b) } { a, b } { (b, c), (b, h), (a, h) }

{ (a, b), (b, c) } { a, b, c } { (c,i), (c,d), (c,f), (b, h), (a,h) }

{ (a, b), (b, c), (c, i) } { a, b, c, i } …

Algorithme de Krustal
On trie les arêtes dans l’ordre croissant des poids : e1, e2, …, en.

Algorithme de Krustal

T ← Ø /* forêt */

j ← 1 /* compteur de sommets */

i ← 1 /* l’arête du poids le plus faible */

tantque j < |V| faire

si T∪{ ei } ne conduit pas à un circuit (cycle)

alors T ← T∪{ ei }

j←j+1

i←i+1

fin

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 19


Problèmes de flow et réseaux de transport
Définition 30 : réseau de transport
Un réseau de transport est un graphe orienté G = < V, E > muni d’une fonction de capacité c

⎧c(u,v)≥0 si(u,v)∈E
c : V × V → ° + telle que ⎨
⎩c(u,v)= 0 si(u,v)∉E

Un réseau possède 2 sommets particuliers et distincts :

s∈V : source du réseau

t∈V : puits du réseau

Exemple : réseau de distribution

Définition 31 : flot
Un flot dans un réseau G = < V, E > est une fonction f : V × V → ° vérifiant:

• la capacité : ∀ u, v∈V, f(u, v) ≤ c(u, v)

• la symétrie oblique : ∀ u, v∈V, f(u, v) = - f(v, u)

• la loi de conservation : ∀u ∈V -{s,t},∑ f(u,v)= 0


v∈V

Soit f(u, v) : le flux sur (u, v), le débit (ou flux) du réseau est :

f = ∑ f(s,v)
v∈V

Remarques

• f(u, v) peut-être positif ou négatif

• f(u, u) = 0 (propriété de la symétrie oblique)

• la loi de conservation : ∀ u,v ∈V -{s,t}, ∑ f(u,v)= ∑ f(v,u)


v∈V u∈V
f(u,v)> 0 f(u,v)> 0

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 20


Remarque : par convention, seules les valeurs > 0 des flots sont indiquées

Définition 32 : flot maximum


Soit fm un flot de s à t d’un réseau G. Si pour tout flot f, |fm| ≥ |f| alors fm est un flot maximum de G.
Le problème du nombre de flots maximum consiste à déterminer un flot maximum fm de s à t d’un
réseau de transport.

Notation

Soit 2 ensembles X, T ∈V,on note f(X,Y)= ∑∑ f(x,y)


x∈X y∈Y

La loi de conservation devient ∀ u ∈V -{s,t}et ∑ f(u,v)= 0 ⇔ f(u,V -{s,t})


v∈V-{s,t}

Lemme 1
Soit G = < V, E > un réseau, f un flot dans G, alors

• ∀ X ⊆ V, f(X, X) = 0

• ∀ X, Y ⊆ V, f(X, Y) = f(Y, X)

• ∀ X, Y, Z ⊆ V, f(X∪Y, Z) = f(X, Z) + f(Y, Z) et f(Z, X∪Y) = f(Z, X) + f(Z, Y)

Méthode de Ford-Tulkerson
Idée

On part avec f(u, v) pour tout u, v∈V, donnant un flot de débit nul (|f| = 0).

A chaque itération, on augmente f avec une quantité déterminée selon un critère tout au long d’un
chemin particulier allant de s à t.

Algorithme générique

Initialisation f = 0

tant que il existe un chemin “améliorant” p faire

augmenter f tout au long de p

fin

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 21


Définition 33 : graphe d’écart (ou graphe résiduel)
Soit G = < V, E > un réseau et f un flot, le graphe résiduel (graphe d’écart) de G induit par f est le
graphe Gf = < V, Ef > où Ef = { (u, v)∈V × V | cf(u,v) = c(u,v) - f(u,v) > 0 }

cf(v1,v2) = 10 - f(v1,v2) = 10 + f(v2,v1) = 10 + 1 = 11 cf(v2,v1) = 4 - 1 = 3

cf(s,v1) = c(s,v1) - f(s,v1) = 16 - 11 = 5 cf(v1,s) = c(v1,s) - f(v1,s) = 0 + 11 = 11

Remarque

• Ef = E si ∀ (u,v)∈E, f(u,v) = 0

• |E| ≠ |Ef|

• Gf = < V, Ef > est aussi un réseau avec Ef comme fonction de capacité

Définition 34 : chemin améliorant


Soit G = < V, E > un réseau et f un flot dans G, un chemin améliorant p est un chemin simple de s à
t dans Gf = < V, Ef >.

Définition 35 : capacité résiduelle


La capacité résiduelle de p est définie par cf(p) = min { cf(u,v) | (u,v)∈p }

Exemple : p : s → v2 → v3 → t cf(p) = 4

Lemme 2
Soit f un flot de G = < V, E >, f’ un flot de Gf = < V, Ef >, on définit : f × f’ : V × V →R

∀ u, v∈V, (f + f’)(u, v) = f(u,v) + f’(u,v) alors f + f’ est un flot de G avec |f+f’| = |f| + |f’| (≥|f|)

Démonstration

• Contrainte de capacité : ∀ u, v, ( f + f’ ) (u, v) ≤ c(u,v)

f’(u,v) ≤ cf(u,v) = c(u,v) - f(u,v)

(f+f’)(u,v) = f(u,v) + f’(u,v) ≤ f(u,v) + c(u,v) - f(u,v)

• Symétrie oblique : (f + f’)(u,v) = -(f+f’)(v,u)

(f+f’)(u,v) = f(u,v) + f’(u,v) = -f(v,u) - f’(v,u) = - (f(v,u) + f’(v,u)) = -(f+f’)(v,u)

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 22


• Loi de conservation : ∀ u ∈V -{s,t},∑(f+f')(u,v)= 0
v∈V

∀u ∈V -{s,t},∑(f+f')(u,v)= ∑ f(u,v)+ ∑ f'(u,v)= 0 + 0 = 0


v∈V v∈V v∈V

• | f+f' | = ∑(f+f')(s,v)= ∑ f(s,v)+ ∑ f'(s,v)= |f|+ |f'| ≥ |f|


v∈V v∈V v∈V

Lemme 3
Soit G = < V, E> un réseau, f un flot dans G, p un chemin améliorant dans le graphe d’écart Gf = <
V, Ef >. On définit : fp : V × V → R tel que

⎧c (p)
⎪ si (u,v) ∈p
fp (u,v) = ⎨ f
⎪0
⎩ sinon

alors :

• fp est un flot dans Gf avec |fp| = cf(p) > 0

• f = f + fp est un flot dans G avec | f| = | f| + | fp| > | f|

Définition 36 : coupe d’un réseau


Un coupe (S, T) d’un réseau G = < V, E > est une partition de V telle s∈S et t∈T.

(S∩T=Ø, S∪T=V) Soit f un flot dans G,

f(S,T) = ∑∑f(u,v) estle flottraversantla coupe (S,T)


u∈S v∈T

c(S,T) = ∑∑c(u,v) estla capacité de la coupe (S,T)


u∈S v∈T

Exemple

f({s, v1, v2},{v3,v4,t}) = f(v1,v3) + f(v2,v3) + f(v2,v4) = 12 - 4 + 11 = 19

c({s, v1, v2},{v3,v4,t}) = c(v1,v3) + c(v2,v3) + c(v2,v4) = 12 + 0 + 14 = 26

Lemme 4
Soit f un flot dans G, (S, T) une coupe de G, alors f(S, T) = |f|

Démonstration

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 23


T = V - S donc f(S,T) = f(S,V) - f(S,S) = f(S,V) = f({s}, V) + f(S-{s},V) = f({s},V) = |f|

Théorème max-flot-min-coupe
Soit f un flot dans G = < V, E> avec une source s et un puits t, alors les conditions suivantes sont
équivalentes :

• f est un flot maximum dans G dont le débit maximum est |f|

• le réseau résiduel (Graphe d’écart) Gf = < V, Ef > n’admet pas de chemin améliorant

• il existe une coupe (S, T) telle que c(S,T) = |f|

Démonstration

③→① : Soit une coupe (S, T) telle que |f| = c(S,T)

| f| = f(S,T) = ∑∑f(u,v) ≤ ∑∑c(u,v)= c(S,T)


u∈S v∈T u∈S v∈T

si |f| = c(S,T), |f| est la valeur maximum possible.

①→② : Supposons que fm est un flot maximum mais Gf = < V, Ef > admet encore un chemin
améliorant (soit p), alors on peut obtenir un autre flot fm + fp tel que |fm| + |fp| > |fm|

②→③ : Gf n’admet plus de chemin améliorant ie ∄ chemin simple de s vers t. On définit

S = { v∈V | ∃ un chemin de s à v dans Gf }

T=V-S

• (S, T) est une coupe : évident !

• ∀(u,v)∈(S,T), on a f(u,v) = c(u,v) (car sinon, (u,v)∈Ef et v∈S) donc |f| - f(S,T) = c(S,T)

Algorithme de Ford-Fulkerson
Idée de l’algorithme

On commence avec un flot initial nul et on itère les étapes suivantes :

• déterminer un chemin améliorant p dans Gf

• augmenter f sur le chemin p par la capacité résiduelle cf(p)

On s’arête s’il n’existe plus de chemin améliorant.

Algorithme de Ford-Fulkerson ( G = < V, E >, s, t )

pour tout arc (u,v)∈E faire

f(u,v) ← 0

f(v,u) ← 0

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 24


fin

tant que ∃ un chemin p de s à t dans le graphe d’écart Gf faire

cf(p) ← min{c(u,v) | (u,v)∈p}

pour tout arc (u,v)∈p faire

f(u,v) ← f(u,v) + cf(p)

f(v,u) ← - f(u,v)

fin

fin

Références
Aho et J.Ullman

« Concepts fondamentaux de l'informatique »

Dunod 1993

T. Corman, C.E Leiserson et R.L. Rivest

« Introduction to algorithms »

MIT Press 1994

C. Berge

« Graphes et hypergraphes »

Dunod 1970

H. Gondron et M. Minoux

« Graphes et algorithmes »

Eyrolles 1995

A. Gibbons

« Algorithmic Graph Theory »

Cambridge University Press 1985

J.R. Evans, E. Miniska

« Optimization algorithms for networks and graphs »

Marcel Dekker Inc. 1992

M1 Info 2005 / 2006 — Université d’Angers — Algorithmique des graphes 25

Vous aimerez peut-être aussi