Académique Documents
Professionnel Documents
Culture Documents
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
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 > }
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.
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
Remarques
• Pour k > 0, le chemin peut-être codé par la suite des sommets ( x0, x1, … , xk ) telle que
αi = ( xi-1, xi )
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).
Rappel
le produit R1∙R2 = { < x, y > | ∃z tel que < x, z >∈R1 et < z, y > ∈ R2 }
Exemple
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
Remarque
Si R = { {x, y} | x∈E et y∈E } alors G = < E, R > est un graphe non orienté.
R : ensemble d’arêtes
Exemple
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 15 : isomorphisme
G = < E, R > et G’ = < E’, R’ > sont isomorphes si ∃ une bijection f : E → E’ telle que :
Exemple
Exemple
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
Définition 19 : arbre
Un arbre est un graphe sans cycle.
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 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.
• Graphe complet (clique) : le nombre chromatique d’une clique de taille n est égal à n.
• Graphe bipartite : χ = 2
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.
Soit G = < E, R >, on utilise une matrice T de |E| × |E| telle que T[i, j] = 1 ⇔ xiRxj
Remarque
2. Si le graphe est valué (sur les arcs/arêtes), les valeurs de T sont les valuations
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.
2. On marque le sommet
1. S ← { vi }
marquer v
S←S\{v}
alors S ← S ∪ { v’ }
fin pour
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
• 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 - {v}
sinon S ← S ∪ {i}
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
⎪
p[x] = la distance du plus court chemin de s à x passant uniquement par les sommets de W
L’idée de l’algorithme
Input :
- Un sommet initial s
Output :
début
W ← {s}
p[s] ← 0
début
W = W ∪ {x}
fin
fin
fin
Exemple :
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
⎧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]
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
fin
Justification
Définition 25 : k-chemin
Un k-chemin de v à w est un chemin dont les sommets intermédiaires ≤ k.
• 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 :
Etant donné un graphe couvrant G’ = < V, E’>, le poids de G’ est défini par :
w(G') = ∑ w(e)
e ∈ E'
A = Ø /* A contient toujours les arêtes d’un arbre couvrant de poids minimum partiel */
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) }
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
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 */
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
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 */
alors T ← T∪{ ei }
j←j+1
i←i+1
fin
⎧c(u,v)≥0 si(u,v)∈E
c : V × V → ° + telle que ⎨
⎩c(u,v)= 0 si(u,v)∉E
⎪
Définition 31 : flot
Un flot dans un réseau G = < V, E > est une fonction f : V × V → ° vérifiant:
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
Notation
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)
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
fin
Remarque
• Ef = E si ∀ (u,v)∈E, f(u,v) = 0
• |E| ≠ |Ef|
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
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 :
Exemple
Lemme 4
Soit f un flot dans G, (S, T) une coupe de G, alors f(S, T) = |f|
Démonstration
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 :
• le réseau résiduel (Graphe d’écart) Gf = < V, Ef > n’admet pas de chemin améliorant
Démonstration
①→② : 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|
T=V-S
• ∀(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
f(u,v) ← 0
f(v,u) ← 0
f(v,u) ← - f(u,v)
fin
fin
Références
Aho et J.Ullman
Dunod 1993
« Introduction to algorithms »
C. Berge
« Graphes et hypergraphes »
Dunod 1970
H. Gondron et M. Minoux
« Graphes et algorithmes »
Eyrolles 1995
A. Gibbons