Graph Theory Notes
Graph Theory Notes
Graph Theory Notes
Graphes
Robin Ballarini Annelies Bauwens Gilles Bertrand
Armand Bosquillon de Jenlis Alexandre Bovet
Romain Capron Arnaud Cerckel Charlotte Cirriez
Simon Claessens Thibault Clavier Gaëtan Collart
Matthieu Constant Xavier Crochet Benoit Daloze
Gatien De Callataÿ François Dederichs Sébastien De Fauw
François Delcourt Arnaud de Lhoneux Martin De Neuville
Guillaume Derval Alexandre de Touzalin Gauthier Feuillen
Florentin Goyens Arnaud Jacques Antoine Hilhorst
Benoît Legat Thibault Liénart Arthur Losseau
Alexis Pierret Thérèse Plissart François Raucent
Félicien Schiltz Mélanie Sedda Benoît Sluysmans
Nicolas Stevens Harold Taeter Kim Van Den Eeckhaut
Geoffroy Vanderreydt Antoine Van Malleghem Nicolas Vico
Romain Hollanders Florimond Houssiau
Vincent Schellekens Jean-Charles Delvenne
5 janvier 2022
Notes partielles et provisoires
Table des matières
1 Graphes connexes, eulériens et bipartis 3
1.1 Graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Isomorphisme de Graphes . . . . . . . . . . . . . . . . . . . . 4
1.3 Parcours eulérien . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Représentation matricielle du graphe . . . . . . . . . . . . . . 8
1.5 Graphes bipartis . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Arbres et connectivité 21
3.1 Arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Arbre sous-tendant de poids minimum . . . . . . . . . . . . . 24
3.3 Connectivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4 Graphes hamiltoniens 34
6 Coloriages d’arêtes 45
8 Coloriages de sommets 56
8.1 Coloriages de sommets et nombre chromatique . . . . . . . . 56
8.2 Bornes sur le nombre chromatique . . . . . . . . . . . . . . . 56
8.3 Polynôme chromatique . . . . . . . . . . . . . . . . . . . . . . 59
9 Graphes planaires 61
9.1 Graphes planaires . . . . . . . . . . . . . . . . . . . . . . . . . 62
9.2 Formule d’Euler . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.3 Les cinq solides platoniciens . . . . . . . . . . . . . . . . . . . 68
9.4 Coloriage des graphes planaires . . . . . . . . . . . . . . . . . 69
1
10 Flots et coupes 71
10.1 Flots et coupes . . . . . . . . . . . . . . . . . . . . . . . . . . 71
10.2 L’algorithme de Ford-Fulkerson . . . . . . . . . . . . . . . . . 75
11 P, N P et N P-complétude 77
11.1 P, N P et N P-complétude . . . . . . . . . . . . . . . . . . . . 77
2
1 Graphes connexes, eulériens et bipartis
Dans cette section, les notions de base de la théorie des graphes sont
définies, et ses résultats élémentaires sont exposés et démontrés. Dans un
premier temps, on s’intéresse à la définition de la notion de graphe, et celle
d’isomorphisme entre graphes. Ensuite, on étudie les graphes eulériens, et on
démontre un résultat fondamental permettant de prouver facilement qu’un
graphe est ou n’est pas eulérien. Puis les représentations d’un graphe sous
forme matricielle sont définies, et leur intérêt est montré au travers du théo-
rème dit des poignées de main. Enfin, on définit ce qu’est un graphe biparti,
et fait le lien entre cette notion et la présence de cycles impairs dans un
graphe.
1.1 Graphes
Définition 1.1. Un graphe est un triplet (V , E, ϕ), où :
— V est un ensemble fini dont les éléments sont appelés sommets ou
noeuds ;
— E est un ensemble fini dont les éléments sont appelés arêtes ;
— ϕ est une fonction, dite fonction d’incidence, qui associe à chaque
arête un sommet ou une paire de sommets.
Définition 1.2. Deux sommets incidents à la même arête sont dits adja-
cents.
Définition 1.3. Une arête incidente à un seul sommet est une boucle. Deux
arêtes sont dites multiples si elles sont toutes deux incidentes aux mêmes
noeuds.
3
1. il n’a pas de boucle ;
2. il n’a pas d’arête multiple.
ϕ(a) = {1, 1}
ϕ(b) = {1, 2}
ϕ(c) = {1, 2}
ϕ(d) = {2, 3}
ϕ(e) = {1, 3}
ϕ(f ) = {3, 4}
1 1
e b e b
c
4 3 2 3 2
f d d
(a) (b)
Notons que dans un graphe simple, puisqu’il n’y a qu’une seule arête
possible entre deux noeuds u et v, la fonction d’incidence ϕ est injective : au
plus une arête e existe telle que ϕ(e) = {u, v}. On se permet donc souvent
l’abus de notation e = {u, v}, ou plus simplement encore e = uv, puisque
cela ne génère pas d’ambiguité.
4
pour tous e ∈ E, u ∈ V, v ∈ V .
1 a 10 e0
e a0
10
e0 a0
5 2 50 20 30 40
b0
d b d0 c0 d0 c0
4 3 50 20
c 40 30 b0
(c) (d) (e)
tons que, même si cela ne parait pas forcément évident, les graphes (d) et
(e) sont les mêmes (et pas seulement isomorphes) : ils ont la même fonction
d’incidence entre le même ensemble d’arêtes et le même ensemble de noeuds
mais ils sont simplement dessinés différemment sur le papier.
L’isomorphisme entre (c) et les deux autres est donné par :
f (1) = 10 g(a) = e0
f (2) = 40 g(b) = c0 ϕ(a) = {1, 2}
f (3) = 20 g(c) = b0 ϕ0 (a0 ) = {10 , 30 }
f (4) = 50 g(d) = d0 ϕ0 (g(a)) = {f (1), f (2)}
f (5) = 30 g(e) = a0
Notons aussi que plusieurs résultats sont possibles :
1 a 10 a0
e e0
10
e0 a0
5 2 50 20 40 30
d0
d b b0 c0 c0 b0
4 3 20 50
c 40 30 d0
(f) (g) (h)
5
f (1) = 10 g(a) = a0
f (2) = 30 g(b) = b0
f (3) = 50 g(c) = d0
f (4) = 20 g(d) = c0
f (5) = 40 g(e) = e0
Les six graphes de cet exemple sont isomorphes entre eux.
Définition 1.11. Un chemin est un parcours dont tous les sommets (sauf
éventuellement les extrémités, voir définition suivantes) sont distincts et
toutes les arêtes sont distinctes.
Théorème 1.13. Un graphe est connexe ssi pour chaque paire de sommets,
il existe un parcours qui les relie. Les composantes connexes d’un graphe sont
ses sous-graphes connexes maximaux.
On démontre aisément la proposition suivante.
Théorème 1.14. Un graphe est connexe si et seulement si pour tout en-
semble non vide de noeuds S, de complémentaire S non vide, il y a au moins
une arête entre S et S.
6
Définition 1.15. Un parcours est eulérien s’il visite chaque arête du graphe
une et une seule fois. Un graphe est eulérien s’il existe un parcours eulérien
fermé dans ce graphe.
Démonstration.
=⇒
Chaque arête incidente à un noeud x est utilisée une et une seule fois par le
parcours eulérien :
— soit pour entrer dans x ;
— soit pour en sortir.
À chaque arête entrante correspond une arête sortante (celle qui suit dans
le parcours sauf pour la dernière arête du parcours qui correspond à la pre-
mière).
Donc, en chaque noeud il y a une bijection entre les arêtes entrantes et les
arêtes sortantes.
Donc chaque noeud a un degré pair.
⇐=
On va construire un parcours eulérien :
1. On part d’un noeud arbitraire x0 .
2. On prend une arête incidente à x0 , on arrive à un nouveau noeud.
3. Par parité, il y a au moins une arête non utilisée, on la prend, on
arrive à un autre noeud, on ressort par une arête disponible (si elle
existe), etc. Ce processus doit finir puisque le nombre d’arêtes est fini.
Quand il n’y a plus d’arête disponible, on est forcément arrivé à x0
car pour tout autre noeud y, en arrivant à y, on a utilisé un nombre
impair d’arêtes incidentes à y, donc il en reste au moins une non encore
visitée par le parcours.
On a donc un parcours fermé P0 :
— Si toutes les arêtes incidentes aux noeuds traversés par ce parcours
sont utilisées, alors ce parcours est eulérien ;
— Sinon, il y a un noeud x1 avec une arête non visitée. On prétend que
ce x1 peut être choisi sur le parcours P0 déjà construit. En effet, par
connexité, il y a au moins une arête entre un noeud déjà visité par
P0 et un noeud non visité (en vertu du Théorème 1.14). On choisit
ce noeud déjà visité comme x1 .
— A partir de x1 , on crée un parcours P1 sur le graphe des arêtes non
encore visitées par P0 : c’est un graphe dont les degrés sont pairs,
puisque chaque P0 visite un nombre pair d’arêtes à chaque noeud.
7
x0 x1
Démonstration.
=⇒
— Si ce parcours eulérien est fermé, tous les degrés sont pairs par le
théorème précédent ;
— Si ce parcours eulérien est ouvert d’origine u et destination v, tous
les degrés sont pairs, sauf deg(u) et deg(v) qui sont impairs, par une
légère adaptation de l’argument du cas fermé.
⇐=
— Si tous les degrés sont pairs alors il existe un parcours eulérien fermé
par le théorème précédent ;
— Si les degrés de u et v sont impairs et si on ajoute une arête e entre
u et v :
→ Tous les degrés sont pairs.
→ Il existe un parcours eulérien fermé.
En retirant e, on obtient un parcours eulérien ouvert u → v.
8
Définition 1.19. La matrice d’adjacence est une matrice carrée n × n dont
l’élément ij est le nombre d’arêtes entre les sommets vi et vj . Une boucle
compte pour un dans l’élément diagonal correspondant.
9
Induction Supposons la propriété vérifiée pour Ak .
#parcours i → j longueur k + 1
X
= (#parcours i → l longueur k) · (#arêtes l → j)
l∈V
X
= Akil Alj
l∈V
= Ak+1
ij .
e b
c
3 2
d
1 2 3
1 1 2 1
A = 22 0 1
3 1 1 0
a b c d e
1 2 1 1 0 1
M = 20 1 1 1 0 .
3 0 0 0 1 1
10
1 0 0
0
A = I = 0 1 0 ,
0 0 1
1 2 1
A1 = A = 2 0 1 ,
1 1 0
6 3 3
2
A = 3 5 2 .
3 2 2
Exemple 1.26.
11
V0
V1
1
6
2
7
3
8
4
9
5
Démonstration.
biparti =⇒ parcours fermés de longueur paire
On suppose qu’il existe une bipartition (V0 , V1 ). Soit un parcours fermé
v0 e0 v1 e1 v2 . . . vn−1 en−1 v0 . Vu que le parcours visite alternativement V0 et
V1 et revient à son point de départ, il doit suivre un nombre pair d’arêtes.
Par exemple si v0 ∈ V0 :
V0 = {v|d(v, v0 ) paire}
V1 = {v|d(v, v0 ) impaire}
C’est une partition des noeuds. Montrons que c’est bien une bipartition pour
le graphe.
On le montre par l’absurde. Si ce n’est pas une bipartition, on aurait par
exemple une arête entre u et v avec u, v ∈ V0 .
12
Les plus courts chemins v0 → u et v0 → v sont de longueur paire car
u, v ∈ V0 .
pcc v0 → u
u
v0 w
v
pcc v0 → v
Le parcours fermé wuvw (en rouge sur le dessin) est un bien un cycle, par
construction (en effet les deux chemins w → u et w → u sont sans intersec-
tion, par choix de w). On prétend qu’il est de longueur impaire. En effet, les
deux sous-chemins de v0 vers w étant de même longueur, on a :
lg(wuvw) = lg(v0 uvv0 ) − 2lg(v0 w)
impaire paire
Contradiction puisqu’on a supposé tous les cycles de longueur paire. Si
l’arête uv est dans V1 , raisonnement similaire.
13
2 Les plus courts chemins
2.1 Les plus courts chemins
Définition 2.1. Une fonction de poids sur un graphe (V , E, ϕ) est une
fonction E → R qui associe un poids réel à chaque arête du graphe. Un
graphe pondéré est un graphe muni d’une fonction de poids. Le poids ou la
longueur d’un parcours est la somme des poids des arêtes qui le compose.
a
5 1
e b
7
4 6
8 2
d 3
c
1. Dans la définition 1.1 on a parlé de paire et ici de couple car une paire est un
ensemble de 2 éléments alors qu’un couple est un n-uplet avec n = 2. Dans un ensemble,
il n’y a pas de relation d’ordre alors que dans un n-uplet, chaque élément a un indice bien
définit. Une arête est donc à sens unique dans un graphe dirigé.
14
Nous avons :
V = {a, b, c, d, e}
E = {1, 2, 3, 4, 5, 6, 7, 8}
ϕ(1) = (a, b)
ϕ(2) = (c, b)
ϕ(3) = (c, d)
ϕ(4) = (e, d)
ϕ(5) = (a, e)
ϕ(6) = (d, a)
ϕ(7) = (a, c)
ϕ(8) = (d, b)
Théorème 2.5 (Plus court chemin et plus court parcours). Pour un graphe
(dirigé ou non) avec une fonction de poids ≥ 0, si le plus court parcours entre
u et v est de longueur d, alors le plus court chemin entre u et v est aussi de
longueur d (la notion de plus court parcours se ramène donc à celle du plus
court chemin).
15
dire que P 0 est un chemin de longueur d inférieure à la longueur d0
du plus court chemin (impossible), (ii) soit il reste des cycles dans
P 0 , on recommence alors l’argument présenté en remplaçant P par
P 0 et on finira par tomber sur un des cas impossibles car le nombre
de cycles dans P est fini.
16
tableau associé.
a
10 50
e b
30
10 5
20 5
d 50
c
17
un noeuds de S̄i−1 . Soit v, le premier noeud de S̄i−1 de ce chemin.
Le sous-chemin de u0 à v est le plus court chemin de u0 à v par le
lemme 1.24. Par la définition de v, ce chemin ne passe que par des
noeuds de Si−1 . Du coup, on sait que d(u0 , v) = `(v). Comme les
arêtes sont de poids positifs, on a `(v) = d(u0 , v) ≤ d(u0 , ui ). Mais
comme on a pris ui tel que `(ui ) = minu∈S̄i−1 `(u), on a `(ui ) ≤ `(v).
Dès lors `(ui ) ≤ d(u0 , ui ), ce qui est absurde car on a supposé le
contraire.
— Commençons par montrer que `(v) ≥ d(u0 , v). Les seuls, `(v) qui
changent à cette itération sont égaux à `(ui ) + w(ui , v). On re-
marque que c’est la longueur du chemin composé du plus court
chemin de u0 à ui et de l’arête de ui à v. Par la définition de
d(u0 , v), on a donc nécessairement l’inégalité voulue.
Pour le dernier point, par l’hypothèse de récurrence, on sait que
`(v) est la longueur du plus court chemin de u0 vers v pour tout
noeud de Si−1 . Pour que ce soit vrai pour tout noeud de Si , il reste
à considérer les chemin passant par ui . De tout ces chemins (de
u0 à v passant par ui et dont les noeuds internes sont dans Si ), il
ne faut garder que le chemin constitué du plus court chemin de u0
vers ui et de l’arête ui v parce que les autres chemins candidats ne
sont pas des plus courts chemins. En effet, comme ui est le dernier
noeud a avoir été ajouté à Si , ui est le noeud le plus éloigné de u0
ce qui veut dire que ui n’est jamais sur un plus court chemin vers
un noeud de Si (mis à part celui vers ui bien sûr). La longueur de
ce chemin est `(ui ) + w(ui , v). Le plus court chemin vers v passe
donc soit uniquement par Si−1 (longueur `(v) calculée à l’itération
précédente) soit le chemin passant par ui (longueur `(ui )+w(ui , v)),
ce qui correspond à la mise à jour `(v) ← min(`(v), `(ui )+w(ui , v)).
Démonstration.
— Au début |S̄| = n − 1 et à chaque passage de boucle |S̄| décroit de 1.
Ce qui implique n itérations.
— A chaque itération, l’instruction “∀v ∈ S̄” fait O(n − |S|) opérations ;
ensuite “trouver vmin “ fait O(n − |S|) opérations également.
— Le nombre d’opérations total est donc 2n + 2(n − 1) + ... + 2(1). Cela
implique un temps total (on oublie les constantes
multiplicatives)
O(n + (n − 1) + (n − 2) + ... + 1) = O n(n+1)
2 = O(n 2 ).
18
Rappelons le sens de la notation O(.). Soient deux fonctions f et g des
entiers vers les réels. On dit que f ∈ O(g) s’il y a des constantes n0 et c telles
que |f (n)| ≤ cg(n) pour tout n ≥ n0 . Par exemple 2n3 ∈ O(n3 + 10n2 ), ou
n log n ∈ On2 . On généralise aisément aux fonctions de plusieurs variables
entières, par exemple n + m ∈ Onm.
Les temps de calcul d’un algorithme sont ici toujours considérés au pire,
pour l’instance de taille donnée la plus défavorable.
a ⊗ (b ⊕ c) = (a ⊗ b) ⊕ (a ⊗ c)
On peut définir une somme et un produit matriciels dont les entrées sont
dans le semi-anneau :
19
En prenant A tel que aij = w(i, j), en comptant w(i, j) = ∞ (longueur
infinie) partout où il n’y a pas d’arêtes, la matrice Ak a pour élément ij la
longueur du plus court parcours à k arêtes de i vers j : cela se démontre
aisément par induction sur k. Si on ajoute des boucles de poids nul sur le
graphe, autrement dit on considère la matrice de poids I ⊕A, alors (I ⊕A)⊗k
encode les plus courts chemins de longueur au plus k. Comme tout chemin
est au plus de n noeuds dans un graphe à n noeuds, la matrice des plus
courts chemins entre chaque paire de noeuds est donnée par
(I ⊕ A)⊗n .
Pour calculer cette matrice, on peut effectuer n multiplications matri-
cielles successives, chacune s’effectuant (suivant l’application naïve de la
définition) en n3 opérations. On arrive donc à n4 opérations. Plus efficace
est d’élever la matrice I ⊕ A au carré log2 n fois de suite, aboutissant ainsi à
n3 log n. C’est un peu moins bon que l’application de l’algorithme de Dijks-
tra sur chaque noeud (n3 ).
Mais le semi-anneau (min, +) possède des propriétés intéressantes, dont
l’idempotence : a ⊕ a = a pour tout a. Ces propriétés, utilisées de manière
ingénieuse, permettent de court-circuiter certains calculs de la multiplication
et d’obtenir une complexité en n3 / log n (Timothy M Chan 2005), ou même
moins. Ceci est la manière la plus efficace de calculer toutes les distances
dans un graphe.
20
3 Arbres et connectivité
Dans ce chapitre il est important de noter que tous les graphes sont
non-dirigés, pas nécessairement simples (les arêtes multiples et les boucles
sont autorisées), sauf spécification contraire. La théorie des arbres et de la
connectivité pour les graphes dirigés est beaucoup moins univoque : on peut
généraliser les concepts et résultats au cas dirigé de plusieurs manières et
ceci n’est pas traité dans ce cours.
3.1 Arbres
Définition 3.1. Un arbre est un graphe connexe et sans cycle. Une forêt
est un graphe sans cycle.
21
Démonstration. Nous allons démontrer que chaque condition implique la
suivante, et la dernière la première. Ainsi il sera établi qu’elles sont toutes
équivalentes.
— (1) ⇒ (2) :
Il faut juste prouver qu’un arbre (graphe connexe et sans cycle) a
m = n − 1 arêtes :
• D’abord, on prouve que tout arbre possède une feuille, càd un
nœud de degré 1. Tous les nœuds ont un degré ≥ 1 (par connexité,
s’il y a au moins deux nœuds). Supposons que tous les nœuds aient
un degré au moins 2. Alors, partant d’un nœud on peut créer un
parcours sans jamais rebrousser chemin (chaque fois qu’on visite
un nœud pour la première fois, on peut sortir par une autre arête),
jusqu’à revenir à un nœud déjà visité. Cela implique qu’on peut
extraire un cycle, d’où contradiction. Tout arbre possède donc au
moins une feuille.
• On procède par récurrence sur n. Pour n = 1, m = 0 : on a bien
m = n − 1. Pour tout arbre de n + 1 noeuds on trouve une feuille
x. En enlevant x et son arête, on obtient un nouvel arbre de n
nœuds (on a supprimé un noeud) et n − 1 arêtes (par hypothèse
de récurrence). Donc l’arbre de n + 1 nœuds avait bien n arêtes.
— (2) ⇒ (3) :
Un graphe sans cycle de m = n − 1 arêtes est-il connexe ?
Supposons qu’il y ait éventuellement plusieurs composantes connexes,
de ni nœuds et mi arêtes. Sur chacune, on peut appliquer (1) ⇒ (2)
(puisque chaque composante est connexe et sans cycle). Donc, pour
toute composante connexe i : mi = ni − 1. Sommons maintenant sur
P
l’ensemble des composantes connexes, et l’on obtient m = i mi =
i ni − #composantes connexes = n − #comp. conn. qui doit être
P
22
Vérifions qu’ajouter une arête quelconque crée un et un seul cycle :
• D’abord, on prouve qu’il existe un cycle. Ajoutons une arête e
entre les noeuds u et v. Par connexité, il existe un chemin C =
u . . . v. Donc u
| .{z
. . v} eu est un cycle.
C
• Ensuite, on prouve que c’est le seul cycle. Supposons qu’on ait
obtenu au moins 2 cycles C1 , C2 en ajoutant e. Alors on a un par-
cours fermé u . . . v . . . u dans G (en adjoignant C1 − e à C2 − e),
dont on peut extraire un cycle dans G, ce qui est une contradic-
tion.
— (5) ⇒ (6) :
Soit G sans cycle et muni d’un et un seul cycle par tout ajout d’arête.
Soit deux nœuds u et v. Supposons qu’il existe deux chemins P1 =
u . . . v, P2 = u . . . v, alors u . . . v . . . u est un parcours fermé dont on
peut extraire un cycle, contradiction. Il y a donc au plus un chemin
u → v. En ajoutant une arête e entre u et v, par hypothèse je crée un
cycle C. Cela implique que C − e est un chemin u → v. Il y a donc
bien un chemin entre deux noeuds de G et c’est le seul.
— (6) ⇒ (1) :
Soit G un graphe qui trace un et un seul chemin entre toute paire de
noeuds. Il est donc connexe. Est-il sans cycle ? Supposons qu’il existe
un cycle. Soient x et y deux nœuds distincts dans ce cycle. Le cycle
donne deux chemins x → y, en contradiction avec l’hypothèse. Il n’y
a donc pas de cycle.
23
On compte chaque catégorie :
— On voit que les arbres de a) sont en bijection avec les arbres sous-
tendants de G−e. En effet un arbre sous-tendant de G qui ne contient
pas e reste un arbre sous-tendant de G − e et inversément.
— On voit que les arbres de b) sont en bijection avec les arbres sous-
tendants de G.e. L’argument est similaire : tout arbre A sous-tendant
de G qui contient e engendre un arbre A.e sous-tendant de G.e et ré-
ciproquement, tout arbre sous-tendant de G.e correspond à un arbre
sous-tendant de G qui contient e.
On a donc T (G) = T (G − e) + T (G.e).
T( ) = T( ) + T( )
= T( ) + T( ) + T( ) + T( )
= 1 + T( ) + T( ) + T( ) + T( ) + 2
=1+1+2+1+1+2
= 8.
On notera que la contraction génère quelque fois des boucles, qui n’ont pas
été représentées ici car elles n’interviennent dans aucun arbre.
24
Algorithme 3.9 (Algorithme de Kruskal).
#Entrée : graphe connexe pondéré
#Sortie : T , arbre sous-tendant de poids minimum
25
Démonstration. Soit T un arbre sous-tendant de poids minimum qui contient
F . Si e ∈ T alors la conclusion est trivialement vraie : F ∪ {e} est étendue
par T . Si e ∈/ T alors je considère T + e, qui possède un unique cycle. Ce
cycle passe nécessairement par une arête (au moins, en plus de e) de C qui
relie deux composantes connexes de G − C, puisqu’il relie une extrémité de
e qui est dans V1 à l’autre extrémité, qui est dans V2 . Soit f ∈ C une telle
arête. On voit que T + e − f , qui n’a plus de cycle (en enlevant f on brise
l’unique cycle de T + e) et a le même nombre d’arêtes que T , est également
un arbre sous-tendant. Puisque e est de poids w(e) ≤ w(f ) (par définition
de e ; on note w(.) la fonction de poids), et que w(T ) ≤ w(T + e − f ) (par dé-
finition de T , de poids minimum), on a que w(e) = w(f ). Donc T + e − f est
également un arbre sous-tendant de poids minimum, qui étend F ∪ {e}.
26
composantes connexes différentes, alors on admet l’arête et on fusionne les
deux composantes connexes en une seule (‘Union’).
On utilise donc une structure de données dite ‘Union-Find’ (ou ‘en-
sembles disjoints’, car les éléments sont répartis en ensemble disjoints). C’est
une structure de donnée qui enregistre une partition d’un ensemble donné.
Les classes de la partition sont désignées par un représentant de la classe
(élément arbitrairement choisi pour jouer ce rôle). Une opération de base
est la fusion de deux classes en une seule (Union). Une autre est de vérifier à
quelle classe appartient un élément donné (Find). Une troisième consiste à
ajouter un nouvel élément à l’ensemble, qui forme sa propre classe-singleton
(MakeSet).
Ici, à partir d’une structure de données vide, on peut créer une partition
de tous les noeuds en autant de classes-singletons (n opérations MakeSet) ; à
tout moment de l’algorithme, les classes de la partition encodent les noeuds
reliés par un même arbre. Ensuite pour vérifier si une arête doit être ajoutée,
on vérifie comme on a dit si les deux extrémités appartiennent au même
arbre (deux opérations Find). Si on ajoute l’arête à la forêt, on fusionne les
classes contenant les noeuds présents dans les arbres reliés par cette arête
(une opération Union).
Quelle est la complexité de ces opérations ? Par une implémentation astu-
cieuse de ces opérations, une suite des N opérations élémentaires en partant
d’une structure vide peut être effectuées en temps N O(α(N )). Ici la fonction
α(N ) est une fonction qui croît indéfiniment en fonction de N bien plus len-
tement que log N , en fait si lentement qu’on peut considérer qu’en pratique
elle est bornée par 5, par exemple. Pour l’anecdote c’est la réciproque de la
fonction f (n) = A(n, n) d’Ackermann, construite par ce dernier pour donner
un exemple de fonction de croissance extrêmement rapide. Dans notre cas,
on vérifie donc que la difficulté principale de l’algorithme est la phase de tri
des arêtes.
Mentionnons encore l’algorithme de Prim (1957) fait croître un arbre
(non-sous-tendant, sauf à la dernière étape) de proche en proche à partir
d’un noeud arbitraire, en ajoutant toujours l’arête la plus légère pour ce
faire, jusqu’à atteindre tous les noeuds.
27
Algorithme 3.14 (Algorithme de Prim).
#Entrée : un graphe connexe pondéré
#Sortie : T un arbre sous-tendant de poids minimum
5 5 5
11 11 11
6 4 6 4 6 4
8 8 8
12 12 12
10 10 10
9 9 9
7 7 7
3 2 3 2 3 2
28
O(m + n log n), pour un graphe de m arêtes et n noeuds. C’est mieux que
l’algorithme de Kruskal, néanmoins avec une important constante cachée,
qui est le talon d’Achille des tas de Fibonacci. Avec un “tas binaire” (qui
intervient également dans le célèbre “tri par tas”) on obtient O(m log n) ce
qui est théoriquement moins bon que le tas de Fibonacci pour des graphes
denses, et essentiellement équivalent à la complexité de l’algorithme de Krus-
kal.
Il y a encore d’autres algorithmes de recherche d’arbre sous-tendant de
poids minimal. Citons le plus ancien : celui de Borůvka (1926), et un des
plus récents : celui de Chazelle (2000), qui fonctionne en temps quasi-linéaire
O(mα(m)) (voir la preuve de complexité de l’algorithme de Kruskal pour
l’explication de α(m)).
Citons encore le théorème suivant pour vérifier qu’un arbre sous-tendant
donné est de poids minimum.
29
On peut alors considérer T + e, qui possède un cycle qui doit contenir
une arête f (autre que e) passant par deux arbres de T0 . Cette arête f ∈ T
est strictement plus lourde que e, on l’a vu. Ceci contredit la conclusion. On
a bien démontré l’implication, par contraposition.
3.3 Connectivité
Les arbres sont typiquement les graphes connexes les moins résistants à la
suppression d’arête ou de sommets dans la mesure où quelle que soit l’arête
ou le sommet (de degré au moins deux) que l’on supprimme, on déconnecte
le graphe. La notion de connexité permet de définir la robustesse d’un graphe
à ce type d’opérations. Voyons à présent comment elle se formalise.
Définition 3.19. Pour un graphe connexe, une coupe d’arêtes est un en-
semble d’arêtes qui déconnecte le graphe quand on l’en retire.
Notons que le graphe complet est le seul graphe simple dont tous les
noeuds sont voisins deux à deux ; la définition s’applique aussi aux graphes
non simples.
30
Démonstration.
connectivité ≤ arête-connectivité
Soit S une coupe minimum de k arêtes, qui sépare les noeuds en deux en-
sembles V1 et V2 . Epuisons tous les cas possibles :
— S’il y a un noeud v1 ∈ V1 qui n’est pas incident à S, alors je peux
retirer toutes les extrémités de S dans V1 (il y en a au plus k), ce qui
déconnecte v1 de V2 : on a donc trouvé une coupe de k noeuds ou
moins.
— De même s’il y a un noeud v2 ∈ V2 qui n’est pas incident à S.
— Si au contraire S atteint tous les noeuds du graphe alors on prend
un noeud arbitraire v1 ∈ V1 . S’il est incident à (disons) d arêtes de
S, alors il y a au plus k − d autres noeuds dans V1 , atteints par les
k − d arêtes de S qui ne sont pas incidentes à v1 . Le nombre total de
voisins de v1 (dans V2 et dans V1 ) est donc au plus d + (k − d) = k.
Si v1 et ses voisins ne constituent tout le graphe alors il y a noeud v2
non voisin de v1 , et supprimer ces k voisins au plus isole donc v1 de
v2 : on a trouvé une coupe de noeuds de k noeuds au plus.
Si v1 et ses voisins ne constituent tout le graphe, alors on applique
l’argument ci-dessus à un autre noeud qui n’est pas voisin de tous
les noeuds du graphe. Si un tel noeud n’existe pas, alors tous les
noeuds (au plus k + 1) sont voisins les uns des autres : dans ce cas
par convention la connectivité est au plus k. On a bien couvert toutes
les situations possibles.
31
=⇒ Il faut trouver deux chemins disjoints par les noeuds entre toute
paire de noeuds distincts u, v. On procède par induction sur la dis-
tance (nombre d’arêtes du plus court chemin) d(u, v) entre les deux
noeuds :
— Cas de base : d(u, v) = 1, càd u et v sont adjacents. Ici on a un
chemin trivial, composé d’une seule arête e entre u et v. Ce chemin
n’a pas de noeud intérieur, donc il suffit à présent de vérifier qu’il
existe un autre chemin. Si G est 2-connexe alors G est 2-arête-
connexe (cf. théorème précédent) donc retirer une arête laisse le
graphe connexe. En particulier si je retire l’arête e (le premier
chemin entre u et v), il reste un second chemin entre u et v.
— Si la conclusion recherchée est vraie pour toute paire de noeuds
x, y tels que d(x, y) < d(u, v), prouvons qu’elle est également vraie
pour u et v. Soit w, le dernier noeud sur le plus court chemin de
u à v. Par hypothèse, d(u, w) < d(u, v) et par récurrence, u et
w sont reliés par au moins 2 chemins dont les noeuds internes
sont distincts, nommons-les P1 et P2 . Si je retire w, il existe, par
2-connexité, un chemin P de u à v qui ne passe donc pas par
w. Soit x le dernier noeud de P qui appartient à P1 ou à P2
(éventuellement, x = u). Disons que x se trouve en fait sur P1 . Il
existe donc 2 chemins de u à v : uQ1 xQ (où Q1 est le morceau de
P1 qui va de u à x, et Q est le morceau de P qui va de x à v) , et
uP2 wv. Par construction, ces chemins sont disjoints.
Ce théorème se généralise :
Nous acceptons ce théorème sans preuve mais on peut dire qu’une preuve
possible passe par la version de ce théorème pour les arêtes.
32
Démonstration. k-connexe ⇒ degré min ≥ k ⇒ degrés ≥ kn ⇒ #arêtes ≥
P
kn/2.
Il existe une famille de graphes qui atteint cette borne : les graphes de
Harary.
7 1
6 2
5 3
33
4 Graphes hamiltoniens
Définition 4.1. Un chemin est hamiltonien s’il passe par chaque noeud du
graphe une et une seule fois.
Définition 4.2. Un cycle est hamiltonien s’il passe par chaque noeud du
graphe une et une seule fois.
(a) (b)
34
(c) (d)
vi+1 vn−1 vn
v1 v2 vi
35
Notons qu’on connaît un algorithme efficace (en temps polynomial) pour
résoudre le problème du postier chinois, mais pas pour celui du voyageur de
commerce. . .
36
5 Mariages, couplages et couvertures
5.1 Couplage
Définition 5.1. Un couplage dans un graphe est un ensemble d’arêtes M
tel que M ne contient pas de boucles et deux arêtes de M n’ont jamais
d’extrémité en commun.
Définition 5.3. Un couplage parfait est un couplage qui est incident à tous
les noeuds.
37
⇐= On procède à nouveau par contraposition : on montre que si M
(représenté en bleu ci-dessous) n’est pas maximum, alors il y a un chemin
M -augmenté. Soit M ∗ le couplage maximum (en rouge), avec |M ∗ | > |M |.
On va construire un chemin M -augmenté.
38
=⇒ Un couplage M incident à tout x ∈ X crée une fonction injective
fM : X → Y : x 7→ y où y est le noeud associé à x dans le couplage M .
On a ∀S ⊆ X, fM (S) ⊆ Voisin(S). Dès lors, | Voisin(S)| ≥ |fM (S)| =
|S|.
⇐= Par contraposition, on suppose qu’il n’existe pas de couplage inci-
dent à tout X et on veut montrer qu’il existe un S ⊆ X : | Voisin(S)| <
|S|.
Soit M le couplage maximum (en vert sur la figure ci-dessous) et
u ∈ X non incident à M . Prenons les chemins M alternés partant
de u : Soit Z l’ensemble des noeuds ainsi rencontrés. S = X ∩ Z,
T = Y ∩ Z. Notons que ces chemins M -alternés quittent toujours T
vers S par une arête de M , et quittent toujours S vers T par une
arête hors M .
On remarque que
— Voisin(S) = T (par construction ; une arête entre S et Y \ T
ne peut être dans le couplage, et si elle est hors couplage elle
constituerait un moyen de prolonger un chemin M -alterné, donc
l’extrêmité côté Y serait dans T également) ;
— M est incident à tout T , sinon on aurait un chemin M -augmenté
— car un chemin alterné qui part de u et qui arrive finalement à
y ∈ T (via une arête hors M ) peut toujours poursuivre par une
arête de M , si M est bien incident à T , mais doit s’arrêter à y et
constituer un chemin M -augmenté si M n’est pas incident à y ;
— M est incident à tout S\{u} par construction ;
— M crée une bijection entre S\{u} et T — car fM (S \ {u}) ⊆ T
et fM (T ) ⊆ S \ {u}, où l’on se rappelle que fM est injective.
On a dès lors Voisin(S) = T d’où | Voisin(S)| = |S| − 1 < |S|.
39
u
S
T
X \S
Y \T
Définition 5.9. Un graphe est k-régulier si tous les noeuds sont de degré
k.
5.2 Couverture
Définition 5.11. Une couverture de sommets d’un graphe est un ensemble
de sommets incident à toutes les arêtes.
40
Définition 5.12. Une couverture de sommets minimum d’un graphe est
une couverture de sommets avec un nombre minimal de sommets.
41
— M ∗ est incident à tout T , sinon on aurait un chemin M ∗ -augmenté —
car un chemin alterné qui part de U et qui arrive finalement à y ∈ T
(via une arête hors M ) peut toujours poursuivre par une arête de M ∗ ,
si M ∗ est bien incident à M ∗ , mais doit s’arrêter à y et constituer un
chemin M ∗ -augmenté si M ∗ n’est pas incident à y ;
— M ∗ est incident à tout S\U par construction ;
— M ∗ crée une bijection entre S\U et T — car fM ∗ (S \ U ) ⊆ T et
fM ∗ (T ) ⊆ S \ {u}, où l’on se rappelle que fM ∗ est injective.
Notons que dans la preuve on n’a pas seulement montré qu’il existe une
couverture minimum K ∗ telle que |K ∗ | = |M ∗ |, on a aussi vu comment on
pouvait la construire connaissant M ∗ .
42
A B C D E
a b c d e
Un couplage possible M est indiqué par les arêtes rouges tandis qu’une
couverture possible des sommets K est réprésentée par les sommets rouges.
Dans ce cas, on voit que |M | = |K|, ce qui garantit que le couplage est
maximum (et donc que la couverture est minimum).
M ← (M \ C) ∪ (C \ M )
3. Retour à l’étape 1.
Notons que l’étape 2(b) consiste à inverser les arêtes qui font partie du
couplage le long du chemin M -augmenté C qui a été trouvé.
43
1. Couplage initial :
44
6 Coloriages d’arêtes
Problème des horaires Chaque professeur doit enseigner à un certain
nombre de classes pendant un certain nombre d’heures. On veut créer un
horaire sur le plus petit nombre de périodes possibles.
On relie chaque professeur aux classes auxquelles il donne cours en
veillant a colorier les arêtes en fonction des tranches horaires. Deux arêtes
de même couleur ne peuvent pas être incidentes au même nœud.
Définition 6.1. Un coloriage des arêtes d’un graphe en k couleurs est l’as-
signation à chaque arête d’une couleur 1, 2, . . . , ou k. Ce coloriage est dit
propre si deux arêtes adjacentes sont toujours de couleurs différentes.
⇒ degmax ≤ χ0 ≤ k = degmax
⇒ χ0 = k
45
Théorème 6.4 (Vizing). Pour tout graphe simple : χ0 = degmax ou χ0 =
degmax +1
x x
y y
(e) (f)
46
y y
y0 y0
x x
(g) (h)
y0
x
y 00
y0
x
y 00
A présent le noir, qui était déjà libre pour y, l’est aussi pour x et on
se retrouve dans le cas 1. : on colorie xy en noir.
Pour compléter la preuve, il faudrait montrer que toutes les situations se
résolvent par l’application éventuellement répétée des trois techniques illus-
trées ici. On l’admet sans démonstration.
47
7 Cliques, ensembles indépendants et l’impossible
désordre
7.1 Ensembles indépendants
Théorème 7.1 (Théorème de l’amitié 1). Parmi six personnes, on en trouve
toujours trois qui se connaissent l’une l’autre, ou trois qui sont étrangères
l’une à l’autre.
c
a
b
48
Théorème 7.5. Un ensemble de nœuds est indépendant si et seulement si
son complémentaire est une couverture de sommets.
7.2 Cliques
Définition 7.8. Une clique d’un graphe est un ensemble de nœuds deux à
deux adjacents. Autrement dit, c’est un sous-graphe complet.
Définition 7.9. Une clique maximum est une clique dont le nombre de
nœuds est maximal.
49
Exemple 7.11. Voici le complémentaire du graphe de l’exemple 7.6. Les
sommets de l’ensemble indépendant de ce dernier exemple sont devenus les
sommets d’une clique (en rouge) dans le graphe complémentaire. L’ensemble
indépendant étant maximum, la clique l’est également.
Donc on a que
|M | ≥ R(m − 1, n) (3)
ou bien
|N | ≥ R(m, n − 1) (4)
50
M
Ceci démontre bien sûr que R(m, n) existe pour tout m, n, par induc-
tion sur m et n. On peut même vérifier que l’(in)équation de récurrence
se solutionne de la façon suivante, en se souvenant del’identité du triangle
p!
de Pascal pq = p−1 p−1
se souvient que pq = q!(p−q)!
q−1 + q . On dénote le
nombre d’ensembles de q éléments pris parmi p éléments.
m+n−2
Corollaire 7.16. Pour tout m, n ≥ 1 on a R(m, n) ≤ m−1 .
51
Le cas de base ici est m = 1 ou n = 1 : on vérifie que R(1, n) = 1 = n−1
0
et R(m, 1) = 1 =≤ m−1
m−1 , ce qui satisfait l’inégalité.
Ensuite le pas inductif pour m, n ≥ 2 : on suppose en particulier que les
inégalités suivantes sont déjà démontrées :
!
m+n−3
R(m − 1, n) ≤
m−2
et !
m+n−3
R(m, n − 1) ≤
m−1
En les additionnant et en appliquant le théorème 7.15 sur les membres de
gauche, ainsi que l’identité du triangle de Pascal sur les membres de droite,
on obtient le résultat attendu.
52
Démonstration. Il s’agit de montrer que pour un tel N il existe un coloriage
en deux couleurs (disons bleu et rouge) des arêtes de KN qui ne comporte
aucune m-clique monochrome.
Pour le montrer on utilise la méthode probabiliste. On génère un coloriage
aléatoire en choisissant la couleur bleue ou rouge pour chaque arête avec
probabilité 1/2 indépendamment des autres arêtes. Il suffit de démontrer
la probabilité de n’avoir aucune m-clique monochrome est non-nulle pour
démontrer l’existence d’un tel coloriage.
Alternativement on démontre que la probabilité d’avoir une m-clique
monochrome est < 1 :
X
Proba[∃ m-clique monochrome] ≤ Proba[arêtes entre {v1 , . . . , vm } monochromes]
noeuds{v1 ,...,vm }
X 1 m(m−1)
= 2( ) 2
noeuds{v1 ,...,vm }
2
!
N − m(m−1) +1
= 2 2
m
<1
53
Exemple 7.22. Séparons les nombres de 1 à 13 en trois couleurs :
couleur1 1 4 10 13
couleur2 2 3 11 12
couleur3 5 6 7 8 9
On vérifie que quelle que soit la couleur attribuée au 14, la propriété sera
vérifiée.
Démonstration. Nous montrons que l’on peut choisir rk = R(3, ..., 3).
| {z }
k
Colorions les arêtes du graphe à rk nœuds, sachant qu’on a réparti arbi-
trairement ses nœuds dans les classes S1 , S2 , ...., Sk .
Nous allons les colorier de la manière suivante : l’arête ij est dans la
couleur c ssi | i − j |∈ Sc . Nous utilisons donc k couleurs différentes pour les
arêtes.
Par le théorème de Ramsey, il y a un triangle monochrome. Donc il y a
i, j et l tels que :
— i<j<l
— j − i, l − j, l − i sont dans la même classe.
On prend alors x = j − i, y = l − j et z = l − i, d’où x + y = z.
54
Parmi les théorèmes les plus avancés de la théorie de Ramsay, on trouve
celui-ci :
55
8 Coloriages de sommets
8.1 Coloriages de sommets et nombre chromatique
Définition 8.1. Un coloriage ou une coloration des noeuds (parfois appellé
également sommets-coloration) est l’attribution à chaque noeud d’une cou-
leur. Le coloriage est dit propre si des noeuds adjacents ont des couleurs
différentes (on parlera toujours implicitement de coloriages propres). On
parle de k-coloriage du graphe quand on se restreint à k couleurs au plus.
Exemple 8.3. Un graphe est biparti ssi son nombre chromatique est χ ≤ 2
(il suffit de colorier les noeuds selon leur classe de la bipartition du graphe,
le cas χ = 1 est pour des noeuds isolés). Le graphe complet à n noeuds
Kn (chaque noeud est adjacent à tous les autres) a χ(Kn ) = n. Un graphe
constitué d’un simple cycle ont un nombre chromatique égal à 2 (3) si le
nombre de noeuds est pair (impair). Un graphe dit “planaire” a χ ≤ 4, voir
chapitre sur les graphes planaires.
Démonstration. Dans une clique, chaque noeud est adjacent à tous les autres,
donc tous les noeuds de la clique doivent avoir une couleur différente. Il
faut donc au minimum une couleur différente pour chaque noeud de la plus
grande clique du graphe.
56
Cette borne n’est pas améliorable dans l’absolu, puisqu’elle atteinte pour
un cycle impair ( degmax = 2, χ = 3) et pour un graphe complet Kn (
degmax = n − 1, χ = n). Toutefois, dans cette preuve on constate que l’on
visite les noeuds dans n’importe quel ordre. Cela fait beaucoup de liberté !
On se dit qu’on choisissant un ordre de façon intelligente pour le coloriage
glouton, on peut peut-être réduire le nombre de couleurs utilisées, du moins
pour certains graphes.
57
Démonstration. Il n’est pas 2-connexe, il existe donc un noeud u tel que
G − u est non-connexe. Séparons le graphe en deux sous-graphes, G1 et G2 ,
uniquement liés via u et tel que G = G1 ∪ G2 et G1 ∩ G2 = {u}.
G1 G2
58
(ils sont non-adjacents), puis je continue le coloriage en partant des
autres feuilles de l’arbre et en remontant vers u, de sorte que chaque
noeud (n equ) soit colorié avant son parent.
Tout les noeuds différents de u peuvent être coloriés avec une couleur
≤ k en appliquant cette stratégie. Les noeuds v et w ayant la même
couleur, u a au plus k − 1 couleurs dans ses voisins et donc une k ième
est disponible.
59
Corollaire 8.11 (Birkhoff). Pour un graphe G à n noeuds, πG (k) est un
polynôme monique de degré n, de terme constant nul et dont les coefficients
alternent en signe.
60
9 Graphes planaires
Un graphe est planaire si il possède une représentation dans le plan dont
les arêtes ne se touchent pas, sauf à leurs extrémités.
61
Il est possible de partir du graphe correspondant en remplacant les pays
par des sommets et les frontières par des arêtes. Ce graphe est alors planaire.
Il suffit alors de montrer que tout graphe planaire a un nombre chromatique
χ ≤ 4 (ou de manière équivalente, admet au moins un coloriage de quatre
couleurs).
Notons qu’un graphe planaire peut être dessiné de manière non planaire.
•
• •
• •
• •
•
• •
• •
• •
62
Démonstration. Représentons K5 dans le plan. Soit l’ensemble de ses noeuds
{v1 , v2 , v3 , v4 , v5 }.
v1 , v2 et v3 forment un triangle. Où placer v4 ?
v3
v1 v2
v3
v4
v1 v2
Où placer v5 ?
(a) A l’intérieur du triangle formé par v1 , v3 et v4 ? Le graphe ne se-
rait plus planaire puisqu’il faudrait couper le triangle v1 , v3 et v4
pour relier v5 à v2 .
63
v3
v5
v4
v1 v2
v3
v5
v4
v1 v2
Définition 9.5. Une subdivision d’un graphe est un graphe obtenu en rem-
plaçant une ou plusieurs arêtes par un chemin (de longueur 1 ou plus).
Théorème 9.7. Une subdivision d’un graphe non planaire est non-planaire,
et un sous-graphe d’un graphe planaire est planaire.
64
Définition 9.8. Un graphe planaire (dans une représentation sans croise-
ment) découpe le plan en plusieurs régions connexes (au sens géométrique).
Ces régions sont appelées faces. Il y a une et une seule face non bornée,
nommée face extérieure, les autres faces sont intérieures.
Définition 9.9. On identifie le bord d’une face au parcours fermé qui longe
la face. Le bord parcourt chaque arête une ou deux fois. Une face est inci-
dente aux arêtes et sommets qui sont sur son bord. Le degré d’une face est
la longueur du bord, donc le nombre d’arêtes incidentes (comptées une ou
deux fois).
Graphe Dual
4 faces
1 • Face extérieure : 1234521
degré(face extérieure) = 6
5 • 6 • 3
4 Face extérieure
65
Théorème 9.12. La somme des degrés des faces est deux fois le nombre
d’arêtes.
n−e+f =2
n − (e − 1) + (f − 1) = 2
=⇒ n − e + f = 2.
66
Or par le théorème des poignées de main dual,
X
deg(f ) = 2|E|.
f ∈F
Et donc
2
e ≥ |F |. (5)
3
En injectant 5 dans la formule d’Euler, on obtient
2
2 = n − e + |F | ≤ n − e + e
3
d’où
1
e ≤ n − 2.
3
Considérons 2 cas
— Si |V | < 3, l’énoncé est trivial car dans un graphe simple, pour tout
v ∈ V , deg(v) ≤ |V | − 1 du coup deg(v) ≤ |V | − 1 < 2 ≤ 5 pour tout
v.
— Comme notre graphe est simple, on peut utiliser le théorème 9.15, on
a donc |E| ≤ 3|V | − 6. Dès lors
3|V | − 6
degavg ≤ 2
|V |
12
=6− < 6.
|V |
67
Corollaire 9.18. K3,3 est non planaire.
|F | − |E| + |V | = 2
or
|F | − |E| + |V | ≤ 4.5 − 9 + 6 = 1.5.
K3,3 ne peut donc pas être planaire.
On sait donc que soit p, soit q est < 4 (ou les deux). Or p ≥ 3 et q ≥ 3 (par
géométrie, graphes planaires simple de dual simple : toute face a au moins
trois côtés, tout sommet a au moins trois voisins). Les possibilités sont
68
p q |V | |F | |E| Polyèdre
3 3 4 4 6 Tétraèdre
3 4 8 6 12 Cube
4 3 6 8 12 Octaèdre
3 5 20 12 30 Dodécaèdre
5 3 12 20 30 Icosaèdre
Il reste a montrer que chacune de ces possibilités pour p et q est réalisée
par un unique polyèdre régulier (indiqué dans la colonne de droite) : c’est
la partie ‘géométrique’ de la preuve, que nous admettons ici.
69
(c1 − c3 ) (c2 − c4 )
v1 v2 v3 v4 v5
70
10 Flots et coupes
10.1 Flots et coupes
Définition 10.1. Un réseau est un graphe dirigé G = (V, E, ϕ), dont les
noeuds sont partitionnés en sources, puits et noeuds intermédiaires, et dont
chaque arête e porte un nombre réel c(e) nommé capacité. Un flot (d’un
réseau) est une fonction f (e) sur les arêtes, telle que la capacité limitée soit
respectée :
0 ≤ f (e) ≤ c(e) ∀e ∈ E,
et que le flot net sortant de chaque noeud intermédiaire soit nul (équation
de conservation, "ce qui rentre doit sortir") :
X X
f (uv) = f (vu) ∀v étant un noeud intermédiaire.
u∈V u∈V
Définition 10.2.
— Le flot net sortant d’un noeud u est défini comme
X X
fnet (u) = f (a) − f (b).
arêtes a d’origine u arêtes b de destination u
— Le flot net sortant d’un ensemble U de noeuds est la somme des flots
nets sortant des noeuds de U .
— La valeur du flot, notée valeur(f ), est le flot net sortant de l’ensemble
des noeuds sources.
s1 2/4 1/1
1/2
0/2 1/2 0/1 t
2/4
s2 1/1 2/2
71
Définition 10.4. Une coupe (d’un réseau) est un ensemble d’arêtes tel qu’il
n’y ait plus aucun chemin d’un noeud source vers un noeud puits quand on
retire cet ensemble du graphe. La capacité d’une coupe est la somme des
capacités des arêtes constituant la coupe.
Lemme 10.5. Pour un flot donné, toutes les coupes ont le même flot net,
qui est la valeur du flot.
72
Démonstration. On prend comme point de départ le lemme précédent :
= capacité(S → S̄).
P P P
Avec égalité si et seulement si i∈S f (ji) = 0 et i∈S f (ij) = i∈S c(ij)
j∈S̄ j∈S̄ j∈S̄
ji∈E ij∈E ij∈E
c’est à dire que toutes les arêtes qui lient un noeud de S à un noeud de S̄
sont saturées et que les arêtes qui lient un noeud de S̄ à un noeud de S ont
un flot nul.
73
De manière intuitive, l’intérêt d’un chemin f -augmentant est que l’on
peut augmenter la valeur du flot f en faisant passer plus de flot le long de ce
chemin. En effet, un nouveau flot valide peut être obtenu en faisant la mise à
jour f (e) ← f (e) + i(P ) pour les arêtes en sens direct, et f (e) ← f (e) − i(P )
pour les arêtes en sens inverse. La valeur du flot est ainsi augmentée de i(P ).
Exemple 10.9. Sur le flot f figure 3 on a un chemin f -augmentant SABCDT :
en effet il va de la source S au puits T et est non-saturé car i(SA) = 5−1 = 4
(sens direct), i(AB) = 2 (sens inverse), i(BC) = 1, i(CD) = 2, i(DT ) = 4
et donc i(SABCDT ) = 1. On peut dès lors créer un nouveau flot f 0 valide
qui augmente la valeur du flot de 1, donc valeur(f 0 ) = valeur(f ) + 1. Le flot
est alors modifié le long de ce chemin comme montré à la figure 4. Notre
chemin est maintenant f 0 -saturé, on ne peut plus augmenter le flot le long
de ce chemin (l’arête BC a atteint sa capacité maximale).
A C T
S B D
A C T
S B D
74
des chemins non f -saturés. S ne contient aucun puits, sinon on aurait
un chemin f -augmentant. Soit une arête de S → S̄, elle est f -saturée
par construction de S, sinon la destination de l’arête serait dans S.
Soit une arête de S̄ → S, elle doit être f -nulle pour la même raison.
Dès lors,
A 4/4 a
S T
B 0/5 b
et par le corollaire 10.7 on a donc que cette coupe est la coupe mini-
num et ce flot est le flot maximum.
fmax = coupemin .
75
Algorithme 10.12 (Algorithme de Ford-Fulkerson). L’algorithme de Ford-
Fulkerson permet de determiner le flot maximum d’un graphe. Partant d’un
flot initial arbitraire f , on cherche un chemin f -augmentant et on augmente
le flot grâce à ce chemin, jusqu’à ce qu’il n’y ait plus de chemin augmentant
ce qui veut dire que le flot est optimal. Pour trouver le chemin augmentant on
peut, par exemple, créer un graphe auxilière, ou chaque arête est remplacée
par une arête dans le même sens portant la capacité encore disponible (le flot
qu’on peut ajouter, càd c(e) − f (e)) et un arête retour portant la quantité
qu’on peut retirer sur cette arrête (le flot qu’on peut retirer, càd f (e)). Il
suffit ensuite de chercher un chemin partant d’une source vers un puits dans
le graphe auxilière pour trouver un chemin augmentant associé.
Lemme 10.13. Dans tout graphe dirigé avec un noeud source u et un noeud
puits v et chaque arête de capacité unitaire, le nombre maximum de chemins
dirigés de u vers v disjoints deux à deux par les arêtes est la valeur du flot
maximum.
76
11 P, N P et N P-complétude
11.1 P, N P et N P-complétude
Définition 11.1. Un problème de décision est une liste d’objets finis appelés
instances, chacune porteuse d’un label OUI ou NON. Donc c’est une fonction
des instances vers l’ensemble {OUI, NON}. Les instances positives sont celles
de label OUI.
Un algorithme résout un problème de décision donné s’il prend en entrée une
instance du problème et renvoie en sortie le label OUI ou NON correspondant
à l’instance.
Corollaire 11.7. P ⊆ N P
77
Définition 11.8. Etant donnés deux problèmes P et Q, on dit que P est
réductible en temps polynomial à Q, ou que P est réductible à Q, ou plus
informellement que P est plus facile que Q, noté P ≤ Q, s’il existe un
algorithme efficace A (appelé réduction) qui prenne en entrée une instance
n de P et renvoie en sortie une instance A(n) de Q, telle que n est positive
ssi A(n) est positive.
78
Définition 11.12. On dit qu’un problème P est N P-complet si P ∈ N P
et pour tout problème Q ∈ N P, Q ≤ P .
C’est donc un problème de N P plus difficile que tous les autres.
Théorème 11.16 (Comment prouver qu’un problème P est N P-complet ?). Démonstration. 1.
Prouver P ∈ N P ;
2. Choisir un problème Q connu comme N P − complet ;
3. Prouver Q ≤ P en exhibant une réduction efficace.
79
Exemple 11.19. k-INDEPENDANT est N P-complet.
La réduction de 3-SAT vers k-INDEPENDANT sur un exemple :
donne
x1 ¬x2 ¬x3
¬x1 x1
x2 x2
x3 x3
80