Livre Algo Unlocked

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 189

MATHÉMATIQUES

ALGORITHMIQUES

François Bergeron

Hiver 2017

Université du Québec à Montréal


Département de mathématiques
Case postale 8888, Succursale Centre-Ville
Montréal (Québec) H3C 3P8
2
Table des matières

1 Récurrence, nombres et fonctions numériques 7


1.1 Entiers, et preuves par récurrence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Définitions récursives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4 Tours de Hanoı̈(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Opérations de base avec les entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Polynômes en x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.7 Un problème non résolu(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.8 Coefficients binomiaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.9 Entiers modulo n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.10 Le théorème d’Euler-Fermat(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.11 La cryptographie à clé publique(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.12 Fractions continues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.13 Nombres de Fibonacci et nombre d’or . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.14 Un exemple d’analyse d’algorithme(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.15 Calcul approché de zéros (réels) de fonctions . . . . . . . . . . . . . . . . . . . . . . 30
1.16 Un joli coup d’oeil(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.17 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2 Ensembles et fonctions 41
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2 Ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.3 Sous-ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.4 Opérations de base sur les ensembles . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.5 Produit cartésien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.6 Relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.7 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.7.1 Bijections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.7.2 Injections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

i
ii TABLE DES MATIÈRES

2.7.3 Surjections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
2.8 Compter les éléments d’un ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.9 Ensembles, décidabilité, et complexité d’algorithmes(∗) . . . . . . . . . . . . . . . . . 56
2.10 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3 Graphes simples 63
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.2 Graphe simple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.3 Voisinage et degré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.4 Chemin dans un graphe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.5 Opérations sur les chemins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.6 Cycles hamiltoniens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.7 Composantes connexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.8 Plus court chemin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.9 Cycles eulériens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.10 Multigraphe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.11 Isomorphisme de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.12 Matrice d’adjacence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
3.13 Contraction d’arêtes et mineurs(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.14 Graphes planaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.15 Cartes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.16 Coloration de graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.17 Chemins dans le graphe Z × Z(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.18 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4 Structures arborescentes 93
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.2 Arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.3 Arborescences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.4 Arbres binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
4.5 Arbres binaires croissants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4.6 Arbres ordonnés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.7 Fonction de stationnement(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
4.8 Forêts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.9 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

5 Graphes orientés 107


5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.2 Graphe orienté. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.3 Endofonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
TABLE DES MATIÈRES iii

5.4 Chemins dans un graphe orienté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111


5.5 Graphes acycliques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.6 Graphes valué . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.7 Matrices booléennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.8 Le demi-anneau tropical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.9 Flot dans un réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.10 Chemins et mots (∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
5.11 Chaı̂nes de Markov(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.12 Ordres(∗) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
5.13 Jeux impartiaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
5.14 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

6 Mots, langages, et automates 135


6.1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6.2 Mots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.3 Langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
6.4 Grammaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.5 Automates déterministes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.6 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

7 Algèbre(∗) 145
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.2 Algorithme de Gauss-Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.3 Algorithme d’Euclide pour polynômes . . . . . . . . . . . . . . . . . . . . . . . . . . 146
7.4 Bases de Gröbner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.5 Permutations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.6 Diagrammes de Ferrers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
7.7 Algorithme RSK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.8 Le problème du mot pour un groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
7.9 Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Appendices 158

A Un soupçon de logique 159

B Axiomatique de la théorie des ensembles 161

C Notions d’algèbre 165


C.1 Polynômes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
C.2 Groupe et anneaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
C.2.1 Anneaux et idéaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
iv TABLE DES MATIÈRES

C.2.2 Anneau Euclidien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

D Calcul formel 169


D.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
D.1.1 Maple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
D.1.2 Sage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

E Notations 175
Introduction

Le but de ces notes est de présenter, d’un point de vue algorithmique,


divers domaine des mathématiques, en particulier dans le contexte
d’algorithmes numériques simples, et dans celui de la théorie des
graphes. Bien qu’il n’y ait pas de définition mathématique rigoureuse
générale de la notion d’algorithme, on peut naı̈vement dire qu’on a
trouvé un algorithme pour résoudre un problème, lorsqu’on sait décrire
une méthode explicite pour résoudre ce problème, en un nombre fini
d’étapes précises. Pour donner de telles descriptions, l’un des plus im-
portants outils est la  récursivité , pour laquelle on a l’avantage
net d’avoir une description mathématique précise. De plus, la notion
de récursivité joue un rôle fondamental dans beaucoup de contexte
mathématique, que ce soit pour la définition d’objets mathématiques
nouveaux, la construction de structures complexes, le calcul de fonc- Al-Khwarizmi
tions, ou comme outils de preuve de certains faits mathématiques. (∼780–∼850)
Le terme  algorithme  dérive du nom du mathématicien Al-Khwarizmi, considéré par plusieurs
comme le fondateur de l’algèbre. Il y a de nombreux liens entre l’algèbre et l’algorithmique. Pour
aider à mieux comprendre de quoi il retourne, considérons un exemple typique. Sous l’une de ses
formes les plus simples, la récursivité apparaı̂t naturellement dans le calcul efficace du plus grand
commun diviseur comme on va le voir ci-dessous. Rappelons que le plus grand commun diviseur
d := h a, b i, de deux nombres entiers (positifs) a et b, est caractérisé par le fait que :

(1) d > 0 divise a et b,

(2) si c divise a et b, alors c divise d.

Rapellons qu’on dit que a divise b si et seulement le reste de la division de b par a est 0. La clause
(2) assure que d est le plus grand des nombres qui divise à la fois a et b. Bien entendu, on a
h a, b i = h b, a i, puisque dans les deux cas il s’agit du même plus grand commun diviseur.

1
2 TABLE DES MATIÈRES

Par exemple, 12 est le plus grand commun diviseur de 84 et 120, et on écrit donc 1

h 84, 120 i = 12.

À l’école, on enseigne habituellement l’algorithme (peu efficace) suivant pour  calculer  le plus
grand commun diviseur. On commence par  factoriser  chacun des nombres a et b en produit de
nombres premiers, ici
84 = 22 · 3 · 7, et 120 = 23 · 3 · 5,
puis on  trouve  le plus grand facteur commun (en prenant la plus grande puissance de chaque
nombre premier impliqué qui soit commun aux deux factorisations) :

12 = 22 · 3.

Cette méthode devient rapidement impraticable lorsque la taille des nombres a et b augmente. En
fait, cela est le cas même pour un ordinateur puissant, qui peine à factoriser un nombre de 80
chiffres comme :

25976406898076471238178176302465963001785719098499989870948037468528746663938173.

Évidemment, c’est bien pire pour un être humain. En fait, la  difficulté  de factoriser un grand
nombre est à la base de nombreux système de cryptographie moderne, par exemple le fameux
système RSA (voir 1.11). Le calcul du plus grand commun diviseur joue de plus un rôle de base
dans l’élaboration même de ce système de cryptographie, et il est essentiel de pouvoir le calculer
rapidement le plus grand commun diviseur pour des nombres même plus grands que celui ci-dessus.
La  bonne  méthode de calcul du plus grand commun diviseur est connue depuis au moins 2300
ans (sinon même avant), sous le nom d’algorithme d’Euclide. C’est l’un des plus vieux algorithmes
intéressants, tout en étant toujours d’actualité. Considérons donc des entiers positifs a et b, en
supposant que a ≤ b pour simplifier la présentation. On divise b par a, pour obtenir que

b = q · a + r, (0.1)

avec q égal au quotient, et 0 ≤ r < a égal au reste de la division. Rappelons qu’on dit que  a
divise b  si et seulement si le reste de la division est zéro, c.-à-d. : r = 0. Pour mettre en place
l’algorithme d’Euclide, l’observation clé est qu’on a que

c divise a et b, ssi c divise r et a. (0.2)

Ceci se démontre facilement en exploitant l’égalité (0.1), et il s’ensuit immédiatement qu’on a

h a, b i = h r, a i. (0.3)
1. Dans les textes mathématiques, on utilise la notation h a, b i plutôt que la notation Pgcd(a, b) d’inspiration plus
informatique.
TABLE DES MATIÈRES 3

C’est là l’étape de base de l’algorithme. On la répète jusqu’à ce qu’il soit facile de donner une
réponse, c’est-à-dire lorsque r = 0. Illustrons par un exemple. Pour a = 623312 et b = 3421568, on
a successivement
3421568 = 5 · 623312 + 305008, et donc h 623312 , 3421568 i = h 305008, 623312 i,
623312 = 2 · 305008 + 13296, = h 13296, 305008 i,
305008 = 22 · 13296 + 12496, = h 12496, 13296 i,
13296 = 1 · 12496 + 800, = h 800, 12496 i,
12496 = 15 · 800 + 496, = h 496, 800 i,
800 = 1 · 496 + 304, = h 304, 496 i,
496 = 1 · 304 + 192, = h 192, 304 i,
304 = 1 · 192 + 112, = h 112, 192 i,
192 = 1 · 112 + 80, = h 80, 112 i,
112 = 1 · 80 + 32, = h 32, 80 i,
80 = 2 · 32 + 16, = h 16, 32 i,
32 = 2 · 16 + 0, = h 0, 16 i.
On conclut donc que 16 est le plus grand commun diviseur de 623312 et 3421568, c.-à-d. :

h 623312 , 3421568 i = 16,

sans avoir eu à factoriser ces nombres.


On automatise la réponse en observant que le plus grand commun diviseur
de a et 0 est a. On a donc en formule :

h 0, a i = a, (0.4)

et tout l’algorithme se décrit alors  récursivement  de la façon suivante


(supposant que a ≤ b) :
Algorithme 0.1 (d’Euclide).
(
h r, a i, si b = q · a + r, avec a 6= 0,
h a, b i = (0.5)
b, si a = 0.
Euclide d’Alexandrie
Programmé de cette façon, un ordinateur calcule presque instantanément (environ -350)
le plus grand commun diviseur suivant :

h 1361129467683753853853498429727072845823, 1267650600228229401496703205375 i = 1023.

On peut généraliser le calcul du plus grand commun diviseur à un ensemble (fini) de n entiers :
a1 , a2 , . . . , an , de la façon suivante. Pour simplifier, on suppose que 0 ≤ a1 ≤ a2 ≤ . . . ≤ an , et
on pose
4 TABLE DES MATIÈRES

Algorithme 0.2 (d’Euclide général).



h r, a1 , a2 , . . . , an−1 i,
 si a1 6= 0 et an = q · a1 + r, avec 0 ≤ r < a1
h a1 , a2 , . . . , an i = h a2 , a3 , . . . , an i, si a1 = 0 et n > 1,

a1 , si n = 1.

(0.6)

C’est ce type d’approche que nous allons développer dans ces notes, en décrivant des  algo-
rithmes  intéressants soit pour le calcul de fonctions, la construction d’ensembles, la solution
d’équations, ou encore la résolution de problèmes sur les graphes. L’emphase sera donc mise sur
l’aspect calculatoire des mathématiques, pour en démontrer la puissance, mais aussi les limites. On
adoptera souvent une approche récursive à la solution de problèmes considérés (ou à la définition
de nouveaux objets mathématiques). Informellement, une telle approche consiste en la description
de la façon de
a) résoudre le problème dans les cas simples,
b) ramener tous les autres cas à des cas qui se rapprochent des cas simples.
C’est aussi simple que d’apprendre à marcher :  on fait un pas, et on continue à marcher .

Remarques sur ces notes de cours

Avant d’embarquer dans notre aventure, un avertissement d’ordre général est probablement néces-
saire en ce qui concerne la nature des définitions mathématiques. En effet, dans l’élaboration d’un
sujet mathématique il est crucial d’avoir des définitions claires et précises des objets à manipuler.
En particulier, une bonne définition doit permettre de déterminer quand deux objets sont égaux,
en plus d’indiquer comment il faut procéder pour construire de tels objets. Il faut apprendre à lire
et utiliser très attentivement les définitions proposées, en n’oubliant pas que le critère ultime d’une
bonne définition est la facilité avec laquelle elle permet le développement des notions abordées.
Cela demande une attention constante à la rigueur et la précision du discours. Cependant, afin de
conserver une présentation agréable et intelligible, il est nécessaire de nourrir la compréhension avec
des illustrations plus intuitives. Dans certains cas, ces deux objectifs sont difficiles à réconcilier, et
nous ne réussirons peut-être pas nécessairement toujours à le faire.
La théorie des ensembles sert de langage de base pour les définitions et le discours mathématiques.
Une excellente maı̂trise de celle-ci est donc essentielle pour bien progresser dans l’étude des notions
abordées.
Les sections, exercices et chapitres marqués d’une étoile(∗) sont plus avancés, ou simplement présentés
pour susciter l’intérêt chez les passionnés. Ils peuvent être omis en première lecture, ou considérés
comme facultatifs dans une introduction au sujet. Certains exercices plus difficiles sont de nature
TABLE DES MATIÈRES 5

exploratoire, et constitue une porte ouverte sur des notions qui seront abordées dans des cours plus
avancés.
Plusieurs des photographies (et informations biographiques) proviennent du site historique de l’Uni-
versité Saint-Andrews :

http://www-history.mcs.st-and.ac.uk/history/BiogIndex.html

En général, des liens hypertextes sont associés aux noms des mathématiciens apparaissant dans
le texte. On peut ainsi consulter leur biographie, mais celle-ci est en général en anglais. D’autres
images proviennent de l’encyclopédie Wikipédia.
6 TABLE DES MATIÈRES
Chapitre 1

Récurrence, nombres et fonctions


numériques

Le premier contexte dans lequel nous allons explorer la notion d’algorithmes est celui des nombres
(surtout entiers) et des fonctions entre ensembles de nombres. Ici, la notion de récursivité joue un
rôle crucial. Nous allons donc en discuter des aspects fondamentaux plus en détail.

1.1 Entiers, et preuves par récurrence

Une des particularités importantes de l’ensemble 1 des nombres entiers (non négatifs)

N = {0, 1, 2, 3, 4, . . .}

est qu’il sert souvent à indexer des suites de nombres, de fonctions, de formules, etc. Dans ces divers
contextes, on est amené à formuler une suite d’énoncés mathématiques

P0 , P1 , P2 , P3 , . . .

associés à ces suites d’objets mathématiques, qu’on cherche ensuite à démontrer. Dans ces circons-
tances, l’outil de démonstration privilégié est très souvent la preuve par récurrence. Son schéma
général consiste en deux étapes :
(1) On démontre d’abord que l’énoncé P0 est vrai.
(2) Puis, en supposant que Pn−1 est vrai (pour n quelconque), on montre que Pn s’ensuit.
1. Dans ce chapitre, nous allons utiliser la notion d’ensemble de façon très informelle. Un point de vue un peu
plus rigoureux sera abordé dans le prochain chapitre.

7
8 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

Le principe de récurrence assure qu’on peut alors conclure que Pn est vrai pour tout n.
Illustrons ceci par un exemple simple. Considérons la suite d’énoncés Pn (un pour chaque n dans
N) qui affirme qu’on a l’égalité
n
X n (n + 1)
k= . (1.1)
2
k=1
Ainsi,
P0 correspond à 0 = (0 · 1)/2,
P1 ” 1 = (1 · 2)/2,
P2 ” 1 + 2 = (2 · 3)/2,
P3 ” 1 + 2 + 3 = (3 · 4)/2,
P4 ” 1 + 2 + 3 + 4 = (4 · 5)/2,
..
.
Le processus récursif pour prouver
(∀n ∈ N) Pn ,
autrement dit que la formule  
n+1 n (n + 1)
:=
2 2
donne bien la somme des entiers de 1 à n, quelque soit n, se déroule comme suit. On commence
par montrer (ou ici, simplement observer) que P0 est vrai, c.-à-d. :
0 = (0 · 1)/2,
puis, en supposant que Pn−1 est vrai, c’est-à-dire que
(n − 1) n
1 + 2 + . . . + (n − 1) = , (1.2)
2
on vérifie, par le calcul suivant, que Pn en découle bien :
1 + 2 + . . . + n = (1 + 2 + . . . (n − 1)) + n,
| {z }
(n − 1) n
= + n,
2
n (n + 1)
= .
2
On a donc prouvé que
n
X n (n + 1)
(∀n ∈ N) k= .
2
k=1
1.2. FONCTIONS 9

1.2 Fonctions

Avant d’aborder la notion de fonction récursive, il est utile de clarifier la notion moderne de fonction.
Cela est essentiel à la bonne compréhension de toute la suite de ce texte, et il y a abondante matière
à une réflexion approfondie.
Bien que la notion de fonction soit l’une des plus importantes
en mathématiques, ce n’est qu’à la fin du dix-neuvième siècle
qu’elle a pris la forme moderne 2 qu’on lui connaı̂t. Une rela-
tion fonctionnelle f , de l’ensemble A vers l’ensemble B, est une
relation f ⊆ A × B, qui possède la propriété que :

 ∀ x ∈ A, ∃!y ∈ B tel que (x, y) ∈ f  . (1.3)

Autrement dit, l’élément x dans A caractérise uniquement l’élément correspondant y dans B. Il est
habituel de désigner par f (x) cet élément, et on a donc

f (x) = y ssi (x, y) ∈ f . (1.4)

Formellement parlant, une fonction de A vers B est un triplet (f, A, B), où f est une relation
fonctionnelle de A vers B. Il est habituel d’écrire f : A → B pour ce triple. Ainsi, on a la fonction
f : {a, b, c, d} → {1, 2, 3}, telle que

f = {(a, 1), (b, 3), (c, 2), (d, 1)}. (1.5)

Elle peut aussi se décrire sous la forme :

f (a) = 1, f (b) = 3, f (c) = 2, et f (d) = 1.

Il y a en fait un grand nombre de façons de construire ou de spécifier une fonction. Par exemple,
une fonction f peut être décrite par une formule qui calcule f (x), ou apparaı̂tre comme solution
d’une équation différentielle, ou encore être définie récursivement. L’important est que le critère
abstrait (1.3) soit satisfait. Deux fonctions f : A → B et g : A → B sont égales si et seulement si
on a f (x) = g(x), pour tout x dans A. Autrement dit, on connaı̂t une fonction si et seulement si on
connaı̂t sa valeur f (x) pour chaque élément x de A. On peut donc penser à une fonction comme
étant un processus f qui

 choisit un élément f (x) de B pour chaque élément x de A  .

Pour une fonction f : A → B, on dit que l’ensemble A est la source de F , et que l’ensemble B en
est le but.
2. On ne sait trop qui doit être crédité pour cela.
10 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

Pour deux fonctions f : A → B et g : B → C, avec le but de f égal à la source de g, on définit une


nouvelle fonction g ◦ f : A → C, en posant, pour x dans A :

(g ◦ f )(x) := g(f (x)). (1.6)

On dit alors que g ◦ f est le composé de f et de g. La source


de g ◦ f est la source de f , et son but est le but de g. On f
A H - B
a donc la situation de la Figure ci-contre. La composition H
H g
de fonction est associative. C’est donc dire que, pour trois g ◦ f HH
H
fonctions f : A → B, g : B → C, et h : C → D, on a toujours Hj
H ?
C
(h ◦ g) ◦ f = h ◦ (g ◦ f ).

De plus, pour chaque ensemble A, on a une fonction appelée identité, IdA : A → A, simplement
définie en posant IdA (x) = x, pour tout x dans A. Pour toute fonction f : A → B, on a alors

f ◦ IdA = f = IdB ◦ f .

1.3 Définitions récursives

Plusieurs fonctions sur les entiers admettent une description récursive. Parmi les illustrations ty-
piques, on a la fonction factorielle dénotée n!, définie comme :
(
n · (n − 1)!, si n > 0,
n! = (1.7)
1, si n = 0,

ou encore la fonction de Fibonacci :


(
F (n − 1) + F (n − 2), si n > 1,
F (n) = (1.8)
1, si n = 0 ou 1.

Ces descriptions peuvent être directement utilisées pour  calculer  la fonction dont il est question.
Ainsi, on trouve

5! = 5 · 4!,
= 5 · 4 · 3!,
= 5 · 4 · 3 · 2!,
= 5 · 4 · 3 · 2 · 1!,
= 5 · 4 · 3 · 2 · 1 · 0!,
= 5 · 4 · 3 · 2 · 1 · 1 = 120.
1.3. DÉFINITIONS RÉCURSIVES 11

Dans le cas de Fibonacci, on calcule par exemple que

F (10) = F (9) + F (8),


= F (8) + 2 F (7) + F (6),
= F (7) + 3 F (6) + 3 F (5) + F (4),
= F (6) + 4 F (5) + 6 F (4) + 4 F (3) + F (2),
= F (5) + 5 F (4) + 10 F (3) + 10 F (2) + 5 F (1) + F (0),
= F (4) + 6 F (3) + 15 F (2) + 25 F (1) + 11 F (0),
= F (3) + 7 F (2) + 46 F (1) + 26 F (0),
= F (2) + 54 F (1) + 33 F (0),
= 55 F (1) + 34 F (0),
= 89.

On a les valeurs
n 0 1 2 3 4 5 6 7 8 9 10

F (n) 1 1 2 3 5 8 13 21 33 55 89

Les définitions de concepts mathématiques se doivent de déterminer ces concepts de façon claire et
précise. Souvent, un théorème dit fondamental assure que les définitions d’un certain format sont
mathématiquement acceptables. C’est le cas du théorème suivant que nous allons d’abord formuler
de façon simplifiée pour augmenter la clarté de notre présentation.
Théorème 1.1 (Fondement des définitions récursives simples). Étant donnée une fonction

R : N × X −→ X,

et x0 ∈ X, il y a une et une seule fonction

f : N −→ X,

telle que 
R(n, f (n − 1)), si n ≥ 1,
f (n) = (1.9)
 x0 , si n = 0.

Preuve. L’argument qui montre l’unicité est typique. Il consiste simplement à supposer qu’il y a
deux fonctions f1 et f2 qui satisfont aux conditions du théorème, pour montrer ensuite qu’elles sont
nécessairement égales. On le prouve par récurrence, en observant d’abord que

f1 (0) = x0 = f2 (0).
12 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

On suppose ensuite que f1 (n − 1) = f2 (n − 1), ce qui entraı̂ne que

f1 (n) = R(n, f1 (n − 1))


= R(n, f2 (n − 1))
= f2 (n),

d’où on a montré par récurrence qu’on a forcément f1 = f2 .


Le fait qu’il existe bien une fonction telle qu’annoncé est presque évident à ce stade. Il suffit
d’observer qu’on sait la calculer par le processus (1.9), pour tous les entiers. 

Tel que formulé, le Théorème 1.1 assure qu’il y a une et une seule fonction qui satisfait (1.7). On
peut donc considérer avec pleine assurance qu’on a ainsi défini une nouvelle fonction mathématique.
Cependant, il ne s’applique pas tel quel à la définition de la fonction F de Fibonacci en (1.8), qui
fait aussi appel à la valeur de F (n − 1) et de F (n − 2). Il est facile d’y remédier en formulant (et
prouvant) une forme plus générale du théorème. Les notations sont un peu plus  techniques ,
mais on y gagne à la longue, et la preuve est tout à fait semblable à celle de (1.1).

Théorème 1.2 (Fondement des définitions récursives). Pour tout k fixé, étant donnée une fonction

R : N × X k −→ X,

et x0 , . . . , xk−1 des éléments de X, il y a une et une seule fonction

f : N −→ X,

telle que 
R(n, f (n − 1), . . . , f (n − k)), si n ≥ k,
f (n) = (1.10)
 xn , si 0 ≤ n < k.

On dit parfois que ce théorème assure l’existence et l’unicité de la


solution d’une récurrence. En un certain sens, construire par com-
position et récursivité de nouvelles fonctions à partir de fonctions de
base est entièrement analogue à la programmation d’un ordinateur.
En fait, on peut penser qu’un ordinateur est une machine qui per-
met de calculer exactement ce genre de fonctions, et aucune autre.
Pour une formulation plus mathématique de cette affirmation, voir
la thèse de Church-Turing :
http://plato.stanford.edu/entries/church-turing/ Alonzo Church (1903–1995)
1.4. TOURS DE HANOÏ(∗) 13

1.4 Tours de Hanoı̈(∗)

Le problème des tours de Hanoı̈, datant de 1883, se résout de façon élégante avec une approche
récursive. Il y a n disques de grandeurs toutes différentes (Voir Figure 1.1), insérés sur une tige
verticale (tige 1) pour qu’ils soient en ordre décroissant (du bas vers le haut), avec deux autres
tiges verticales vides situées au côté (tiges 2 et 3). On veut transférer tous les disques de la tige 1
à la tige 2 de façon à ce qu’ils soient encore en ordre décroissant, avec des manipulations soumises
aux restrictions suivantes :
(a) ne déplacer qu’un disque à la fois ;
(b) toujours placer les disques sur l’une des tiges 1, 2 ou 3, et pas ailleurs ;
(c) ne jamais mettre un disque sur un disque plus petit.
Pour déplacer les n disques, on commence par (récursivement)
(i) déplacer les n − 1 premiers disques de la tiges 1 (origine) à la tige 3 (but), en se servant de
la tige 2 comme tige auxiliaire
(ii) puis déplacer le nième disque (le plus grand) de la tige 1 à la tige 2,
(iii) et finalement déplacer les n − 1 disques de la tige 3 à la tige 2, en se servant de la tige 1
comme auxiliaire.
Les parties (i) et (iii) de la solution procèdent de même façon, en échangeant au besoin les rôles
des tiges origine, but et auxiliaire. Ceci est illustré à la Figure 1.1 dans le cas n = 3. Les parties (i)
et (iii) comprennent chacune 4 étapes, permettant de déplacer les deux plus petits disques au bon
endroit. Le passage de (4) à (5) correspond à (ii).

1.5 Opérations de base avec les entiers

On peut définir récursivement les opérations usuelles sur les entiers positifs (sur N), à partir de
l’addition. Ainsi, on peut définir la multiplication (presque comme à la petite école), pour des entiers
positifs a et n, (
0 si, n = 0,
a · n := (1.11)
(a · (n − 1)) + a si, n ≥ 1.
ou encore l’exponentiation : (
1 si, n = 0,
an := (1.12)
(an−1 ) · a si, n ≥ 1.
De façon tout à fait analogue, pour une fonction f : X → X, on a le n-ième itéré f n de f , défini
en posant (
n Id si, n = 0,
f (x) := n−1
(1.13)
f (f (x)) · a si, n ≥ 1.
14 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

(1) (5)

&  

)


(2)  (6)


PP
q
P  .


(3)  (7)


&  &


(4) (8)

Partie (i) Partie (iii)

Figure 1.1 – Étapes de la solution.

Par exemple, on a
ex
f 3 (x) = ee , si f (x) = ex . (1.14)

On montre facilement (voir exercice 1.2) par récurrence qu’on a les identités

(i) a · (k + n) = (a · k) + (a · n),
(ii) (a + b) · n = (a · n) + (b · n),
(1.15)
(iii) ak+n = ak an ,
(iv) ak·n = (ak )n .

Ces identités s’étendent aux nombres entiers quelconques Z := { . . . , −2, −1, 0, 1, 2, . . . }, en res-
pectant la règle a + (−a) = 0.
On montre par récurrence sur b la propriété de division euclidienne suivante. Quel que soit a et b
dans N, avec a 6= 0, il existe d’uniques entiers q et r tels que

b = q · a + r, avec 0 ≤ r < a. (1.16)


1.6. POLYNÔMES EN X 15

1.6 Polynômes en x

Si x est une variable, on a le monôme xn défini exactement comme en (1.12). On dit d’une somme
finie
f := a0 + a1 x + . . . + an xn , (1.17)
que c’est un polynôme en la variable x, de degré au plus n. Comme tel, le degré de f est le plus
grand entier k tel que ak 6= 0. D’un point de vue récursif, un polynôme de degré au plus n s’écrit
donc comme
f = an xn + f1 , (1.18)
avec f1 un polynôme de degré au plus n − 1. Les polynômes de degré 0 sont les constantes (selon
le contexte dans Z, Q, R, etc.). En exploitant cette description, avec

g = bn xn + g1 , avec deg(g) ≤ n − 1, (1.19)

on peut construire la somme f + g, en posant

f + g := (an + bn ) xn + (f1 + g1 ), (1.20)

qui est alors un polynôme de degré au plus n. Pour des polynômes de degré 0, la somme est la
somme usuelle des constantes.
De façon similaire, le produit de deux polynômes f = an xn + f1 et g = bk xk + g1 , respectivement
de degré n et k, se définit récursivement comme

f · g := (an · bk ) xn+k + an xn g1 + bk xk f1 + f1 · g1 , (1.21)

avec le produit de polynômes de degré 0 égal au produit de constantes. Le degré de f · g est la


somme des degrés de f et de g :

deg(f · g) = deg(f ) + deg(g). (1.22)

Par exemple, on a

(3 x2 − 6 x + 1) · (x3 − 2 x + 1) = 3 x5 + 3 x2 (−2 x + 1)
+x3 (−6 x + 1)
+(−6 x + 1) · (−2 x + 1)
= 3 x − 6 x4 − 5 x3 + 15 x2 − 8 x + 1.
5

Avec les mêmes conventions pour f et g, la propriété de division euclidienne pour les polynômes
s’exprime comme suit. Quel que soit les polynômes f et g, il existe d’uniques polynômes q et r tels
que
f = q · g + r, avec 0 ≤ deg(r) < deg(g). (1.23)
16 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

On procède par récurrence sur le degré de f pour calculer q et r. Supposons donc qu’on a (1.23)
dans tous les cas où le degré de f est plus petit que n. Lorsque deg(f ) ≥ deg(g), on obtient
an n−k
q= x + q1 , (1.24)
bk
c’est-à-dire qu’on l’identité  
an n−k
f= x + q1 · g + r, (1.25)
bk
où q1 et r sont obtenus récursivement comme :
an n−k
f− x g = q1 · g + r, avec 0 ≤ deg(r) < deg(g). (1.26)
bk
Par contre, si deg(f ) < deg(g), alors on a simplement q = 0 et r = f . Bref, ce calcul imite la
procédure scolaire pour diviser un entier par un autre. Voir la section C.1 pour plus de détails sur
les polynômes.
Bien entendu, un polynôme f = f (x) peut être considéré comme une fonction de la variable x. En
particulier, on peut itérer (comme en (1.13)) cette fonction. Par exemple, on a
(1) f n (x) = x + a · n, si f (x) = x + a,
(2) f n (x) = an x, si f (x) = a · x,
(1) f n (x) = an · x + an−1 + . . . + a + 1, si f (x) = a · x + 1.

1.7 Un problème non résolu(∗)

Les mathématiques foisonnent de problèmes non résolus. Un exemple très


simple est donné par le problème de Collatz concerne une propriété toute
simple de la fonction f : N → N définie par

1
 si n = 1,
f (n) := n/2 si n est pair, (1.27)

3 n + 1 sinon.

La question est de savoir, pour un entier n > 0, s’il y a forcément un


itéré de f k pour lequel f k (n) = 1. Autrement dit, est-ce que la suite de Lothar Collatz
nombre (1910-1990)
n, f (n), f (f (n)), f (f (f (n))), . . . ,
f
aboutit nécessairement à 1. Par exemple, écrivant n → k lorsque k = f (n) et débutant le calcul
avec n = 11, on obtient
f f f f f f f f f f f f f f
11 → 34 → 17 → 52 → 26 → 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1.
1.7. UN PROBLÈME NON RÉSOLU(∗) 17

L’évolution de la suite des itérés de f débutant en 27 est surprenante, mais on fini tout de même
par aboutir à 1.
f f f f f f f
27 → 82 → 41 → 124 → 62 → 31 → 94 → 47 f

y y y y y y y
x x x x x x x x x x x x x

f f f f f f f
142 → 71 → 214 → 107 → 322 → 161 → 484 → 242 f

f f f f f f f
121 → 364 → 182 → 91 → 274 → 137 → 412 → 206 f

f f f f f f f
103 → 310 → 155 → 466 → 233 → 700 → 350 → 175 f

f f f f f f f
526 → 263 → 790 → 395 → 1186 → 593 → 1780 → 890 f

f f f f f f f
445 → 1336 → 668 → 334 → 167 → 502 → 251 → 754 f

f f f f f f f
377 → 1132 → 566 → 283 → 850 → 425 → 1276 → 638 f

f f f f f f f
319 → 958 → 479 → 1438 → 719 → 2158 → 1079 → 3238 f

y y y
f f f f f f f
1619 → 4858 → 2429 → 7288 → 3644 → 1822 → 911 → 2734 f

f f f f f f f
1367 → 4102 → 2051 → 6154 → 3077 → 9232 → 4616 → 2308 f

f f f f f f f
1154 → 577 → 1732 → 866 → 433 → 1300 → 650 → 325 f

y y y
f f f f f f f
976 → 488 → 244 → 122 → 61 → 184 → 92 → 46 f

f f f f f f f
23 → 70 → 35 → 106 → 53 → 160 → 80 → 40 f

f f f f f f f
20 → 10 → 5 → 16 → 8 → 4 → 2 → 1.

Bien que le problème ait été posé dès 1937, on n’a toujours pas de réponse. Tout semble porter à
croire que la réponse est bien oui. En particulier, c’est le cas pour tous les nombres n ≤ 260 . Pour
plus de détails, voir

http://en.wikipedia.org/wiki/Collatz_conjecture

Le fait que nous ignorions toujours la solution du problème de Collatz a des conséquences infor-
matiques intéressantes. Ainsi, lorsqu’on lance un calcul sur ordinateur pour vérifier que pour n on
a bien un itéré f k (n) donnant 1, le nombre d’étapes de calcul est k = k(n). Ainsi ce nombre, qui
dépend de n, prend les valeurs k(11) = 14, k(27) = 111, et k(9780657630) = 1132. Pour l’instant,
on n’a aucune idée de quel est la valeur de ce nombre k(n) d’étapes en général. On ne sait même
pas si k(n) existe toujours, c’est-à-dire que k(n) < ∞. On ne peut donc même pas prévoir com-
bien de temps un ordinateur prendra pour répondre dans chaque cas ni même s’il ne répondra un
jour. Autrement dit, on est incapable d’analyser la complexité de l’algorithme de vérification du
problème de Collatz.
18 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

1.8 Coefficients binomiaux

On a aussi les coefficients binomiaux 3 définis récursivement, pour


n et k dans N, comme :


 0, si, k > n
  

n 
1, si, k = 0 ou k = n,
:=  (1.28)
k 
 n − 1
 
n − 1

+ , sinon.


k−1

k

Bien que ces coefficients soient souvent liés au nom de Pascal (on
parle du triangle de Pascal 4 ), ils étaient connus longtemps avant,
même organisés en triangle. La récurrence (1.28) permet de cal-
Yang Hui, XIV-ième siècle.
culer les valeurs de la Figure 1.2 : Le terme  coefficients bino-

Figure 1.2 – Le triangle de Blaise Pascal (1623–1662)

miaux  vient de ce qu’on a la formule du binôme de Newton :


n  
n
X n k
(x + 1) := x . (1.29)
k
k=0
3. Voir l’exercice 1.6.
4. Plaise Pascal, Traité du triangle arithmétique, 1653.
1.9. ENTIERS MODULO N 19

1.9 Entiers modulo n

Informellement, le contexte dans lequel on se situe ici est l’ensemble

Zn := {0, 1, 2, 3, . . . , n − 1},

dit des entiers modulo n, avec n dans N. Plus techniquement, Zn s’identifie aux classes d’équivalences
pour la relation de congruence sur Z (voir (0.1))

a ≡(mod n) b, ssi n divise (a − b), (1.30)

qui se lit a est congru à b modulo n. Tout entier a, dans Z, admet comme représentant canonique,
de sa classe de congruence, l’unique entier r dans Zn (donc 0 ≤ r ≤ n − 1) tel que

a ≡(mod n) r,

En général, r se calcule simplement en divisant a par n :

a = q · n + r,

et on écrit r = (a mod n) pour le reste de cette division de a par n. Attention ici, lorsque a < 0, il
faut faire la division de façon à avoir 0 ≤ r < n. Ainsi, la division de −23 par 5 donne un quotient
de −5 avec reste 2, puisque
−23 = (−5) · 5 + 2.
Autrement dit,
2 = (−23 mod 5).
Sur les entiers modulo n, on a les opérations usuelles de somme, de différence, de produit et
d’exponentiation qui s’obtiennent simplement en posant

(a mod n) + (b mod n) := (a + b mod n), (1.31)


(a mod n) − (b mod n) := (a − b mod n), (1.32)
(a mod n) · (b mod n) := (a · b mod n), (1.33)
k k
(a mod n) := (a mod n). (1.34)

Ceci est acceptable au vu de la proposition suivante (prouvé à l’exercice 1.10), qui assure que ces
définitions se tiennent.
Proposition 1.3. Pour des entiers a1 , a2 , b1 et b2 dans Z, si

a1 ≡(mod n) a2 , et b1 ≡(mod n) b2 ,

alors
a1 + b1 ≡(mod n) a2 + b2 , et a1 · b1 ≡(mod n) a2 · b2 .
20 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

Il est intéressant d’observer qu’on peut exploiter habilement les propriétés ci-haut pour calculer
récursivement une puissance ak efficacement. Le schéma de calcul est le suivant :

Algorithme 1.4 (Calcul de puissances). Pour a ∈ Zn , et k ∈ N, on a


(
(a2 mod n)j si k = 2 j,
(a mod n)k = k−1
(1.35)
(a mod n) · (a mod n) sinon.

Ainsi on arrive à calculer rapidement (même à la main) la valeur de (2 mod 10)100 , simplement
comme suit :

(2 mod 10)100 = (4 mod 10)50


= (16 mod 10)25 = (6 mod 10)25
= (6 mod 10)24 · (6 mod 10)
12
= (36 mod 10) · (6 mod 10) = (6 mod 10)12 · (6 mod 10)
6 6
= (36 mod 10) · (6 mod 10) = (6 mod 10) · (6 mod 10)
3 4
= (36 mod 10) · (6 mod 10) = (6 mod 10)
2 2
= (36 mod 10) = (6 mod 10)
= (36 mod 10) = 6.

Il faut bien convenir que ceci est bien plus facile, et bien plus rapide, que de calculer

2100 = 1267650600228229401496703205376,

puis de constater que le reste de la division par 10 est bien 6, puisque c’est le dernier chiffre
significatif.
L’opération de division dans Zn est plus délicate et n’est pas toujours possible. L’essentiel est de
savoir calculer l’inverse multiplicatif (a mod n)−1 dans Zn , lorsque ceci est possible. On cherche
donc à savoir dans quels cas il est possible de résoudre pour x l’équation

a · x ≡(mod n) 1, (1.36)

ainsi que comment procéder. On va voir que la clé réside dans l’algorithme d’Euclide. En effet
l’équation (1.36) correspond à dire qu’il existe x tel que

a · x = q · n + 1.

On observe d’abord que ceci équivaut au fait que le plus grand commun diviseur de a et n est égal
à 1. On dit alors que a et n sont relativement premiers. On aurait pu observer déjà que l’algorithme
1.10. LE THÉORÈME D’EULER-FERMAT(∗) 21

d’Euclide permet d’obtenir plus que la simple valeur du plus grand commun diviseur d de a et b.
En fait, il permet d’écrire d sous la forme :
d = a · x + b · y,
en procédant comme suit
Algorithme 1.5 (d’Euclide étendu). Si on a obtenu
(
h r, a i, si b = q · a + r, avec a 6= 0,
h a, b i = (1.37)
b, si a = 0.
avec h r, a i = a · x0 + r · y 0 , alors d = h a, b i s’exprime comme
d = a · x + b · y, avec x = x0 − q · y 0 , et y = y0.

On a donc une procédure récursive pour obtenir x et y, en même temps qu’on calcule le plus grand
commun diviseur d = h a, b i. En particulier, on peut inverser a modulo n si et seulement si a et n
sont relativement premiers, et alors l’algorithme ci-haut calcule cet inverse.

1.10 Le théorème d’Euler-Fermat(∗)

Le théorème d’Euler-Fermat exprime une très jolie propriété des


calculs d’exposants modulo un entier n. Un cas particulier de ce
théorème a été d’abord obtenu par Pierre de Fermat , puis il a
été généralisé par Leonhard Euler. Celle-ci passe par l’introduction
d’en nouvelle fonction, la fonction ϕ d’Euler , qui est définie comme
suit.
ϕ(n) := |Φ(n)|, où
(1.38)
Φ(n) := {k | 1 ≤ k ≤ n − 1, (k, n) = 1},
Donc ϕ(n) est le nombre d’éléments de l’ensemble Φ(n) des entiers
positifs, situés entre 1 et n − 1, qui sont relativement premiers à n.
Ainsi, on a les valeurs suivantes :
Pierre de Fermat
ϕ(2) = 1 puisque Φ(2) = {1} (1601–1665)
ϕ(3) = 2 Φ(3) = {1, 2}
ϕ(4) = 2 Φ(4) = {1, 3}
ϕ(5) = 4 Φ(5) = {1, 2, 3, 4}
ϕ(6) = 2 Φ(6) = {1, 5}
ϕ(7) = 6 Φ(7) = {1, 2, 3, 4, 5, 6}
ϕ(8) = 4 Φ(8) = {1, 3, 5, 7}
ϕ(9) = 6 Φ(9) = {1, 2, 4, 5, 7, 8}
ϕ(10) = 4 Φ(10) = {1, 3, 7, 9}
22 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

Il n’est pas difficile de voir directement, à partir de la définition, que


ϕ(p) = p − 1, quand p est un nombre premier. On vérifie aussi que

ϕ(p · q) = (p − 1) · (q − 1),

chaque fois qu’on a deux nombres premiers distincts p et q. En effet, on


observe que les seuls nombres entiers, entre 1 et p · q − 1, qui ne sont pas
relativement premiers à p · q sont exactement les nombres :

p, 2 p, 3 p, . . . , (q − 1) · p
q, 2 q, 3, q, . . . , (p − 1) · q Leonhard Euler
(1707–1783)
La démonstration la plus directe du théorème suivant passe par la théorie
des groupes. Elle n’est pas particulièrement difficile, mais dépasse un peu le cadre de ce cours. Nous
l’omettrons donc.

Théorème 1.6 (Euler-Fermat). Si a est relativement premier à n, alors

ak ≡(mod n) a`

exactement lorsque
k ≡(mod ϕ(n)) `.

Le cas particulier que nous utiliserons correspond à n = p · q (produit de deux nombres premiers
distincts), avec k = e · f , et ` = 1. On suppose donc que e est relativement premier à ϕ(n), et le
théorème affirme que
ae·f ≡(mod n) a (1.39)
exactement quand
e · f ≡(mod ϕ(n)) 1, (1.40)
f étant l’inverse multiplicatif de e modulo ϕ(n).

1.11 La cryptographie à clé publique(∗)

Nous sommes maintenant prêts à décrire le système de cryptographie à clé publique introduit par
Rivest, Shamir et Adelman (d’où RSA). Tout tourne autour du fait qu’il est très difficile (même
pour un ordinateur) de factoriser de grands nombres, mais qu’il est facile (avec l’ordinateur) de
calculer de grandes puissances de grands nombres modulo n. De plus, l’algorithme d’Euclide joue
un rôle clé dans la mise en place de clés secrètes, une pour chaque participant. En effet, dans ce
système, chaque participant se construit une clé de la façon suivante :
1.11. LA CRYPTOGRAPHIE À CLÉ PUBLIQUE(∗) 23

1) Il commence par choisir 5 en secret 2 très grands nombres premiers p et q (avec au moins
100 chiffres chacun), et il calcule n = p · q.
2) Connaissant les nombres p et q, il est à même de calculer la fonction ϕ(n) = (p − 1)(q − 1).
Il choisit 6 alors un entier e, au hasard entre 1 et ϕ(n), qui est relativement premier à ϕ(n).
3) Il peut alors calculer l’inverse multiplicatif f = e−1 , de e modulo ϕ(n), avec l’algorithme
d’Euclide.
4) Enfin, il rend publique sa clé d’encodage, (n, e), et garde secrète la clé de décodage f .
En supposant que chaque participant ait réussi à réaliser ces étapes, on publie un annuaire donnant
la clé (n, e) de chaque participant. En toute probabilité, ces clés sont forcément distinctes. Comme
tous connaissent la clé d’encodage, on dit qu’on a un système cryptographique à clé publique.

Coder et décoder un message

Pour coder un message à l’intention d’un certain participant,


on consulte cet annuaire de clés pour obtenir la valeur parti-
culière de n et de e qui lui correspond. L’encodage procède de
la manière suivante. On commence par découper le message
à envoyer, en morceaux dont la longueur est plus petite que
la moitié du nombre de chiffres dans n. On numérise un de
ces morceaux en remplaçant chaque lettre par deux chiffres
de la façon suivante
a 7→ 10, b 7→ 11, c 7→ 12, . . . Rivest, Shamir, Adelman
Par exemple, on a la numérisation MIT–1977.

bonjour 7→ 11242319243027.
On découpe le message en morceaux pour que le nombre associé soit plus petit n. L’encodage d’un
morceau numérisé a se fait en calculant
b := (a mod n)e .
Pour décoder ce message, on cherche à récupérer a à partir de b. Comme nous allons mieux le voir
plus loin, cela est une entreprise très difficile, sauf si l’on connaı̂t f . Dans ce cas, il suffit en effet
de calculer
(b mod n)f = (a mod n)e f
= a,
5. Nous allons discuter plus loin comment réaliser cet exploit.
6. Pour trouver un nombre e relativement premier à ϕ(n), il suffit de prendre un a au hasard entre 1 et ϕ(n), de
calculer avec l’algorithme d’Euclide le plus grand commun diviseur d = (a, ϕ(n)), et de poser e := a/d.
24 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

étant donné l’équation (1.39). On dé-numérise ensuite a pour récupérer le message envoyé.
La sécurité du système de cryptographie obtenu dépend du raisonnement suivant.
(1) Pour décoder le message, on doit connaı̂tre f .
(2) Pour calculer f , on doit connaı̂tre ϕ(n).
(3) Pour calculer ϕ(n), on doit connaı̂tre la factorisation de n = p · q.
(4) Factoriser n n’est pas possible dans un temps raisonnable.
L’affirmation la plus problématique est surtout cette dernière, parce qu’on n’en a pas de preuve
mathématique. On choisit p et q assez grands pour dépasser de loin la taille des entiers qu’il soit
possible de factoriser aujourd’hui, avec les meilleurs ordinateurs et les meilleurs algorithmes.

Un exemple réaliste

Avec un petit ordinateur, et un système de calcul formel comme Maple, on se construit facilement
(et rapidement) une clé pour le système RSA. Avec un générateur aléatoire de grands nombres
premiers (voir Exercice 1.12), on construit deux nombres premiers :
p := 632382913902128079995508264334209792839330997
050865499213108496836190519861047497803309801
q := 558218333272171098430334114939430707924967254
197312990249604572758081938867755300016964127
On calcule alors
n := p · q = 3530077361882448142729008764302657633090807756
6841536554471443803162568247004783252409970439
2825688399971668487048756462309933330394616119
178578931081472702153607465462868484508727,
ainsi que
ϕ(n) = (p − 1) · (q − 1) = 3530077361882448142729008764302657633090807756
6841536554471443803162568247004783252409970320
2224441225672490061206377188669432566096364871
000089468368403107881148736660070664234800.
Nous sommes maintenant en mesure de choisir (au hasard) e, relativement premier à ϕ(n), et on
trouve que
e := 150650905007553408748182082815984929359632269
852681585809504709739738485231104248045693804
710098188302655538010818866476054310788175542
136407374106205605523687223946800025812242019
1.12. FRACTIONS CONTINUES 25

Par l’algorithme d’Euclide étendu, on calcule f l’inverse multiplicatif de e modulo ϕ(n) :

f = 272908483757626934878229217801120810210167464
543251893953694855412667939050146498517159221
610327980988946837607498956384200926964384927
721690363851123702958382331369780470855228779

Tout est en place maintenant. Notre correspondant veut nous envoyer le message  bonjour , qu’il
code comme suit, en utilisant les valeurs (n, e) connues de tous. Avec a = 11242319243027, on
calcule

(a mod n)e = 8730499647802726490704283638922954951695708038196528


7808822559966823531836225493872016290367345301921177
3553273683984878137203624150249408750079286817109383
48827035784521812565693

La seule façon de retrouver le message original (récupérer a = 11242319243027) à partir de ce dernier


nombre est de calculer sa puissance f -ième modulo n. Or, nous sommes les seuls à connaı̂tre f . Il
est donc pratiquement impossible 7 , pour un espion, de découvrir le sens du message secret.

1.12 Fractions continues

Une fraction continue est une expression de la forme

1
q0 + (1.41)
1
q1 +
1
q2 +
1
q3 +
1
q4 +
1
q5 +
..
.
infinie, ou qui se termine, avec les qi des entiers, qui sont positifs et non-nuls pour i > 0. Pour
simplifier la présentation, on écrit encore

[q0 , q1 , q2 , q3 , q4 , q5 , . . . ] (1.42)
7. Il faut faire attention à quelques détails concernant le mode d’utilisation du système. En particulier, il faut
envoyer des messages assez longs. Par exemple, des messages réduits à une lettre seraient faciles à identifier. Il
suffirait de coder les 26 lettres de l’alphabet, puis de comparer avec le message.
26 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

pour la fraction continue en (1.41). Tout nombre réel x ∈ R, admet un développement en fraction
continue qu’on calcule récursivement comme il est décrit ci-dessous. Adoptons d’abord la notation
bxc pour désigner le plus grand entier qui est plus petit ou égal à x. Ainsi, on a

b 2c = 1, b−πc = −4, be2 c = 7,

et, bien entendu, bnc = n pour tout n ∈ Z. Les qi s’obtiennent de la façon suivante

Algorithme 1.7. On commence par poser x0 = x et q0 := bx0 c, pour calculer ensuite récursivement
1
d’abord xn := , puis qn := bxn c,
xn−1 − qn−1
lorsque xn−1 − qn−1 6= 0. Sinon le calcul s’arrête, et la fraction continue est finie. Cela se produit
exactement quand x est un nombre rationnel.

Par exemple, pour π = 3.1415926535897932384 . . ., on trouve

1
π =3+ (1.43)
1
7+
1
15 +
1
1+
1
292 +
..
.
En effet, on amorce le calcul avec x0 = π et q0 = 3, puis on obtient successivement

x0 = 3.141592653 . . . , q0 = 3,
x1 = (3.141592653 . . . − 3)−1
= 7.062513305 . . . , q1 = 7,
x2 = (7.062513305 . . . − 7)−1
= 15.996594406 . . . , q2 = 15,
x3 = (15.996594406 . . . − 15)−1
= 1.003417231 . . . , q3 = 1,
x4 = (1.003417231 . . . − 15)−1
= 292.634591014 . . . , q4 = 292,
etc.

En tronquant le développement en fraction continue d’un réel x, on trouve une suite de très bonnes
approximations rationnelles de x. Ainsi, pour le développement décimal de π en (1.43), on trouve
1.12. FRACTIONS CONTINUES 27

les approximations
π ≈ 3,
22
π ≈ 7 = 3.1428571428571428571,
333
π ≈ 106 = 3.1415094339622641509,
355
π ≈ 113 = 3.1415929203539823009,
33102
π ≈ 10399 = 3.1415926530119026041, etc.

On observe la concordance croissante avec le développement de π = 3.1415926535897932384 . . ., en


particulier pour la dernière approximation, qui est due à l’exceptionnel  292  dans le développement.
Le théorème suivant (qui n’est pas démontré ici) clarifie le phénomène.

Théorème 1.8 (Hurwitz). Pour x ayant [q0 , q1 , q2 , q3 , . . . ] comme développement en fraction


continue, si a/b := [q0 , q1 , q2 , q3 , . . . , qk ] alors

a 1
x− < √ . (1.44)
b 2
b 5


La présence de 5 est due au fait que le nombre d’or (voir section 1.13) correspond au  pire  cas.
Autrement dit, avec ses cousins 8 , c’est le nombre réel le  plus difficile  à approximer par des
nombres rationnels (voir : en.wikipedia.org/wiki/Lagrange number).

Lien avec l’algorithme d’Euclide

Dans le cas où x = a/b est rationnel (dans Q), on a un lien direct entre le développement en fraction
continue de x, et le calcul du plus grand commun diviseur h a, b i (voir Exercice 1.9). Ainsi, on a les
étapes suivantes pour le calcul du plus grand commun diviseur de a = 8492 et b = 1547 :

8492 = 5 · 1547 + 757, et donc h 8492, 1547 i = h 1547, 757 i,


1547 = 2 · 757 + 33, = h 757, 33 i,
757 = 22 · 33 + 31, = h 33, 31 i,
33 = 1 · 31 + 2, = h 31, 2 i,
31 = 15 · 2 + 1, = h 2, 1 i,
2 = 2 · 1 + 0, = h 1, 0 i = 1;

8. Les nombres dont le développement en fraction continue se terminent par une infinité de 1.
28 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

tandis que le développement en fraction continue de 8492/1547 est :

8492 1
=5+
1547 1
2+
1
22 +
1
1+
1
15 +
2
On observe donc que les qi correspondants à la suite des quotients dans l’algorithme d’Euclide.
Autrement dit, si on a
a
= [q0 , q1 , q2 , q3 , . . . , qk ] (1.45)
b
alors les étapes explicites du calcul de l’algorithme d’Euclide pour a et b sont

ai = qi · bi + ri , où 0 ≤ ri < bi , (1.46)

avec a0 = a, b0 = b, et
ai+1 = bi , et bi+1 = ri , (1.47)

avec rk = 0 correspondant à la dernière étape.

1.13 Nombres de Fibonacci et nombre d’or

Pour deux nombres de Fibonacci consécutifs F (n) et F (n + 1), le quotient F (n + 1)/F (n) admets
un développement en fraction continue particulièrement simple. Par exemple,

F (6) 13 1
= =1+
F (5) 8 1
1+
1
1+
1
1+
1
1+
1
Plus généralement, on a
F (n + 1)
= [1, 1, . . . , 1] (1.48)
F (n) | {z }
n+1 copies
1.13. NOMBRES DE FIBONACCI ET NOMBRE D’OR 29

La suite des quotients F (n + 1)/F (n) converge vers le nombre d’or :

1
φ=1+
1
1+
1
1+
1
1+
1
1+
1
1+
..
.
qui est manifestement solution de l’équation

1
ϕ=1+ .
ϕ

Il s’ensuit que ϕ = (1 + 5)/2, et le nombre d’or admet la suite d’approximations

1+ 5 F (n + 1)
≈ , (1.49)
2 F (n)

une pour chaque n ∈ N. En fait, on a les inégalités

ϕn−1 < F (n) < ϕn . (1.50)

On montre aussi que


1
F (n) = √ ϕn+1 − ϕ n+1 ,

(1.51)
5
avec √
1− 5
ϕ := .
2

Notes historiques

Parce qu’il est solution d’une équation très simple, mais aussi parce qu’il possède des propriétés
numériques très particulières, le nombre d’or apparaı̂t dans toutes sortes contextes intéressants. Il
est fréquent qu’il soit mentionné dans des articles de vulgarisation mathématique, d’autant plus
que sa description ne nécessite pas de notions très avancées. Pour plus de détails, voir :

https://fr.wikipedia.org/wiki/Nombre d’or
30 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

1.14 Un exemple d’analyse d’algorithme(∗)

Considérée de point de vue du calcul du plus grand commun diviseur, la simplicité du développement
en fraction continue du quotient F (n+1)/F (n) est équivalente au fait que la définition des nombres
de Fibonacci donne
F (n + 1) = 1 · F (n) + F (n − 1). (1.52)
Il en découle que (F (n + 1), F (n)) = (F (n), F (n − 1)), d’où on
déduit que le plus grand commun diviseur de deux nombres de
Fibonacci consécutif est toujours égal à 1. Cependant, l’intérêt n’est
pas vraiment là. Il réside plutôt que ce calcul est le  pire  de
tous ceux du plus grand commun diviseur de deux nombres d’une
certaine taille, c’est-à-dire celui qui demande le plus grand nombre
d’étapes. Gabriel Lamé (en 1844) a exploité ce fait pour borner le
nombre d’étapes de calcul dans l’algorithme d’Euclide. C’est l’une
des premières analyses de complexité d’algorithme au sens moderne.
On la proposition suivante.
Proposition 1.9. Le nombre d’étapes de calcul pour l’algorithme
d’Euclide appliqué à des nombres a et b, avec a ≤ b, est plus petit Gabriel Lamé
que logϕ (b). (1795–1870)
Ainsi, on sait que même pour des nombres de 200 chiffres (comme dans les calculs impliqués dans
le système RSA), le nombre total d’étapes de calcul sera plus petit que
logϕ (10201 ),
donc plus petit que 961. Pratiquement, pour un ordinateur qui fait des milliards (sinon plus)
d’opérations à la seconde, c’est presque instantané.

1.15 Calcul approché de zéros (réels) de fonctions

Un tout différent domaine d’utilisation de méthodes à saveur récursive


est dans le calcul de zéros de fonctions sur les réels. Rappelons qu’on dit
que t est un zéro réel de la fonction f : R → R, si on a
f (t) = 0, avec t ∈ R. (1.53)
Autrement formulée, la recherche des zéros réels d’une fonction corres-
pond à résoudre l’équation f (x) = 0, c’est-à-dire calculer l’ensemble
Z(f ) := { t ∈ R | f (t) = 0}. (1.54)

Isaac Newton
(1643-1727)
1.15. CALCUL APPROCHÉ DE ZÉROS (RÉELS) DE FONCTIONS 31

Rappelons que pour f (x) = a x + b, avec a 6= 0, on a

Z(f ) = {−b/a}. (1.55)

On a aussi, pour f (x) = a x2 + b x + c, avec a 6= 0, que


( √ √ )
−b − b2 − 4 a c −b + b2 − 4 a c
Z(f ) = , , si b2 − 4 a c ≥ 0, (1.56)
2a 2a

avec Z(f ) = ∅, si b2 − 4 a c < 0. Dans ces cas, on calcule donc facilement Z(f ). Pour des fonctions
plus compliquées, le calcul exact de Z(f ) devient difficile, sinon même impossible. Souvent, il est
difficile de trouver même un seul des zéros de f (parmi toutes les possibilités dans Z(f )), même en
sachant qu’il se trouve dans un certain intervalle.
Une façon de contourner le problème est d’approximer (de mieux en mieux) un zéro de f . Cela
consiste à construire une suite
t0 , t1 , t2 , . . . → t
de valeurs qui s’approchent de plus en plus d’un vrai zéro t de f . Le formalisme correct pour tout
ceci est développé dans un cours d’analyse, mais la méthode algorithmique due à Newton est facile
à présenter si on néglige de discuter de certains aspects techniques. Pour se placer dans un bon
contexte, supposons donc qu’on a une fonction dérivable f allant d’un intervalle [a, b] vers R, pour
laquelle on sait que f (a) < 0, et f (b) > 0. Autrement dit, le graphe de f est tel que présenté à la
Figure 1.3.
On suppose que f 0 (x) existe 9 dans tout l’intervalle [a, b], et que f 0 (x) ne s’annule jamais sur [a, b].
On a alors
Algorithme 1.10 (Newton-Raphson 10 ). À partir d’une approximation donnée tn d’un zéro de f ,
on calcule une meilleure approximation tn+1 , en posant :
f (tn )
tn+1 = tn − . (1.57)
f 0 (tn )

La Figure 1.3 montre comment on peut  obtenir  cette expression. On calcule l’intersection avec
l’axe des x de la droite, passant par le point (tn , f (tn )), qui est tangente à la courbe, et donc de
pente f 0 (tn ). Il en résulte que l’équation de la droite en question est

y = f 0 (tn ) (x − tn ) + f (tn ),

d’où on obtient (1.57). Pour illustrer la méthode, considérons le problème de calculer la racine
9. Dans certains cas, des aspects techniques font que la méthode ne fonctionne pas. Une discussion détaillée et
rigoureuse, du point de vue de l’analyse, ne peut donc être évitée.
10. Joseph Raphson (1648–1715).
32 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

(tn , f (tn ))
f 0 (tn )=pente de &

tn−1 tn+1 tn

- pente = f 0 (tn−1 )

(tn−1 , f (tn−1 ))

Figure 1.3 – Itération de Newton-Raphson

carrée d’un entier a > 0. On cherche à trouver le zéro (positif) de

f (x) = x2 − a.

Soit x0 un premier estimé de ce zéro, alors on calcule une suite d’estimés,

t0 , t1 , t2 , . . . , tn , . . .,

de plus en plus précis, en posant


t2n − a
tn+1 := tn − .
2 tn
Par exemple, pour a = 1423, on démarre avec t0 = 37 (parce que 372 = 1369), puis on a successi-
vement

t20 − 1423
t1 = t0 − = 37.729729729729729730
2 t0
t2 − 1423
t2 = t1 − 1 = 37.722672887787500968
2 t1
t2 − 1423
t3 = t2 − 2 = 37.722672227720035100
2 t2

La véritable valeur de 1423 est

1423 = 37.722672227720029325 . . .

Figure 1.4 – Graphe de f (x).


1.15. CALCUL APPROCHÉ DE ZÉROS (RÉELS) DE FONCTIONS 33

on a donc obtenu, après seulement 3 itérations, une ap-


proximation qui est valable jusqu’à la 14-ième décimale.
Dans les bons cas, on  double  la précision de l’ap-
proximation à chaque étape de calcul. Bien entendu, la
méthode s’applique surtout à des situations plus com-
pliquées pour lesquelles il ni a aucune formule donnant
les zéros. Par exemple, pour une fonction comme

f (x) = exp(x − 1) − x − 1,

dont le graphe est donné à la Figure 1.4, on cherchera à approximer le zéro qui se trouve près de
2. Il n’y a pas de formule simple pour ce zéro, mais on obtient très rapidement une valeur comme

2.146193220620582585237061028521368252888662

avec l’algorithme de Newton-Raphson.


34 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

1.16 Un joli coup d’oeil(∗)

Figure 1.5 – L’ensemble de Mandelbrot

L’ensemble de Mandelbrot est l’ensemble des nombres complexes c (dans C), pour lesquels l’ensemble
des itérés
{fcn (0) | n ∈ N}

est borné, avec fc (z) = z 2 + c. C’est donc dire qu’il existe N (dépendant de c) pour lequel on a

|f n (c)| < N, pour tout n ∈ N.

Pour cet ensemble, on a la définition formelle :

M := {c ∈ C | ∃N ∀n ∈ N, |fcn (0)| < N }.

Les  couleurs  pour les points à l’extérieur de M codent la  vitesse  avec laquelle la suite
{fcn (0)}n∈N diverge. Pour en savoir plus sur ce dernier point, il faut suivre un cours d’analyse.
L’aspect très récursif de l’ensemble de Mandelbrot, apparais lorsqu’on en agrandit une portion.
L’ensemble de Mandelbrot a été introduit par Benoit Mandelbrot (1924-2010). Son étude est liée à
une analyse de la notion mathématique de chaos. C’est un cas particulier de la notion de  fractale .
On a beaucoup d’autres fractales très jolies, par exemple, l’éponge de Menger (Karl Menger, (1902–
1985)). Pour votre culture générale, il est intéressant d’aller voir de quoi il retourne sur le site :

http://en.wikipedia.org/wiki/Mandelbrot_set
1.17. EXERCICES 35

1.17 Exercices

1.1. Un utilisant le fait que, pour des entiers positifs c et d, on a

(c divise d) et (d divise c) ssi c = d,

montrer que
ha, bi = ha, b − k ai,
quelque soit l’entier k.
1.2. Montrer les identités en (1.15), par un argument récursif (sur n) qui n’utilise que l’associativité
de  +  et  ·  pour (i), (iii) et (iv), avec en plus la commutativité de  +  pour (ii).
1.3. Montrer que
a) la somme des n premiers entiers impairs donne n2 . En formule
n
X
(2 k − 1) = n2 . (1.58)
k=1

a) la somme des carrés des n premiers entiers est donnée par la formule
n
X n (n + 1) (2 n + 1)
k2 = . (1.59)
6
k=1

1.4. Montrer par récurrence que le plus grand commun diviseur de F (n) et F (n − 1) est 1.
1.5. Calculer le nombre de mouvements (déplacement d’un disque) nécessaire pour résoudre le
problème des tours de Hanoı̈.
1.6 (Coefficients binomiaux).
a) Montrer que l’expression suivante satisfait aussi la récurrence (1.28)
n!
. (1.60)
k!(n − k)!

b) Montrer par récurrence sur n les identités


n     n    
X m n+1 X m+i m+n+1
i) = , et ii) = . (1.61)
k k+1 i k
m=0 i=0

1.7 (Entiers modulo p). Soit p un nombre premier. Montrer que tous les éléments non nuls de
Zp sont inversibles pour la multiplication. Calculer les inverses de tous les éléments non nuls de
Z13 .
36 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

1.8. Montrer par récurrence que les coefficients, du développement en fraction continue du quotient
F (n)/F (n − 1) de deux nombres de Fibonacci consécutifs, sont tous des 1. Que peut-on dire de
F (n)/F (n − 2) ?

1.9. Démontrer qu’on a bien le lien entre développements en fraction continue et le calcul de
l’algorithme d’Euclide spécifié en (1.45) et (1.46), avec les conditions (1.47).

1.10. Prouver la Proposition 1.3, en exploitant directement la définition de a ≡(mod n) b et la


distributivité de la multiplication sur l’addition (voir (1.15), (ii)) pour la première partie ; et l’égalité

a1 · b1 − a2 · b2 = (a1 − a2 ) · b1 + a2 · (b1 − b2 ),

pour la seconde.

1.11. Montrrer, par récurrence, que

(x − 1)(xn−1 + xn−2 + . . . + x + 1) = xn − 1. (1.62)

Programmation mathématique

1.12 (Générateur de nombres premiers). Dans un système de calcul formel, construire un


générateur aléatoire de grands nombres premiers. Pour ce faire, on commence par utiliser un généra-
teur aléatoire de grands nombres impairs, pour trouver un candidat q. On teste si q est premier
avec une fonction  testpremier  (aussi à construire). Si c’est le cas on a trouvé, sinon on ajoute
2 à q et on teste de nouveau. Le Théorème des nombres premiers 11 assure qu’on va trouver assez
rapidement un nombre premier de cette façon.
Comme test (probabiliste) de primalité pour q, on peut vérifier pour une vingtaine de nombres a
(1 < a < q), qu’on a bien
aq−1 ≡(mod q) 1.
Si pour un nombre l’identité n’est pas vérifiée alors q n’est certainement pas premier. Sinon, q est
fort probablement premier. Plusieurs systèmes contiennent une fonction  isprime  qui effectue
un test similaire, mais plus rigoureux.

Exploration mathématique

1.13 (Sommes de puissances). Avec un système de calcul formel, étudier la somme des k-ième
puissances des n premiers entiers :

1k + 2k + . . . + nk , (1.63)
11. décris comment la distribution des nombres premiers est assez régulière.
1.17. EXERCICES 37

afin de trouver une formule, pour les cas k = 3, k = 4, etc.


Un fait utile : La formule est un polynôme en n de degré k + 1.

1.14 (Nombres de Catalan). On définit récursivement les nombres Cn en posant



1 si n = 0,
Cn := 4 n − 2 (1.64)
 Cn−1 sinon.
n+1

On calcule alors que


n 0 1 2 3 4 5 6 7

Cn 1 1 2 5 14 42 132 429

Peut-on déduire de (1.64) que les Cn sont toujours des entiers ?

1.15 (Formule pour la fonction ϕ d’Euler). Montrer qu’on a

Y 1

ϕ(n) = n 1− , (1.65)
p
p|n

où le produit a lieu sur l’ensemble des nombres premiers qui divisent n. Montrer aussi que
X
ϕ(d) = n,
d|n

où la somme a lieu sur l’ensemble des nombres (entre 1 et n) qui divisent n.
Suggestion : Considérer d’abord les cas où n est de la forme pa q b , puis pa q b rc , avec des nombres
premiers distincts p, q et r. Passer ensuite au cas général.

1.16 (Fonction d’Ackermann). Explorez la fonction A : N × N → N définie récursivement


comme :

n + 1
 si m = 0,
A(m, n) := A(m − 1, 1) si m > 0 et n = 0, (1.66)

A(m − 1, A(m, n − 1)) si m > 0 et n > 0.

Cette fonction a des valeurs qui croissent très très rapidement (attention avec votre pauvre ordina-
38 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES

teur). Par exemple


n\k 0 1 2 3 4 n
0 1 2 3 4 5 n+1
1 2 3 4 5 6 n+2
2 3 5 7 9 11 2n + 3

3 5 13 29 61 125 2n+3 − 3

22 .2
..
2
2 2 2 222 2 22 22
2
4 22 −3 22 −3 22 −3 22 −3 22 − 3 2| 2{z } −3
n+3

Une jolie notation, introduite par D. Knuth, permet d’écrire une formule pour les valeurs de la
fonction d’Ackermann. À ce sujet, voir

http://en.wikipedia.org/wiki/Knuth’s_up-arrow_notation
1.17. Montrer que, lorsqu’on a division euclidienne de b par a donne b = q · a + r, on a la division
euclidienne de polynômes
xb − 1 = (xb−a + xb−2 a + . . . + xr )(xa − 1) + (xr − 1) (1.67)
Suggestion : Considérer quelques exemples spécifiques de a et b, puis passer au cas général.
1.18. Examiner, pour diverses valeurs de k, la suite des plus grand commun diviseur des nombres
de Fibonacci F (n + k) et F (n), en fonction de la valeur de k et de celle de (n mod k). En déduire
une règle générale, et la démontrer.
1.19. On précise la notation (1.42) pour les fractions continues en posant récursivement
1
[q0 , q1 , q2 , . . . , qn ] := q0 + ,
[q1 , q2 , . . . , qn ]
avec [q0 ] := q0 . Les convergents d’une fraction continue, sont les uniques entiers hn et kn , relative-
ment premiers entre eux, tels que
hn
= [q0 , q1 , q2 , . . . , qn ].
kn
Montrer qu’on a les récurrences
h−2 = 0, h−1 = 1, hn = qn hn−1 + hn−2 ,
(1.68)
k−2 = 1, k−1 = 0, kn = qn kn−1 + kn−2 .
et que
hn kn−1 − hn−1 kn = (1−)n .
1.17. EXERCICES 39

1.20. Montrer qu’on a le développement en fraction continue :

xF (n+1) − 1
= [xF (n−1) , xF (n−2) , . . . , x2 , x, x, 1].
xF (n) − 1
40 CHAPITRE 1. RÉCURRENCE, NOMBRES ET FONCTIONS NUMÉRIQUES
Chapitre 2

Ensembles et fonctions

2.1 Introduction

Avant de poursuivre plus avant, nous allons maintenant mieux asseoir les fondements de notre
discours. La théorie des ensembles et des fonctions sont à la base d’une présentation moderne des
mathématiques. Immanquablement, on y fait appel pour la construction d’objets plus complexes,
ou pour donner une base solide aux arguments logiques. En plus d’être des notions fondamentales
pour les mathématiques, elles sont aussi cruciales en informatique, par exemple pour introduire la
notion de  structures de données .

2.2 Ensembles

La théorie des ensembles a été introduite par Georg Cantor. On peut en


donner une axiomatique rigoureuse qui n’est pas vraiment approfondie ici
(voir cependant l’appendice B). C’est tout de même un aspect important
de la question comme on va l’entrevoir à la section 2.9. La théorie suppose
que les ensembles contiennent des éléments, et on écrit x ∈ A pour dire
que  x est un élément de A . Deux ensembles sont égaux si et seule-
ment s’ils ont les mêmes éléments. Autrement dit, pour  connaı̂tre  un
ensemble il faut savoir dire quels en sont les éléments. Ainsi, on a les
présentations équivalentes

{a, b, c} = {c, a, b} = {a, b, a, b, c, a, b, a},


Georg Cantor
d’un même ensemble qui contient les trois éléments : a, b et c. (1845–1918)

41
42 CHAPITRE 2. ENSEMBLES ET FONCTIONS

Typiquement, sans les définir très rigoureusement ici, on commence par considérer des ensembles
 simples  comme

• L’ensemble des entiers naturels,

N := {0, 1, 2, 3, . . . };

• L’ensemble des entiers,

Z := { . . . , −3, −2, −1, 0, 1, 2, 3, . . . };

• L’ensemble des nombres rationnels,


na o
Q := | a ∈ Z, b ∈ N, et b 6= 0 ;
b
l’ensemble R des nombres réels, qui inclut les nombres rationnels et tous les nombres qu’on peut
construire 1 à partir de ceux-ci par  passage à la limite  ; l’ensemble des entiers naturels entre 1
et n
[n] := {i ∈ N | 1 ≤ i ≤ n};
l’ensemble de lettres (minuscules) de l’alphabet

A := {a, b, c, d, . . . , z};

ou encore des ensembles d’objets divers comme

{•, •, •}, où {♣, ♦, ♥, ♠}.

À partir de tels ensembles de  base  on construit des ensembles plus complexes au moyen
d’opérations entre ensembles qui seront introduites dans les sections suivantes. Une axiomatique
correcte de la théorie des ensembles explique comment procéder à des descriptions admissibles
d’ensembles de base, et comment construire ensuite des ensembles plus complexes. Ainsi, on peut
décrire l’ensemble
A = {x ∈ S | P (x)}, (2.1)
des éléments de S qui satisfont une certaine propriété P (x), formulée sous forme d’énoncé logique
(voir AppendiceA). Dans ce cas, la notion d’égalité A = B, avec B = {x ∈ S | Q(x)}, correspond
au fait que les propriétés P (x) et Q(x) sont logiquement équivalentes. On dénote ∅, l’ensemble vide,
qui ne contient aucun élément. Le nombre d’éléments (ou cardinal ) d’un ensemble fini A, est dénoté
|A|, ou parfois aussi #A.

1. À voir dans un cours d’analyse.


2.3. SOUS-ENSEMBLES 43

2.3 Sous-ensembles

Si tous les éléments de B sont aussi des éléments de A, on dit que B est un sous-ensemble de A, et
on écrit
B ⊆ A.
On dit aussi que B est une partie de A. Se donner un sous-ensemble B, de k éléments d’un ensemble
A de cardinal n, correspond donc à

 choisir k éléments parmi n  .

L’inclusion d’ensembles possède les propriétés suivantes. Pour tout A, B et C, on a

a) ∅ ⊆ A,
b) A ⊆ A,
(2.2)
c) si A ⊆ B et B ⊆ A, alors A = B,
d) si A ⊆ B et B ⊆ C, alors A ⊆ C.

Lorsque A et B sont décrit comme en (2.1), on a B ⊆ A si et seulement si l’énoncé logique


 Q(x) =⇒ P (x)  est vrai.

On dénote P[S] l’ensemble de tous les sous-ensembles de S :

P[S] := {A | A ⊆ S }. (2.3)

On dit aussi que P[S] est l’ensemble des parties de S. Par exemple,

P[{a, b, c}] = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}.

Pour chaque 0 ≤ k, on considère aussi l’ensemble des parties à k-éléments de S :

P k [S] := {A | A ⊆ S, |A| = k }.

C’est donc

 l’ensemble des possibilités de choix de k éléments parmi n  .

Ainsi, on a P 0 [S] = {∅}, puis


P 1 [S] = {{x} | x ∈ S},
et encore
P 2 [S] = {{x, y} | x, y ∈ S, et x 6= y},
44 CHAPITRE 2. ENSEMBLES ET FONCTIONS

et ainsi de suite jusqu’à P n [S] = {S}, pour n égal au cardinal de S. Ainsi, si S = {a, b, c}, alors on
a

P 0 [S] = {∅}, P 1 [S] = {{a}, {b}, {c}}, P 2 [S] = {{a, b}, {a, c}, {b, c}}, P 3 [S] = {{a, b, c}}.

Ces ensembles contiennent donc respectivement 1, 3, 3, et 1 éléments, et leur union disjointe donne
l’ensemble à 8 éléments P[S] vus plus haut.
Attention, les ensembles
{a, b, c} et {{a}, {b}, {c}},

sont différents, puisqu’ils n’ont pas les mêmes éléments. Autrement dit, les accolades  {  et
 }  ont un ici rôle mathématique important. Ce ne sont pas que de simples séparateurs comme

en français. On dit des éléments {x, y} de P 2 [A] que ce sont des paires d’éléments de A. On a alors
forcément x 6= y.

2.4 Opérations de base sur les ensembles

Une première opération de base entre ensembles est celle d’intersection, A∩B, entre deux ensembles
A et B. C’est l’ensemble des éléments qui sont communs à ces deux ensembles. Plus précisément
on a
A ∩ B := {x | x ∈ A, et x ∈ B}. (2.4)

Par exemple, on a
{a, b, c, d} ∩ {1, b, 3, d} = {b, d}.

D’autre part, l’union de A et B est l’ensemble

A ∪ B := {x | x ∈ A, où x ∈ B}. (2.5)

Par exemple
{a, b, c, d} ∪ {1, b, 3, d} = {a, b, c, d, 1, 3}.

On vérifie facilement que les égalités suivantes sont valables en général, quels que soient les en-
sembles A, B, et C :

(i) A ∩ ∅ = ∅, (i)0 A ∪ ∅ = A,
(ii) A ∩ B = B ∩ A, (ii)0 A ∪ B = B ∪ A,
(2.6)
(iii) A ∩ (B ∩ C) = (A ∩ B) ∩ C, (iii)0 A ∪ (B ∪ C) = (A ∪ B) ∪ C,
(iv) A ∩ (B ∪ C) = (A ∩ B) ∪ (A ∩ C), (iv)0 A ∪ (B ∩ C) = (A ∪ B) ∩ (A ∪ C).
2.4. OPÉRATIONS DE BASE SUR LES ENSEMBLES 45

Lorsque A ∩ B = ∅, on dit que A ∪ B est une union disjointe, et on écrit alors A + B pour désigner
cette union. Voir l’exercice 2.2 pour ce qui concerne les propriétés de l’union disjointe 2 .
La différence, A \ B, de deux ensembles A et B, est l’ensemble des éléments de A qui ne sont pas
dans B, c.-à-d. :
A \ B := {x ∈ A | x 6∈ B}. (2.7)
En supposant qu’on a un ensemble S fixé, on dénote A le complément de A dans S. C’est tout
simplement un autre nom pour
A := S \ A,
qu’il est pratique d’utiliser lorsque le  surensemble  S est clair dans le contexte. Ainsi, lorsqu’on
fixe S = {a, b, c, d, e, f } et A = {b, c, e}, on a A = {a, d, f }. Si A = {x ∈ S | P (x)}, alors on a

A = {x ∈ S | ¬P (x)}.

Quels que soit A et B des sous-ensembles de S (donc des éléments de P[S]), les identités suivantes
sont valables
(i) A = A,
(ii) A ∩ A = ∅, (ii)0 A ∪ A = S, (2.8)
(iii) A ∩ B = A ∪ B, (iii)0 A ∪ B = A ∩ B.
Pour une famille d’ensembles 3
{A1 , A2 , A3 , . . . , An },
on a les unions et intersections
n
\ n
[
Ai , et Ai .
i=1 i=1

En fait, P[S] est toujours l’union (disjointe, voir Exercice 2.2 pour la notation) des ensembles P k [S],
c.-à-d. :
X∞
P[S] = P k [S]. (2.9)
k=0

Comme P k [S] = ∅, si k est plus grand que le cardinal de S, cette sommation est en fait finie. On a
donc ici deux descriptions du même ensemble.
2. Lorsque A et B ne sont pas disjoints (A ∩ B 6= ∅), on peut tout de même considérer leur union disjointe en
 forçant  A et B à être disjoints. Plus précisément, on pose

A + B = ({0} × A) ∪ ({1} × B).

On donne ainsi des  couleurs  distinctes aux éléments de A et de B.


3. On exploite ici l’associativité de l’union et de l’intersection.
46 CHAPITRE 2. ENSEMBLES ET FONCTIONS

On peut  calculer  récursivement l’ensemble des parties à k éléments d’un ensemble S = T + {x},
avec x 6∈ T , en posant

 1) A = S et k = |S|,

A ∈ P k [S] ssi 2) A ∈ P k [T ], où (2.10)

3) A = B + {x}, et B ∈ P k−1 [T ].

2.5 Produit cartésien

Avant d’introduire la prochaine construction, rappelons que deux couples (a, b) et (c, d) sont égaux,
si et seulement si on a les deux égalités a = c et b = d. Le produit cartésien de A et B est l’ensemble
de tous les couples (x, y), avec x élément de A et y élément de B. Autrement formulé, on a

A × B = {(x, y) | x ∈ A et y ∈ B}.

Si l’un des ensembles A ou B est vide, alors le produit cartésien A × B est vide, c.-à-d. :

A × ∅ = ∅ × B = ∅. (2.11)

Une illustration du produit cartésien est donnée par

{a, b, c, d} × {1, 2, 3, 4, 5} = {(a, 1), (a, 2), (a, 3), (a, 4), (a, 5),
(b, 1), (b, 2), (b, 3), (b, 4), (b, 5),
(c, 1), (c, 2), (c, 3), (c, 4), (c, 5),
(d, 1), (d, 2), (d, 3), (d, 4), (d, 5)}.

Dans le cas des ensembles, finis [n] = {1, 2, . . . , n} et [k] = {1, 2, . . . , k}, on constate que les éléments
du produit cartésien [n] × [k] s’identifient aux cases d’un tableau (ou d’une matrice) ayant n lignes
et k colonnes :
···
1
···
2
···
···
···
···
···
···
···

···
···

···
n
···
1 2 3 4 5 k

Remarquons qu’on utilise ici des coordonnées matricielles, indexant les lignes du haut vers le bas,
plutôt que des coordonnées cartésiennes pour lesquelles on indexerait les lignes du bas vers le haut.
À strictement parler, le produit cartésien n’est pas associatif. Ainsi, les éléments de (A × B) × C
sont de la forme ((x, y), z), avec x ∈ A, y ∈ B et z ∈ C ; tandis que ceux de A × (B × C) sont
2.6. RELATION 47

de la forme (x, (y, z)). On considère cependant souvent une construction intermédiaire, dénotée
A × B × C, dont les éléments sont les triplets (x, y, z). Lorsque A, B et C sont des ensembles finis,
les éléments de A × B × C peuvent se représenter sous forme de tableau tridimensionnel (un peu
comme dans la Figure ci-contre).
Plus généralement, on a le produit cartésien multiple

A1 × A2 × · · · × An = {(x1 , x2 , . . . , xn ) | xi ∈ Ai , 1 ≤ i ≤ n}.

Lorsque Ai = B, pour tous les i, on obtient la puissance cartésienne n-ième,

B n := B
| × B{z
× · × B},
n copies

de l’ensemble B, avec B 0 := {∗}. Les éléments de B n sont les n-tuplets (x1 , x2 , . . . , xn ), d’éléments
de xi ∈ B. Il arrive parfois qu’on veuille écrire plus simplement x1 x2 . . . xn , pour un tel élément.
On dit alors qu’on l’a écrit sous forme de mot.

2.6 Relation

Une relation R, entre les ensembles A et B, est simplement un sous-ensemble du produit cartésien
A × B, c.-à-d. : R ⊆ A × B. Par exemple, pour A = {a, b, c, d} et B = {1, 2, 3}, on a la relation

R = {(a, 1), (a, 2), (b, 3), (c, 2), (d, 1)}.

Un exemple typique est la relation (entre êtres humains) :

R :=  est un ancêtre de .

Si H désigne l’ensemble des êtres humains (morts ou vivants), on définit récursivement R ⊆ H × H


en posant : 
 1) a est le père ou la mère de b, ou
(a, b) ∈ R ssi (2.12)
 2) (a, c) ∈ R et (c, b) ∈ R.

La première clause amorce le processus, et la seconde affirme que

 les ancêtres de mes ancêtres sont mes ancêtres  .

Une relation R sur A est dite


(a) réflexive si pour chaque x dans A, on a (x, x) ∈ R,
48 CHAPITRE 2. ENSEMBLES ET FONCTIONS

(b) symétrique si (x, y) ∈ R entraı̂ne (y, x) ∈ R,


(c) antisymétrique si (x, y) ∈ R et (y, x) ∈ R entraı̂ne x = y,
(d) transitive si (x, y) ∈ R et (y, z) ∈ R entraı̂ne (x, z) ∈ R.
La plus simple des relations réflexives, sur un ensemble A, est la relation d’égalité entre éléments
de A. Le sous-ensemble correspondant de A × A est clairement {(x, x) | x ∈ A}.
Une relation d’équivalence R sur A, est une relation qui est à la fois réflexive, symétrique et
transitive. Plutôt que d’écrire (x, y) ∈ R, on écrit souvent x ∼ y (ou x ≡ y), et on dit que x est
équivalent à y. Ainsi,  ∼  est une relation d’équivalence si et seulement si, pour tout x, y et z
dans A, on a
(a) x ∼ x,
(b) si x ∼ y, alors y ∼ x,
(c) si x ∼ y et y ∼ z, alors x ∼ z.

2.7 Fonctions

Apparemment, le terme  fonction  a été introduit par Leibniz. Pendant


longtemps la définition de cette notion n’a pas été très claire. Dans l’en-
cyclopédie de d’Alembert, on dit à peu près qu’une fonction est donnée
par une formule impliquant une variable. Rappelons qu’aujourd’hui on
s’accorde plutôt sur le fait de donner une approche abstraite à la notion
de fonction (voir Section 1.2), en donnant seulement un critère qui permet
simplement de dire quand on a affaire à une fonction. Entre autres, cela
rend possible la définition de l’ensemble des fonctions de A vers B. Ainsi,
on considère l’ensemble Fonct[A, B] dont les éléments sont les relations
fonctionnelles de A vers B, c’est-à-dire que Gottfried Leibniz
(1646–1716)
f ⊆ A × B, où (i) ∀x ∃y (x ∈ A, y ∈ B, et (x, y) ∈ f ),
(2.13)
(ii) ∀x ∀y1 ∀y2 ((x, y1 ) ∈ f et (x, y2 ) ∈ f =⇒ y1 = y2 ).
On a alors, pour chaque élément f de Fonct[A, B], une fonction
f :A→B
de source A et de but B. Il nous arrivera souvent de parler de la fonction f , si la source et le but
associés sont clairs dans le contexte. Pour A = {a, b, c} et B = {0, 1}, on a
Fonct[A, B] = { {(a, 0), (b, 0), (c, 0)}, {(a, 0), (b, 0), (c, 1)},
{(a, 0), (b, 1), (c, 0)}, {(a, 0), (b, 1), (c, 1)},
{(a, 1), (b, 0), (c, 0)}, {(a, 1), (b, 0), (c, 1)},
{(a, 1), (b, 1), (c, 0)}, {(a, 1), (b, 1), (c, 1)} }.
2.7. FONCTIONS 49

Il y a donc 8 fonctions de A vers B. Observons que l’ensemble Fonct[∅, B] contient exactement un


élément, quel que soit l’ensemble B. C’est la relation vide (qui est fonctionnelle par défaut), et on
a explicitement
Fonct[∅, B] = {∅}. (2.14)
En utilisant ceci comme condition initiale, on peut calculer récursivement l’ensemble des fonctions
de A vers B lorsque A et B sont des ensembles finis. On a

1) f = ∅ et A = ∅,


f ∈ Fonct[A, B] ssi 2) f = g + {(x, y)}, avec x ∈ A, y ∈ B, et (2.15)


 g ∈ Fonct[A \ {x}, B].

Pour f : A → B, et C un sous-ensemble de A, on a la restriction f C


, de f à C, définie en posant

f C
:= {(x, f (x)) | x ∈ C}. (2.16)

Il en résulte donc une fonction f C


: C → B.
Quel que soit B, sous-ensemble de A, on peut définir la fonction caractéristique, B : A → {0, 1},
de B dans A, en posant (
1 si, x ∈ B,
B(x) := (2.17)
0 sinon.
Cette fonction caractérise le sous-ensemble B par le fait que

B = {x ∈ A | B(x) = 1}, et B = {x ∈ A | B(x) = 0}. (2.18)

Dans le cas où R est une relation de [n] vers [k], la fonction caractéristique R : [n] × [k] → {0, 1}
correspondante (
1 si, (i, j) ∈ R,
R(i, j) := (2.19)
0 si, (i, j) 6∈ R,
est une matrice n×k dont les coefficients sont des 1 ou des 0. On dit que R est la matrice d’incidence
de la relation R. Par exemple, avec n = 3 et k = 4, la relation

R = {(1, 1), (1, 3), (1, 4), (2, 2), (2, 3), (3, 1), (3, 4)}

corresponds ainsi à la matrice  


1 0 1 1
R = 0 1 1 0
1 0 0 1
Dans le cas d’une relation fonctionnelle f , la matrice obtenue contient exactement un seul 1 sur
chacune de ses lignes.
50 CHAPITRE 2. ENSEMBLES ET FONCTIONS

Cette dernière construction est un cas spécial de fonction de la forme M := [n] × [k] → A, à valeur
dans un ensemble A quelconque. Une telle fonction s’identifie naturellement à une matrice n × k
dont les coefficients sont choisis dans l’ensemble A, simplement en prenant M (i, j) comme valeur
en position (i, j) dans la matrice. Ainsi, pour A = {a, b, c, d, e}, on a la matrice 2 × 3
 
a b c
c a e

qui correspond à la fonction sur [2] × [3], prenant les valeurs

M (1, 1) = a, M (1, 2) = b, M (1, 3) = c,


M (2, 1) = c, M (2, 2) = 1, M (2, 3) = e.

2.7.1 Bijections

Dans une première introduction à la théorie des en-


sembles, la correspondance établie par une bijection a
f : A → B, entre les éléments de A et ceux de B, est
1
souvent introduite par une représentation naı̈ve comme b
2
celle de la Figure 2.1. De façon plus précise, on a la c 3
définition suivante. Une fonction f de A vers B, est une 4
d
bijection, si on a une fonction inverse f −1 : B → A,
pour la composition, c.-à-d. :

f −1 ◦ f = IdA , et f ◦ f −1 = IdB . (2.20)


Figure 2.1 – Représentation naı̈ve d’une
Il est très facile de vérifier qu’il ne peut y avoir qu’un bijection.
inverse pour la composition, c.-à-d. :

Proposition 2.1. Pour toute fonction f : A → B, si g : B → A est telle que

g ◦ f = IdA , et f ◦ g = IdB , (2.21)

alors g = f −1 .

Pour montrer que f : A → B est une bijection, il faut donc montrer qu’on peut construire une
fonction qui satisfait (2.21).
On désigne par Bij[A, B] l’ensemble (fini) des relations bijectives entre A et B, c.-à-d. :

Bij[A, B] := {f ∈ Fonct[A, B] | f : A −→ B}. (2.22)
2.7. FONCTIONS 51

Il découle directement du principe ci-haut qu’on a Bij[A, B] = ∅, lorsque |A| 6= |B|. Observons que
Bij[∅, ∅] = {∅} est de cardinal 1. La formule suivante permet de calculer récursivement l’ensemble
des bijections entre deux ensembles A et B de même cardinal fini :

1) f = ∅ et A = B = ∅,


f ∈ Bij[A, B] ssi 2) f = g + {(x, y)}, avec x ∈ A, y ∈ B, et (2.23)


 g ∈ Bij[A \ {x}, B \ {y}].

Ainsi, pour A = {a, b, c} et B = {1, 2, 3}, on trouve

Bij[A, B] = { {(a, 1), (b, 2), (c, 3)}, {(a, 1), (b, 3), (c, 2)},
{(a, 2), (b, 1), (c, 3)}, {(a, 2), (b, 3), (c, 1)},
{(a, 3), (b, 1), (c, 2)}, {(a, 3), (b, 2), (c, 1)} }.

Il y a donc exactement 6 bijections entre les deux ensembles à trois éléments A et B.


Le composé de fonctions bijectives est une fonction bijective, et l’inverse d’une fonction bijective est
une fonction bijective. Pour tout ensemble fini A, l’ensemble Bij[A, A], des bijections de A vers A,
forme un groupe pour la composition de fonctions, avec IdA comme identité. On dit habituellement
d’une bijection de A vers A que c’est une permutation de A, et on désigne souvent par SA l’ensemble
des permutations de A. Lorsque A = [n], on écrit simplement Sn plutôt que S[n] . Les permutations
sont souvent dénotées par des lettres grecques minuscules : σ, τ , θ, etc.
On code souvent une permutation σ, de [n], sous forme d’une matrice carrée n × n de 0 et de
1, ayant un 1 dans chaque ligne, et un 1 dans chaque colonne. On dit que c’est une matrice de
permutation. C’est en fait la fonction caractéristique de la relation fonctionnelle sous-jacente.

2.7.2 Injections

Parmi les propriétés particulières des fonctions, l’injec-


a 1
tivité et la surjectivité sont très certainement des no-
2
tions importantes. Une fonction f : A → B est dite b
3 5
injective si et seulement si 4
c 6
8
d 7
 Pour chaque élément y de B, il
9
existe au plus un élément x de A tel que f (x) = y. 

Autrement dit, la fonction f et un processus qui


Figure 2.2 – Représentation naı̈ve d’une
injection.
 choisit des éléments

f (x) de B, un pour chaque x dans A, tous distincts, 


52 CHAPITRE 2. ENSEMBLES ET FONCTIONS

c’est-à-dire qu’un élément ne peut-être choisi qu’une seule fois. Une formulation un peu plus tech-
nique (mais plus facile à manipuler) de cette définition prend la forme suivante. Une fonction
f : A → B est injective si et seulement si, pour tout x1 et tout x2 dans A

x1 6= x2 implique f (x1 ) 6= f (x2 ), (2.24)

ce qui équivaut (logiquement) à dire aussi que

f (x1 ) = f (x2 ) entraine forcément x1 = x2 . (2.25)

Il en découle (voir Exercice 2.6) que f est injective si et seulement si f admet un inverse à gauche,
c.-à-d. : il existe g : B → A tel que g ◦ f = IdA . En général, un tel inverse à gauche n’est pas unique,
et il n’est pas un inverse à droite.
On dénote souvent par le symbole  ,→  le fait qu’une fonction soit injective. On écrit donc
f : A ,→ B, pour dire que f est une injective. On désigne par Inj[A, B] l’ensemble des relations
fonctionnelles f telles que f : A ,→ B soit une fonction injective de A vers B, c.-à-d. :

Inj[A, B] := {f ∈ Fonct[A, B] | f : A ,→ B}. (2.26)

On calcule récursivement l’ensemble des fonctions injectives de A vers B lorsque A et B sont des
ensembles finis. On a

(1) f = ∅ et A = ∅,


f ∈ Inj[A, B] ssi (2) f = g + {(x, y)}, avec x ∈ A, y ∈ B, et (2.27)


 g ∈ Inj[A \ {x}, B \ {y}].

Observons que la seule différence entre cette description et celle en (2.23) est dans la partie (1).
La ressemblance n’est pas fortuite. Elle s’ensuit du fait qu’une injection entre deux ensembles de
même cardinal est forcément une bijection (voir Proposition 2.2). Pour A = {a, b} et B = {1, 2, 3},
on a
Inj[A, B] = { {(a, 1), (b, 2)}, {(a, 2), (b, 1)},
{(a, 1), (b, 3)}, {(a, 3), (b, 1)},
{(a, 2), (b, 3)}, {(a, 3), (b, 2)} }.
Pour qu’il existe une injection f : A ,→ B, le nombre d’éléments de A doit nécessairement être plus
petit ou égal à celui de B, c.-à-d. : |A| ≤ |B|. On a donc Inj[A, B] = ∅, lorsque |A| > |B|.
Le composé de deux fonctions injectives est toujours une fonction injective. De plus, si on a deux
fonctions telles que le composé g ◦ f soit une fonction injective, alors f est forcément injective (mais
pas nécessairement g).
2.7. FONCTIONS 53

2.7.3 Surjections
1
Une fonction f : A → B est dite surjective si et seule- 5 a
2
ment si
3
4
b
Pour chaque élément y de B, il existe
 6
8 c
au moins un élément x de A tel que f (x) = y. 
7

9 d
Autrement dit, f est un processus qui

choisit


chaque élément y de B au moins une fois. 


Figure 2.3 – Représentation naı̈ve d’une
surjection.
Une fonction f : A → B est surjective si et seulement si elle admet un inverse à droite, c.-à-d. :
il existe g : B → A tel que f ◦ g = IdB . En général, un tel inverse à droite n’est pas unique, et il
n’est pas un inverse à gauche si f n’est pas bijective. On dénote souvent par le symbole    le
fait qu’une fonction est surjective. On écrit alors f : A  B, pour dire que f est une surjective. On
désigne par Surj[A, B] l’ensemble des relations fonctionnelles surjectives de A vers B, c.-à-d. :

Surj[A, B] := {f ∈ Fonct[A, B] | f : A  B}. (2.28)

Pour qu’il existe une surjection f : A  B, le nombre d’éléments de A doit nécessairement être
plus grand ou égal à celui de B, c.-à-d. : |A| ≥ |B|. On a donc Surj[A, B] = ∅, lorsque |A| < |B|.
On peut calculer récursivement l’ensemble des fonctions surjectives entre deux ensembles fins A et
B par la récurrence


 (1) f = ∅ et A = B = ∅,


(2) f = g + h, avec C ⊆ A, y ∈ B,

f ∈ Surj[A, B] ssi (2.29)


 g ∈ Surj[A \ C, B \ {y}], et

h ∈ Fonct[C, {y}].

Le composé de deux fonctions surjectives est toujours une fonction surjective. De plus, si on a deux
fonctions telles que le composé g ◦ f soit une fonction surjective, alors g est forcément surjective
(mais pas nécessairement f ).
On montre facilement que

Proposition 2.2. Une fonction qui est à la fois surjective et injective est une fonction bijective.
Autrement dit,
Bij[A, B] = Inj[A, B] ∩ Surj[A, B]. (2.30)
54 CHAPITRE 2. ENSEMBLES ET FONCTIONS

2.8 Compter les éléments d’un ensemble

Lorsqu’on cherche à compter les éléments d’un ensemble A, le problème se décompose souvent en
un (ou des) problème(s) plus simple(s), selon que l’ensemble à énumérer peut se décrire en terme
des constructions de base sur les ensembles.
On démarre les choses en montrant (par récurrence) que

Théorème 2.3. Si A et B sont des ensembles finis, respectivement de cardinal n et k, alors on a


les égalités suivantes :

(i) |A + B| = n + k, (ii) |A × B| = n k,
 
n
(iii) |P[A]| = 2n , (iv) |P k [A]| = , (2.31)
k
(v) |B n | = k n .

Le problème de compter les éléments d’un ensemble fini est parfois difficile, et même dans certains
cas pas encore résolu. Il donne lieu à un domaine des mathématiques qu’on appelle la combinatoire
énumérative. C’est l’un des domaines de recherche dans lequel des professeurs du département de
mathématiques de l’UQAM sont spécialisés. Pour en savoir plus à ce sujet, on peut consulter la
page web du centre de recherche institutionnel  Lacim  :

http://www.lacim.uqam.ca/

Pour des ensembles infinis, on a aussi des résultats d’énumération. Il y a en fait toute une hiérarchie
des infinis, le plus petit étant l’infini correspondant au  nombre  de l’ensemble N. On le dénote
ℵ0 . Cantor a étudié cette question, en exploitant le point de vue que deux ensembles ont le même
cardinal si et seulement s’il existe une bijection entre les deux. Autrement dit,

|A| = |B|, ssi ∃f : A −→ B. (2.32)

En particulier, voir Exercice 2.10, on a que

|N| = |Z| = |Q| = ℵ0 . (2.33)

D’autre part, on peut aussi voir (Exercice 2.11) que

|R| = |P[N]|. (2.34)

On étend les inégalités entre cardinaux d’ensembles infinis, en considérant que |A| ≤ |B| s’il existe
une injection de A dans B. Bien entendu, |A|  |B| s’il y a une injection de A dans B, mais pas de
bijection. Avec ces conventions, on montre qu’on a toujours
2.8. COMPTER LES ÉLÉMENTS D’UN ENSEMBLE 55

Théorème 2.4 (Cantor). Pour tout ensemble A, on a l’inégalité stricte

|A|  |P[A]|.

En particulier, on a la suite d’inégalités

|N|  |P[N]|  |P[P[N]]|  . . . ,

qui donne lieu à une hiérarchie d’infinis de plus en plus grands.


On ne sait pas vraiment si |P[N]| est le  second 4  infini. Le fait de supposer que c’est le cas
porte le nom d’hypothèse du continu. L’une des conséquences de l’inégalité |N|  |P[N]| est que
le nombre de fonctions calculable (avec un ordinateur) de N dans N (c’est ℵ0 ) est tout petit par
rapport au nombre total de fonctions de N dans N (qui lui est en fait égal à |P[N]|).
Pour le voir, on utilise la notion de nombre de Gödel . On suppose que les
algorithmes sont décrits par un texte qui utilise un certain nombre fixé n
de caractères (alphabet usuel en minuscule et majuscule, chiffres, lettre
grecque, symboles mathématiques, espace blanc, et.). Pour simplifier la
description, imaginons qu’on a associé à chacun de ces n symboles un
unique nombre entre 0 et n − 1. Par exemple,

a ↔ 0, b ↔ 2, c ↔ 2, etc.

Un texte correspond alors à une suite finie de ces nombres :

α := a0 a1 a2 · · · ak , avec k∈N et 0 ≤ ai ≤ n − 1.

On transforme alors bijectivement cette suite en un (grand) nombre en- Kurt Gödel
tier, en posant (avec Albert Einstein)
Γ(α) := a0 + a1 n + a2 n2 + . . . + ak nk . (1906–1978)

Ainsi, à chaque nombre entier il correspond un texte, et inversement à chaque texte il correspond un
nombre. Bien entendu, la plupart des textes 5 associés à des entiers sont sans aucune signification,
mais tous ceux qui décrivent des algorithmes en font partie. De plus, un même algorithme peut-être
décrit de plusieurs façons différentes. On en conclut qu’il y a au plus ℵ0 algorithmes possibles.

4. Le plus petit infini plus grand que ℵ0 , qui porte le nom de ℵ1 .


5. Cela inclut entre autres les oeuvres complètes de Shakespeare ou de Voltaire,
56 CHAPITRE 2. ENSEMBLES ET FONCTIONS

La bibliothèque de Borges(∗)

L’écrivain argentin José Luis Borges propose une vision amusante de la


Bibliothèque de Babel (La Biblioteca de Babel ) qui contient tous les livres
(il y en a un nombre fini) de 410 pages qu’il est possible d’écrire avec les
25 lettres d’un certain alphabet. Cette nouvelle, traduite en plusieurs
langues, dont le français, décrit l’existence des habitants de cette bi-
bliothèque, qu’ils ne quittent jamais. Les livres y sont disposés au hasard,
et chacun des habitants est à la recherche d’un livre particulièrement im-
portant pour lui : le catalogue des catalogues, la description de toute sa
vie, passée et future, la description de l’origine de la bibliothèque, etc.
On estime qu’il y a de l’ordre de 1080 atomes dans la partie  obser- José Luis Borges
vable  de notre univers. Cependant, si on suppose qu’il y a 1000 ca- (1906–1978)
ractères par page d’un livre de la bibliothèque de Borges, alors le nombre
de livres est
25410,000 ,

ce qui est quelque peu plus grand que le nombre d’atomes dont il est question. Il est donc un peu
difficile de trouver assez de place (et de matériel) pour ériger la bibliothèque de Borges dans notre
univers.

2.9 Ensembles, décidabilité, et complexité d’algorithmes(∗)

Informellement, on dit d’un sous-ensemble A, des entiers positifs N, qu’il est décidable s’il existe un
algorithme effectif (qui s’arrête après un temps fini) qui permet de vérifier l’appartenance ou non
à cet ensemble.
Plus précisément, on demande que la fonction caractéristique de A soit calculable avec une Machine
de Turing 6 (un ordinateur, sans limites précises de mémoire). Cela comprend les fonctions qu’on
peut construire, à partir des fonctions de base sur les entiers, avec la composition et la récursivité.
Pour certains ensembles, il est facile de déterminer qu’il sont décidables. C’est le cas, par exemple,
pour l’ensemble des nombres pairs, ou l’ensemble des nombres premiers.
On peut prouver que l’appartenance à certains ensembles est en fait indécidable. C’est-à-dire qu’il
ne peut pas y avoir d’algorithme permettant de tester cette appartenance. Il est fascinant de voir
ainsi qu’on n’aura jamais la possibilité de résoudre ce genre de questions avec un ordinateur tel
qu’on les conçoit. Cependant, très souvent on ne sait pas (encore) si une question est décidable ou
non. Avec le problème de Collatz, on en a un exemple.

6. Alan M. Turing (1912–1954)


2.9. ENSEMBLES, DÉCIDABILITÉ, ET COMPLEXITÉ D’ALGORITHMES(∗) 57

Lorsqu’on a un algorithme pour calculer une fonction f : N → X, celui-ci n’est pas nécessairement
très efficace. Parfois même, il est pratiquement inutile. Il importe donc, autant que possible, d’avoir
une idée du  temps de calcul  nécessaire pour calculer f (n), en fonction de la valeur de n.
L’expression exacte de ce temps de calcul est généralement trop complexe pour être directement
calculable. On utilise donc une forme d’approximation qui donne un ordre de grandeur pour ce temps
de calcul. C’est la notation O(g(n)), qui mesure la complexité d’un algorithme. Intuitivement, les
algorithmes en
(1) O(1), dits constants, sont  instantanés ,
(2) O(log(n)), dits logarithmiques, sont  très rapides ,
(3) O(n), dits linéaires, sont  rapides ,
(4) O(n2 ), dits quadratiques, sont  assez rapides ,
(5) O(nk ), dits polynomiaux sont  acceptables ,
(6) O(en ), dits exponentiels sont  très lents .
(7) O(n!), dits factoriels sont  très très lents .
Au-delà de O(n!) (et souvent même avant), les algorithmes deviennent essentiellement inutilisables
(même sur un superordinateur). D’un point de vue technique, on associe à chaque fonction h(x)
(définie pour x ∈ R si x est assez grand, et à valeurs positives), on dénote par O(h(x)) un certain
ensemble de fonctions. Plus précisément, on a g(x) ∈ O(h(x)), s’il existe N > 0 et une certaine
constante positive M , tels que

g(x) ≤ M · h(x), pour tout x > N .

Autrement dit, à un multiple M près, la fonction h(x) croit plus vite que la fonction g(x) pour des
valeurs assez grandes de x. On montre facilement qu’on a les propriétés

(1) Si g1 ∈ O(h1 ) et g2 ∈ O(h2 ) alors g1 + g2 ∈ O(h1 + h2 ). (2.35)


(2) Si g1 ∈ O(h1 ) et g2 ∈ O(h2 ) alors g1 g2 ∈ O(h1 · h2 ). (2.36)
(3) Si g>0 alors g · O(h) ⊆ O(g · h). (2.37)

Analyser la complexité d’un algorithme qui calcule la fonction f (n) consiste donc à estimer le
nombre maximum (ou moyen) d’étapes simples de calcul qui sont nécessaires lors du calcul. Cette
estimation s’exprime sous la forme O(g(n)), donc en terme d’une fonction de n.
L’analyse de complexité moyenne d’un algorithme peut se faire de façon beaucoup plus fine, au
moyen d’outils mathématiques élaborés : fonctions génératrices, combinatoire énumérative, analyse
complexe, analyse de singularité, etc.
Dans un autre registre, on étudie aussi la complexité théorique de certains calculs. Dans ce cas
il s’agit moins d’estimer la complexité moyenne de calculs explicites, que de démontrer qu’il est
possible ou impossible de résoudre  efficacement  des problèmes d’un certain genre. Ici l’effica-
cité est à prendre avec un grain de sel. Elle signifie l’existence d’algorithmes qui calcule en temps
58 CHAPITRE 2. ENSEMBLES ET FONCTIONS

polynomial, mais on ne sait parfois même pas comment construire ces algorithmes. Pire encore, il
y a des exemples explicites pour lesquels on peut démontrer qu’il  existe  des algorithmes poly-
nomiaux ; mais on peut aussi démontrer qu’on ne saura jamais les trouver. D’autre part, même des
algorithmes polynomiaux peuvent être pratiquement inutilisables, si l’exposant de n est très grand.
C’est dans ce contexte que se pose le problème toujours ouvert  P versus NP . Informellement,
la question est de savoir si le fait qu’on puisse vérifier en temps polynomial qu’on a bien une solu-
tion aux problèmes d’une certaine famille, implique ou non qu’on puisse effectivement trouver des
solutions aux problèmes en question en temps polynomial. C’est subtil, et il est nécessaire de faire
attention à l’énoncé exact.
Un autre point de vue plus concret sur la question des calculs difficiles est soulevé par la possibilité
de construire des  ordinateurs quantiques . Avec de tels outils, on peut contourner certaines diffi-
cultés de calcul. Par exemple, des travaux théoriques montrent comment construire des algorithmes
efficaces de factorisation de grands entiers, si on arrive un jour à avoir accès à de tels ordinateurs.

Le paradoxe de Russell

La théorie des ensembles telle que formulée par Cantor n’était pas
assez précise. Bertrand Russell l’a mis en évidence en soulignant
qu’elle donnait lieu au paradoxe suivant. On considère l’ensemble
 de tous les ensembles qui ne se contiennent pas eux-même . En

formule, c’est
A = {x | x 6∈ x}. (2.38)
La question qui se pose est de savoir si
A∈A où A 6∈ A.
Hors on constate (avec Russel) que
A∈A implique A 6∈ A, Bertrand Russell
(1872-1970)
et réciproquement ! C’est là le paradoxe. Attention, on considère ici la notion d’ensemble à la
Cantor. Cette construction n’est pas possible dans les versions modernes de la théorie des ensembles.
En effet, pour remédier au paradoxe de Russel, on a échafaudé plusieurs axiomatiques précises
pour la théorie des ensembles. L’une des plus connues est celle dite de Zermelo-Fraenkel présentée
schématiquement à l’appendice B. C’est dans de tels contextes que les mathématiciens travaillent
maintenant.

2.10 Exercices

2.1. Montrer que, pour tous ensembles A et B on a


2.10. EXERCICES 59

a) A = A ∪ B si et seulement si B = A ∩ B.
b) A ∪ (A ∩ B) = A, et A ∩ (A ∪ B) = A,
2.2. Pour des ensembles disjoints A et B, c’est-à-dire que A ∩ B = ∅, on dit de A ∪ B que c’est
une union disjointe. On écrit alors A + B pour cette union. Montrer que, pour tous ensembles A,
B et C deux à deux disjoints, on a
a) A + ∅ = A,
b) A + B = B + A,
c) (A + B) × C = (A × C) + (B × C),
d) A + (B + C) = (A + B) + C.
En utilisant cette dernière associativité, montrer qu’on peut étendre la notionP
d’union disjointe aux
familles d’ensembles deux à deux disjoints. On utilise alors le symbole de  , et on écrit donc

n
X
Ai = A1 + A2 + . . . + An , (2.39)
i=1

tout comme d’habitude. Il s’agit ici de vérifier que la valeur de (2.39) ne dépend pas de la façon
d’organiser le calcul (placer des parenthèses).
2.3. Montrer que les ensembles à un élément (les singletons) sont des identités pour le produit
cartésien (à une bijection près). Montrer aussi qu’on a les identités suivantes (modulo des bijections
qui consistent à réordonner les composantes)
∼ ∼
(i) B n × B k −→ B n+k , et (iii) (B n )k −→ B n k . (2.40)
Montrer enfin qu’on peut identifier (via une bijection adéquate) les ensembles B n et Fonct[[n], B].
2.4. Montrer, par récurrence sur n, la formule du binôme de Newton :
n  
n
X n k n−k
(x + y) = x y . (2.41)
k
k=0

Suggestion : Utiliser (1.28).


2.5. On définit récursivement les fonctions (de N vers N) :
(
1 si n ≤ 1,
f (n) :=
f (n − 1) + 2 f (n − 2) si n > 1,
et 
1
 si n ≤ 1,
g(n) := 2 g(n − 1) − 1 si n est impair,

2 g(n − 1) + 1 si n est pair.

Montrer que f = g.
60 CHAPITRE 2. ENSEMBLES ET FONCTIONS

2.6. Montrer que


a) f : A → B est injective ss’il existe g : B → A tel que g ◦ f = IdA .
b) Le composé de fonctions injectives est injectif.
c) Donner un exemple d’une fonction injective de {a, b} dans {1, 2, 3}, ainsi que deux inverses
à gauche distincts de cette fonction.
d) f : A → B est surjective ss’il existe g : B → A tel que f ◦ g = IdB .
e) Le composé de fonctions surjectives est surjectif.
c) Donner un exemple d’une fonction surjective de {a, b, c} dans {1, 2}, ainsi que deux inverses
à droite distincts de cette fonction.

2.7. Vérifier que le passage à la fonction caractéristique donne une bijection entre l’ensemble P[A]
et l’ensemble Fonct[A, {0, 1}].

2.8. Montrer par récurrence que n! est le nombre de bijections entre deux ensembles de cardinal n.

2.9. Quel que soit les ensembles A, B, et C, trouver des bijections explicites :

i) Fonct[A + B, C] −→ Fonct[A, C] × Fonct[B, C],

ii) Fonct[A, B × C] −→ Fonct[A, B] × Fonct[A, C], (2.42)

iii) Fonct[A, Fonct[B, C]] −→ Fonct[A × B, C].

2.10. Montrer d’abord que la fonction θ := N → Z, définie comme


(
k si n = 2 k,
θ(n) = (2.43)
−k si n = 2 k − 1.

est une bijection. Montrer ensuite qu’on obtient bien une bijection ϕ := Z −→ Q, en posant ϕ(0) = 0,
et
θ(a ) θ(a ) θ(a )
ϕ(± n) = ± p1 1 p2 2 · · · pj j (2.44)

lorsque la décomposition de n > 0, en produit de puissances de nombres premiers distincts 7 , est


a
n = pa11 pa22 · · · pj j .

2.11. Montrer d’abord qu’il y a bijection entre l’ensemble (0, 1) et R, en utilisant la fonction
f := (0, 1) → R, définie comme
f (x) := tan(π x − π/2).

7. Tout entier naturel admet une unique telle décomposition.


2.10. EXERCICES 61

Pour tous ensembles A et B, on a que |A| ≥ |B| s’il existe une surjection de A vers B. Montrer
qu’on a une surjection 8 g := P[N]  [0, 1], définie en posant
X 1
g(A) = A(k) ,
2k+1
k∈N

où A(k) est la valeur en k de la fonction caractéristique du sous-ensemble A.

Programmation mathématique

2.12 (Génération de sous-ensembles).


a) Au moyen de la formule (2.10), écrire une procédure récursive qui calcule l’ensemble des
parties à k éléments d’un ensemble.
b) Écrire une procédure qui engendre aléatoirement (avec distribution uniforme 9 ) un élément
de P k [A].

2.13. Concevoir des procédures qui, étant donnés des ensembles finis A et B, engendrent les en-
sembles :
a) Fonct[A, B], b) Bij[A, B], c) Inj[A, B], d)(∗) Surj[A, B]
Attention, ces ensembles deviennent rapidement très grands.

2.14. Concevoir des procédures de calcul formel qui, étant donnés des ensembles finis A et B,
engendrent aléatoirement (avec distribution uniforme) un élément de :

a) Fonct[A, B], b) Bij[A, B], c) Inj[A, B], d)(∗) Surj[A, B]

Ces procédures devraient pouvoir fonctionner pour des ensembles beaucoup plus grands que ceux
de l’exercice précédent.

8. Utiliser le fait qu’on a un développement fractionnaire binaire pour tout nombre réel x ∈ [0, 1].
9. Chaque élément doit avoir la même probabilité d’être engendré, à savoir 1/N , où N est le nombre d’éléments
de l’ensemble concerné.
62 CHAPITRE 2. ENSEMBLES ET FONCTIONS
Chapitre 3

Graphes simples

3.1 Introduction

Avec la notion d’ensemble bien en main, on peut maintenant introduire des constructions plus
élaborées. L’une d’entre elles est la notion de graphes que nous allons maintenant étudier plus
en profondeur, en plus de développer des algorithmes qui résolvent des problèmes impliquant ces
graphes.

3.2 Graphe simple.

Dans le contexte suivant, nous allons dire des éléments d’un ensemble fini S (quelconque) que ce
sont des sommets. Ce n’est qu’un autre nom pour les éléments de S, mais cela rend la discussion
plus agréable. Un graphe (ou graphe simple) sur un ensemble de sommets S est constitué d’un
ensemble A d’arêtes. Une arête est simplement une paire {x, y} d’éléments de S. On dit alors que
les sommets x et y sont adjacents dans le graphe, ou que x et y sont les extrémités de l’arête {x, y}.
Un graphe sur S est donc un couple (S, A), avec A un sous-ensemble quelconque de l’ensemble

P 2 [S] := {{x, y} | x, y ∈ S, x 6= y},

de toutes les arêtes possibles. On  représente  un graphe en le dessinant dans le plan cartésien
R2 . Pour ce faire, on associe à chaque sommet x un point de R2 (qu’on dénotera aussi x pour éviter
d’avoir des notations trop lourdes), et à chaque arête {x, y} une courbe 1 joignant le point x au
point y. Ici, ni la position des points (qu’on suppose au moins deux à deux distincts), ni celle des
courbes qui les joignent n’ont vraiment d’importance. On dit parfois que le sommet x est l’étiquette
1. Voir la section 3.14

63
64 CHAPITRE 3. GRAPHES SIMPLES

du point de R2 qui le représente. La Figure 3.1 donne deux représentations par dessin du même
graphe G = (S, A) sur l’ensemble de sommets S = {a, b, c, d, e}, avec comme arêtes les éléments de
l’ensemble
A = {{a, b}, {a, c}, {a, e}, {b, c}, {c, d}, {d, e}}.
Il n’est pas toujours évident de savoir comment bien dessiner un graphe, et il n’y a pas une seule
 bonne  façon. Certains logiciels spécialisés arrivent cependant à d’assez bons résultats. Il est

peut-être aussi important de souligner que certains graphes sont si complexes qu’il est fort probable
qu’un dessin ne soit d’aucune utilité pour arriver à en comprendre la nature, saufs peut-être pour
les esthètes. La manipulation de tels graphes par ordinateur est alors probablement la seule solution
pratique.
Il est classique de souligner qu’un des premiers
problèmes connus de la théorie des graphes (résolu par
Euler), consistait à trouver une façon de traverser les
7 ponts de la ville de Konigsberg, telle qu’elle était au
17-ième siècle selon la carte (un peu coloriée depuis)
ci-contre, sans passer deux fois par le même pont (Voir
Exercice 3.7). Nous y reviendrons.
On dénote par Gra[S] l’ensemble des graphes sur S, et
le nombre de graphes à n sommets est
n
|Gra[S]| = 2( 2 ) . (3.1)

Pour S = {a, b, c}, l’ensemble Gra[S] contient les 8 Figure 3.2 – Konigsberg en 1652.
graphes :
Gra[S] = {∅, {{a, b}}, {{a, c}}, {{b, c}}, {{a, b}, {a, c}},
{{a, b}, {b, c}}, {{a, c}, {b, c}}, {{a, b}, {a, c}, {b, c}}}.

b
b

a c d
a
c

e
e d
Figure 3.1 – Deux représentations du même graphe.
3.2. GRAPHE SIMPLE. 65

respectivement représentés comme :

b b b b

a c a c a c a c
b b b b

a c a c a c a c
(3.2)

Deux graphes très particuliers ressortent, le graphe discret (S, ∅), qui ne contient aucune arête,
et le graphe complet KS := (S, P2 [S]), qui contient toutes les arêtes possibles. On choisit souvent
pour S l’ensemble [n] des nombres de 1 à n. Le graphe complet associé est dénoté Kn . Les graphes
complets pour n ≤ 8 sont illustrés à la Figure 3.3.
2
1
1
1
1
2
3
2
3
4
K1 K2 K3 K4
1 2 1 2
2
2 1 1 3
3 7 3
5 8 4
3 6 4 6 4
7 5
4 5 5 6
K5 K6 K7 K8
Figure 3.3 – Les graphes complets Kn , n ≤ 8.

Un graphe aussi intéressant, sur l’ensemble de sommets [n + k], est le graphe biparti complet Kn,k .
Ses arêtes sont toutes les paires i, j, avec 1 ≤ i ≤ n, et n + 1 ≤ j ≤ n + k. Autrement dit, les
seules arêtes sont obtenues en reliant chacun des n premiers sommets à chacun des k derniers. La
Figure 3.4 donne des exemples de tels graphes (sans étiquettes pour les sommets).
D’autres (jolis) graphes portent aussi des noms. On a par exemple le graphe de Petersen 2 de même
que le permutoèdre représenté à la Figure 3.5, en omettant d’étiqueter les sommets. On a aussi la
famille des cubes de dimension n, Bn = (Sn , An ), sur l’ensemble des 2n sommets

Sn := {(1 , 2 , . . . , n ) | i = 0, ou i = 1},
2. Nommé ainsi pour le mathématicien danois Julius Petersen (1839–1910). Le graphe de Petersen sert souvent
d’exemple pour illustrer des propriétés sur les graphes.
66 CHAPITRE 3. GRAPHES SIMPLES

Figure 3.4 – Les graphes bipartis complets K1,3 , K2,3 , et K3,3 .

Figure 3.5 – Graphe de Petersen, et permutoèdre.

avec une arête

{(1 , 2 , . . . , n ), (δ1 , δ2 , . . . , δn )},

exactement quand on a i = δi , pour tous les i sauf un. Ainsi, on obtient les graphes de la Figure 3.6,
pour n = 1, 2, 3, 4. Il y a encore les cycles, Cn = ([n], A), pour lequel les arêtes sont les couples

(0,0,1) (0,1,1) (0,0,1,1) (0,1,1,1)


(0,1) (1,1)
(1,0,1) (1,1,1) (1,0,1,1) (1,1,1,1)
0 1
(0,0,0) (0,1,0)
(0,0,0,1) (0,1,0,1)

(0,0) (1,0) (1,0,0) (1,1,0) (1,0,0,1) (1,1,0,1)

Figure 3.6 – Les cubes de dimension n = 1, 2, 3, 4.

(i, i + i) et (n, 1). On a donc les graphes de la Figure 3.7.


3.3. VOISINAGE ET DEGRÉ 67

1 2 1 2 3 2
3 3 2
4
1 4 1 1

4 5
2 3 3 4 5 5 6 6 7

Figure 3.7 – Les cycles pour n = 3, 4, 5, 6, 7.

3.3 Voisinage et degré

Les voisins d’un sommet x du graphe G = (S, A) sont les sommets y pour lesquels on a une arête
{x, y} ∈ A. Le voisinage V (x) = VG (x), d’un sommet x dans G, est l’ensemble des voisins de x :

VG (x) := {y | {x, y} ∈ A}. (3.3)

Le degré deg(x) = degG (x), d’un sommet x de G, est le cardinal de V (x). C’est donc le nombre de
voisins de x, ou encore le nombre d’arêtes incidentes à x. Dans un graphe à n sommets, le degré
ne peut prendre que les valeurs entre 0 et n − 1. Si c’est 0, c’est qu’il n’y a aucune arête ayant x
comme extrémité, et on dit que x est un sommet isolé. À l’autre extrême, un point x peut-être
relié à tous les autres sommets du graphe. C’est le cas où le degré est maximal, alors égal à n − 1.
Dans le graphe de Petersen et dans le permutoèdre, tous les sommets ont même degré égal à 3. En
général, un graphe est dit régulier si tous ses sommets ont même degré.
Lemme 3.1 (des poignées de mains). Dans tout graphe simple, on a
X
deg(x) = 2 |A|, (3.4)
x∈S

Preuve. Dans la somme de gauche de (3.4), chaque arête est comptée 2 fois, puisqu’elle a deux
extrémités. 

Pour voir ceci de façon amusante, on pense à chaque sommet comme représentant un individu, et
aux arêtes comme étant des poignées de main qu’il donne à ses voisins. Chaque poignée de main
fait intervenir deux individus, et le degré d’un sommet correspond au nombre de poignées de mains
données par l’individu correspondant. Le théorème et sa preuve peuvent alors se relire en terme de
poignées de mains.
On en déduit facilement le fait suivant.
Corollaire 3.2. Dans un graphe simple, il y a toujours un nombre pair de sommets de degré
impair.
68 CHAPITRE 3. GRAPHES SIMPLES

Preuve. On commence par séparer l’ensemble des sommets en deux parties disjointes S = P + I,
avec P celle des sommets de degré pair, et I celle des sommets de degré impair, d’où
X X X
deg(x) = deg(x) + deg(x).
x∈S x∈P x∈I

De (3.4), on calcule alors que


X X
2 |A| − deg(x) = deg(x).
x∈P x∈I

Comme le membre de gauche est manifestement pair, c’est aussi le cas du membre de droite. Cela
force le nombre d’éléments de I a être pair, d’où notre affirmation. 

Une autre propriété amusante des degrés des sommets (dont la preuve est aussi très jolie), est la
suivante :

Proposition 3.3. Dans un graphe simple, il y a toujours au moins deux sommets qui ont le même
degré.

Preuve. On procède par contradiction. Supposons qu’il y ait un graphe G à n sommets, tel que
tous les sommets ont un degré différent. Comme il y a exactement n valeurs possibles pour le
degré (les nombres entre 0 et n − 1), on doit avoir un sommet de degré i pour chaque i entre 0 et
n − 1. Donnons donc le nom xi au sommet de degré i. En particulier, le sommet de x0 n’est relié à
aucun autre sommet, et le sommet xn−1 est relié à tous les autres sommets. Ceci est manifestement
impossible, puisqu’alors on aurait que xn−1 est relié à x0 , qui lui n’est relié à aucun sommet. Cette
contradiction nous force à rejeter l’hypothèse qu’il existe un graphe dans lequel tous les sommets
ont un degré différent, ce qui montre la proposition. 

Sous-graphes

Si T est un sous-ensemble de sommets de G, on obtient G |T , le sous-graphe induit de G sur T , en


ne considérant que les arêtes G qui ont leurs deux extrémités dans T . Autrement dit,

G |T := (T, B), avec B = { {x, y} ∈ A | x, y ∈ T }. (3.5)

Plus généralement, le graphe (T, B) est un sous-graphe de (S, A), simplement si T ⊆ S, et B ⊆ A.


3.4. CHEMIN DANS UN GRAPHE. 69

Boucles

On veut parfois permettre à des graphes simples d’avoir des boucles. Ce sont des arêtes dont les
deux extrémités coı̈ncident, et donc de la forme {x}, avec x un sommet de G. Autrement dit,
l’ensemble A des arêtes est un sous-ensemble de P 1 [S] ∪ P 2 [S], avec

P[S] := {{x} | x ∈ S}.

La  bonne  façon d’adapter la notion de degré d’un sommet à ce nouveau contexte est de poser

|{α ∈ A | α = {x, y} et x 6= y}| + 2 si {x} ∈ A,
deg(x) := (3.6)
|{α ∈ A | α = {x, y} et x 6= y}| sinon.

On compte donc 2 comme contribution au degré d’un sommet avec boucle.

3.4 Chemin dans un graphe.

Plusieurs problèmes classiques de la théorie des graphes font intervenir la notion de  chemin  dans
un graphe. Intuitivement, on se promène dans le graphe, d’un sommet à l’autre, en passant par des
arêtes. Cependant pour la clarté de l’exposé, et pour simplifier les arguments, il vaut la peine d’en
donner une définition plus rigoureuse. Un chemin

γ = (x0 , x1 , x2 , . . . , xn ),

dans un graphe G = (S, A) est une suite de sommets, xi dans S, pour laquelle chaque paire
{xi , xi+1 } est une arête de G, c.-à-d. : {xi , xi+1 } ∈ A.
On dit que s(γ) := x0 est la source (ou le début) du chemin, et que b(γ) := xn en est le but (ou la
fin). On dit aussi que le chemin γ va de x0 à xn . Chaque paire {xi , xi+1 } est un pas du chemin, et
la longueur `(γ) du chemin est égale à n, c’est-à-dire que la longueur est le nombre de pas dans le
chemin. Dans le graphe de la Figure 3.1, on a le chemin de longueur 6

(a, d, c, e, a, b, d),

de source a et de but d. La suite (a, d, e, b) n’est pas un chemin dans le même graphe, parce que
la paire {d, e} n’est pas une arête du graphe. Pour chaque sommet x d’un graphe, on a le chemin
Idx := (x), de longueur 0, qui va de x à x. C’est le chemin vide en x.
70 CHAPITRE 3. GRAPHES SIMPLES

3.5 Opérations sur les chemins

Pour deux chemins γ1 et γ2 , avec le but de γ1 égal à la source de γ2 , on construit le composé γ1 · γ2 ,


simplement en mettant γ1 et γ2 bout à bout. On dit aussi que γ1 et γ2 sont composables. Plus
précisément, on suppose que

γ1 = (x0 , x1 , . . . , xn ), et γ2 = (y0 , x1 , . . . , yk ), avec b(γ1 ) = s(γ2 ),

c’est-à-dire que xn = y0 ; et alors on pose

γ1 · γ2 = (x0 , x1 , . . . , xn , y1 , . . . , yk ). (3.7)

Comme xn = y0 , c’est bien un chemin, et il est de longueur n + k. La composition de chemin est


associative, c’est-à-dire que pour des chemins γ1 , γ2 et γ3 , avec b(γ1 ) = s(γ2 ) et b(γ2 ) = s(γ3 ), on a

γ1 · (γ2 · γ3 ) = (γ1 · γ2 ) · γ3 , (3.8)

Le chemin Idx joue le rôle d’élément neutre à gauche (resp. à droite) pour la multiplication avec γ,
si s(γ) = x (resp. b(γ) = x), c.-à-d. :

Idx · γ = γ (resp. γ · Idx = γ).

Puisque les arêtes sont sans orientation, on peut  retourner  un chemin allant de x à y pour obtenir
un chemin allant de y à x. Plus précisément, le retourné ← − d’un chemin γ = (x , . . . , x
γ 0 n−1 , xn )
est le chemin
←− := (x , x
γ n n−1 , . . . , x0 ).

Bien entendu, on a
s(←
−) = b(γ),
γ et b(←
−) = s(γ).
γ
On montre aussi facilement que

γ1−·−γ−2 = ←
γ−2 · ←
γ−1 . (3.9)
Si x = s(γ) et y = b(γ), on dénote aussi le fait qu’on a un chemin γ de x à y par :
γ
x y

La composition de chemins peut alors se représenter comme suit :


z
γ1 · γ2
γ2

x y (3.10)
γ1
3.6. CYCLES HAMILTONIENS 71

3.6 Cycles hamiltoniens

Dans un graphe, un cycle élémentaire est un chemin,


de longueur au moins deux, dont la source coı̈ncide
avec le but, et dont tous les autres sommets sont dis-
tincts. Autrement dit, on passe une seule fois par chaque
sommet du cycle, sauf pour ce qui est du point de
départ sur lequel on revient une seule fois en toute fin.
Un cycle est un chemin qui revient à son point de
départ, et qui contient au moins un cycle élémentaire.
On dit qu’on a un cycle hamiltonien dans un graphe, s’il
existe un cycle élémentaire dans le graphe qui passe par tous
les sommets du graphe. On dit qu’un graphe est hamiltonien,
s’il admet un cycle hamiltonien.
W.R. Hamilton
La vérification de l’existence d’un cycle hamiltonien dans un (1805-1865)
graphe donné est un problème difficile à résoudre même pour un ordinateur. C’est un problème dit
NP-complet. Un joli théorème 3 affirme cependant que
Théorème 3.4 (Dirac 1952). Un graphe à n sommets (n ≥ 3) est hamiltonien si chacun de ses
sommets est de degré plus grand ou égal à n/2.

3.7 Composantes connexes

On dit qu’un graphe est connexe si et seulement s’il existe un


chemin qui relie tout sommet à tout autre. Les quatre derniers
graphes de (3.2) sont connexes, tandis que les quatre premiers
ne le sont pas. Autrement dit, un graphe connexe est  d’un
seul tenant .
On donne un sens plus précis à cette idée  d’un seul te-
nant  en introduisant la notion de composante connexe d’un
graphe. Pour ce faire, on considère sur les sommets d’un
graphe G = (S, A) la relation d’équivalence 4 pour laquelle
on a x ≡G y si et seulement s’il existe un chemin allant de x
à y dans G. La réflexivité de ≡G découle du fait que, pour tout
sommet x, on a le chemin Idx . La symétrie elle découle du Figure 3.8 – Un cycle hamiltonien.
fait qu’on peut retourner les chemins, et la transitivité vient
3. Dû au mathématicien danois G.A. Dirac (1925–1964). Ce n’est pas le fameux Dirac de la physique théorique.
4. Rappelons que cela signifie que c’est une relation réflexive, symétrique et transitive.
72 CHAPITRE 3. GRAPHES SIMPLES

de la possibilité de composer les chemins. Les composantes connexes du graphe sont les classes
d’équivalence selon la relation ≡G , et un graphe est donc connexe s’il n’a qu’une seule composante
connexe.
Un arbre est un graphe connexe sans cycle. Un sommet d’un arbre est une feuille, s’il n’a qu’un
seul voisin. On étudie les arbres plus en détail au Chapitre 4. Une forêt est un graphe sans cycles.
Pour l’instant, donnons au moins deux résultats concernant les arbres.
Lemme 3.5. Sur un ensemble de sommets S avec |S| ≥ 2, un arbre a toujours au moins 2 feuilles.

Preuve. Considérons un chemin γ = (x0 , . . . , xk ) dans l’arbre, qui soit de longueur maximum.
Cette longueur (= k) est au moins égale à 1, puisque le graphe est connexe avec au moins 2
sommets. On a forcément x0 6= xn , puisqu’il n’y a pas de cycles dans le graphe (c’est un arbre).
Si on avait deg(x0 ) > 1, ou deg(xk ) > 1, on pourrait prolonger le chemin γ. Par hypothèse γ est
de longueur maximale, donc on a forcément deg(x0 ) = 1 et deg(xk ) = 1, ce sont donc deux feuilles
distinctes. 
Proposition 3.6. Un graphe connexe, avec s sommets et a arêtes, est un arbre si et seulement si
s − a = 1.

Preuve.
(⇒)
On procède par récurrence sur s le nombre de sommets. Si s = 1, alors on a forcément
a = 0, et l’égalité (2) est vérifiée. Supposons que, pour tout arbre à s sommets, l’égalité
(2) soit vérifiée. Considérons alors un arbre (S, A) à s + 1 sommets (avec s > 1). Par la
proposition 3.6, l’arbre contient au moins une feuille x ∈ S. On enlève cette feuille et l’arête
la joignant au reste de l’arbre pour obtenir le graphe (S 0 , B). C’est donc que S 0 = S \ {x} et
B = A \ {{x, y}}, avec y est le seul voisin de x. Le graphe (S 0 , B) est un arbre, puisqu’il est
connexe et sans cycle, avec s sommets. Il vérifie donc (2). Mais alors (2) est aussi vrai pour
l’arbre (S, A), puisqu’on ajoute 1 au nombre de sommets, et 1 au nombre d’arêtes.
(⇐)
On procède par contradiction. Supposons qu’on ait un graphe connexe G = (S, A) satis-
faisant (2), mais qui ne soit pas un arbre. Autrement dit, on suppose que G contient au
moins un cycle. Lorsqu’on enlève une arête de ce cycle, le graphe reste connexe. On répète
cette étape tant que cela est possible, à chaque fois enlevant une arête. Le graphe résultant
est connexe et sans cycles. C’est donc un arbre, avec le même nombre de sommets que G.
Par l’argument ci-haut, l’égalité (2) est valable pour cet arbre. Mais ceci contredit notre
hypothèse, puisque le nombre d’arêtes de G est strictement plus grand que celui de l’arbre
(obtenu en enlevant un certain nombre, > 1, d’arêtes de G). On a donc forcément que G est
sans cycles.

3.7. COMPOSANTES CONNEXES 73

Une approche algorithmique permet de calculer simplement la composante connexe C(x) = CG (x)
dans laquelle se trouve un sommet donné x de G. On procède comme suit.
Algorithme 3.7 (Calcul de composante connexe). Si x n’a pas de voisins, c.-à-d. : V (x) = ∅,
alors CG (x) = {x}. Sinon, soit G0 := G |T le graphe induit de G sur l’ensemble T := S \ {x}. On
calcule récursivement les composantes connexes CG0 (y) de chaque voisin y ∈ V (x), de x dans G0 ,
qu’on regroupe avec {x} pour obtenir :
[
C(x) := {x} ∪ CG0 (y).
y∈V (x)

Dans un graphe connexe G, on a une notion de distance dG (x, y) entre sommets. On la définie
comme étant égale à la plus courte longueur d’un chemin entre x et y. En formule,

dG (x, y) := min{`(γ) | s(γ) = x, et b(γ) = y}. (3.11)

Il est facile de vérifier qu’on a les propriétés usuelles d’une distance :


(1) dG (x, y) = 0, si et seulement si x = y,
(2) dG (x, y) = dG (y, x), pour tout x, y ∈ S,
4
(3) dG (x, z) ≤ dG (x, y) + dG (y, z), pour tout x, y, z ∈ S.
L’excentricité d’un sommet d’un graphe connexe (pour que la dis-
3
tance ait un sens), est le nombre
4 3 4
e(x) := max d(x, y).
y∈S 3
2
Un centre (il peut y en avoir plusieurs) de g est un sommet d’ex-
centricité minimum, c’est-à-dire x tel que 3
3
e(x) = min e(y).
y∈S 4 4

Le rayon r(G) d’un graphe est l’excentricité d’un de ses centres. Excentricité et
On a donc centre (en jaune).
r(G) = min e(x). (3.12)
x∈S

Enfin, le diamètre δ(G), d’un graphe G, est la plus longue distance entre sommets de G :

δ(G) := max d(x, y). (3.13)


x,y∈S

Dans l’exemple ci-contre, le rayon est 2, et le diamètre 4. Attention, les notions de rayon et de
diamètre de graphes n’ont pas nécessairement les mêmes propriétés que celles de rayon et de
diamètre d’un cercle. Par exemple, le rayon du graphe complet Kn est 1, et son diamètre aussi,
puisque la distance entre deux sommets de Kn est toujours égale à 1.
74 CHAPITRE 3. GRAPHES SIMPLES

3.8 Plus court chemin

L’un des problèmes typiques de la théorie des graphes consiste à trouver le (ou les) chemin le plus
court joignant deux sommets donnés, dans un graphe G = (S, A). Soulignons que ce le graphe n’est
pas connexe, il y aura des paires de sommets entre lesquels il n’y aura aucun chemin. Il y a de
très nombreuses applications des mathématiques qui se traduisent sous cette forme, en adaptant
judicieusement la notion de  plus court chemin . Nous y reviendrons.
Pour l’instant, on entend par plus court chemin entre x et y, un chemin qui réalise la distance d(x, y)
(calculée dans la composante connexe commune à x et y). C’est donc dire que la longueur du chemin
est égale à d(x, y). Par définition de distance, un tel chemin existe, et il s’agit maintenant de le
trouver explicitement (ou de les trouver tous, s’il y en a plusieurs). Il y a plusieurs algorithmes pour
ce faire. Une des approches les plus simples peut être agréablement présentée de façon récursive.
Étant donnés deux sommets x et y de G, on procède comme suit pour calculer l’ensemble CG (x, y)
des chemins les plus courts de x à y dans G, c’est-à-dire

CG (x, y) := {γ | s(γ) = x, b(γ) = y, `(γ) = dG (x, y) }. (3.14)

Comme nous l’avons déjà souligné, il est possible que cet ensemble soit vide.
Algorithme 3.8 (Plus court chemin). Si x = y alors

CG (x, y) = {(x)}, .

Sinon, soit G0 := G |T le graphe induit de G sur l’ensemble T := S \ {x}. On calcule récursivement


les ensembles CG (z, y), pour chaque z dans le voisinage VG (x). Si CG (z, y) est non vide, on a une
distance dG (z, y). Soit d0 le minimum de ces distances, à savoir que

d0 := min{ dG (z, y) | z voisin de x et CG (z, y) 6= ∅}.

Lorsque au moins un des CG (z, y) est non vide, alors l’ensemble CG (x, y) est alors facilement obtenu
comme
CG (x, y) := { (x, z) · γ | γ ∈ CG (z, y), dG (z, y) = d0 , z voisin de x },
et on a dG (x, y) = d0 + 1. Sinon on a
CG (x, y) := ∅.

3.9 Cycles eulériens

On dit qu’on a un cycle eulérien dans G, s’il existe un cycle dans G qui emprunte chaque arête une
et une seule fois. Bien entendu, pour que cela soit possible G dois être connexe. Euler à montré que
3.9. CYCLES EULÉRIENS 75


⤴ ⤵


⤵ ⤴




⤴ ⤴ ⤵




⤴ ⤴ ⤴


⤴ ⤴



⤵ ⤵ ⤵ ⤵

Figure 3.9 – Un cycle eulérien

Théorème 3.9 (Euler). Un graphe G admet un cycle eulérien si et seulement G est connexe, et
tous les sommets de G sont de degré pair.

Preuve. Supposons que le graphe G admet un cycle eulérien γ. Pour chaque sommet x, le cycle γ
contient les deg(x) arêtes issues de x. Comme γ arrive en x autant de fois qu’il en part (n’utilisant
ces arêtes qu’une et une seule fois), deg(x) doit être pair.
Pour montrer la réciproque, on suppose donc que tous les sommets de G = (S, A) sont de degré
pair, et que G est connexe. Débutant avec un sommet x0 fixé (n’importe lequel), on chemine dans
G aussi longtemps que possible, choisissant à chaque étape une arête qui n’a pas déjà été utilisée.
Soit donc γ1 le chemin ainsi obtenu. Quel que soit les choix faits en cour de route, le chemin γ1
doit être un cycle se terminant en x0 . Autrement, le sommet final de γ1 devrait être un sommet de
degré impair (on y arrive une fois de plus que le nombre de passages, chacun avec son arrivée et son
départ). Si le cycle passe par toutes les arêtes du graphe, alors on a terminé. Sinon, on considère le
graphe G0 = (S, A0 ), où

A0 := A \ {{x, y} | {x, y} apparaı̂t dans γ}.

Autrement dit, c’est le graphe obtenu de G en enlevant toutes les arêtes utilisées dans le cycle γ.
Par hypothèse A0 est non vide, et on désigne par d0 (x) le degré des sommets dans G0 . Tous les
sommets de G0 sont de degré pair, et il y en a au moins un x0 qui se situe sur γ, avec d0 (x0 ) > 0.
Attention, G0 n’est peut-être pas connexe. On peut cependant construire un cycle γ 0 , partant de
x0 , dans la composante connexe de G0 contenant x0 . On peut rallonger γ = (x0 , . . . , x0 , . . . , x0 ),
en remplaçant x0 par γ 0 = (x0 , . . . , x0 ), pour obtenir le nouveau cycle plus long :

(x0 , . . . , x0 , . . . , x0 , . . . , x0 ).
76 CHAPITRE 3. GRAPHES SIMPLES

Autrement dit, on greffe un cycle en x0 . On répète ce processus autant que possible. Après un
nombre fini d’étapes (puisque A est fini), le cycle obtenu doit contenir toutes les arêtes dans A, et
on a obtenu le cycle eulérien cherché. 
3
Une variante facile du théorème consiste à considérer les chemins
a c
eulérien (auquel cas on accepte d’avoir une source différente du b
but), qui est un chemin qui passe par toutes les arêtes. Dans ce
2 4
cas, la condition est plutôt qu’il doit y avoir exactement deux som-
mets de degré impair (qui feront office de source et de but du che- e d
f
min eulérien). Une extension différente du Théorème 3.9, consiste
à considérer le cas des  multigraphes , c’est-à-dire qu’il peut y 1
avoir plusieurs arêtes entre deux sommets. C’est ce cas qui a permis Figure 3.10 – Multigraphe
à Euler de montrer que le problème des ponts de Konigsberg n’a des ponts de Konigsberg.
pas de solution.
On peut transformer la preuve du Théorème 3.9 en un algorithme récursif qui trouve un chemin
eulérien dans un (multi-)graphe connexe ayant tous ses sommets de degré pair, ou exactement deux
sommets de degré impair. C’est ce qu’a proposé M. Fleury (voir [12]) en 1883, à partir de remarques
de M. Lucas. Dans le cas de la recherche d’un cycle eulérien, n’importe quel sommet peut servir de
point de départ, de la façon décrite ci-dessous. Cependant, dans le cas où G contient exactement
deux sommets de degré impairs, on doit forcément choisir l’un de ces deux sommets de degré impair
comme point de départ.

3.10 Multigraphe

Pour introduire la notion de multigraphe, considérons S un 2


ensemble fini de sommets, et A un ensemble fini d’étiquettes. a c
Un multigraphe est alors un triplet M = (S, A, α), où b d
α : A → P 2 [S] est une fonction qui détermine comment les 1 l 3
k
éléments de A étiquettes (donne des noms à) des arêtes. On m
6
utilise le terme multigraphe parce que la  même  arête peut j o f
i n e
apparaı̂tre plusieurs fois, avec des étiquettes différentes. La
Figure 3.11 illustre cette notion. Il est courant d’omettre les g
étiquettes sur les arêtes dans le dessin. Les notions et résultats 5 4
h
concernant les chemins dans un graphe simple, s’adaptent fa-
cilement au cas des multigraphes. En particulier, le théorème Figure 3.11 – Un multigraphe.
d’Euler s’applique aussi. Pour voir (avec Euler) que le problème des ponts de Konigsberg n’a pas de
solution, on le reformule en terme du multigraphe obtenu en plaçant un sommet sur chaque berge
et chaque ı̂le, avec une arête entre deux sommets pour chaque pont. On obtient alors le multigraphe
3.11. ISOMORPHISME DE GRAPHES 77

de la Figure 3.10. Comme les 4 sommets sont de degré impair, il n’y a pas de chemin eulérien, et
le problème n’a donc pas de solution.

3.11 Isomorphisme de graphes

Comme pour toutes les notions mathématiques, il est essentiel de savoir comparer des graphes
entre eux. Intuitivement, ils ont la même  forme  si on peut renommer les sommets de l’un pour
obtenir l’autre. Plus précisément, pour deux graphes G = (S, A) et G0 = (T, B), on dit qu’on a
isomorphisme de graphe

f : G −→ G0 , (3.15)

si on a une bijection f : S −→ T , telle que

{x, y} ∈ A ssi {f (x), f (y)} ∈ B. (3.16)

Le composé d’isomorphismes de graphes est un isomorphisme de graphe, ainsi que l’inverse d’un

isomorphisme. Un automorphisme d’un graphe G est un isomorphisme f : G −→ G. En vertu des
observations précédentes, l’ensemble des automorphismes d’un graphe forme un groupe. Certains
graphes, les graphes de Cayley, sont en fait construits à partir d’un groupe, et ce groupe apparaı̂t
alors comme groupe d’automorphismes de son graphe.
En général il est difficile de vérifier que deux graphes donnés sont isomorphes, c’est-à-dire qu’on ne
connaı̂t pas d’algorithme qui réponde à la question en temps polynomial. Cependant, on connaı̂t des
algorithmes efficaces pour certaines familles de graphes étudiés dans la suite de ces notes comme :
les arbres, ou les graphes planaires.
La notion suivante permet de détecter facilement (mais pas à coup sûr) que des graphes ne sont
pas isomorphes. La suite de degrés d’un graphe G = (S, A) à n sommets est la liste

LG := (s0 , s1 , . . . , sn−1 ), (3.17)

où si est le nombre de sommets de degré i dans le graphe. Bien entendu, on a

n = s0 + s1 + . . . + sn−1 . (3.18)

Il est clair que

Proposition 3.10. Si deux graphes G = (S, A) et G0 = (T, B) sont isomorphes, alors leur suite de
degré sont forcément égales, c’est-à-dire que LG = LG0 .
78 CHAPITRE 3. GRAPHES SIMPLES

3.12 Matrice d’adjacence

Pour simplifier la présentation du sujet de cette section, nous allons supposer que les graphes
G = (S, A) ont S = [n] comme ensemble de sommets. Pour un tel graphe, on considère la matrice
n×n (
1 si {i, j} ∈ A,
AG := (aij )1≤i,j≤n , avec aij = (3.19)
0 sinon.
dite d’adjacence du graphe 5 G. Le coefficient aij de A = AG prend donc la valeur 1 ou 0 selon qu’il
y a ou pas d’arête entre les sommets i et j. On présente à la Figure 3.12 un graphe et sa matrice
d’adjacence. La matrice d’adjacence d’un graphe est symétrique, c’est-à-dire que aij = aji .

1 4
 
0 1 0 1 1
1 0 0 1 0
 
0 0 0 1 1
 
1 1 1 0 0
1 0 1 0 0
5 3
Figure 3.12 – Un graphe et sa matrice d’adjacence

Deux graphes G et G0 sur [n] sont isomorphes si et seulement si leurs matrices d’adjacences sont
conjuguées. C’est-à-dire qu’il existe un matrice de permutation 6 P , avec

AG0 = P AG P −1 . (3.20)

On utilise efficacement la matrice d’adjacence d’un graphe pour énumérer le nombre de chemins
de longueur k allant d’un sommet i à un sommet j. En effet, ce nombre apparaı̂t tout simplement
comme coefficient i, j de la matrice AkG . On le montre facilement par récurrence (voir Exercice 3.17).
Par exemple, les nombres de chemins de longueur 4 entre les divers sommets de G sont donnés par
la matrice  
15 8 11 7 3
8 8 6 8 6
4
 
AG =  11 6 9 3 1 .

 7 8 3 15 11
3 6 1 11 9
5. C’est aussi la fonction caractéristique de l’ensemble A.
6. Une matrice de 0 et de 1, avec un seul 1 par ligne, et un seul 1 par colonne.
3.13. CONTRACTION D’ARÊTES ET MINEURS(∗) 79

La matrice d’adjacence AM d’un multigraphe M = ([n], A, α) décrit la multiplicité des arêtes,


c’est-à-dire le nombre de fois qu’on l’associe à une étiquète dans A. Autrement dit, on considère la
matrice AM = (aij )1≤i,j≤n , avec

aij := |{x ∈ A | α(x) = {i, j} }|.

3.13 Contraction d’arêtes et mineurs(∗)

Une opération importante sur un graphe G = (S, A) consiste à contracter une arête {x, y}. Dans
le graphe résultant G0 = (S 0 , A0 ), les deux sommets x et y sont identifiés, et le sommet résultant a
comme voisins tous ceux de x ainsi que tous ceux de y. Plus précisément, donnons 7 le nom z au
sommet remplaçant x et y, c’est-à-dire que

S 0 := (S \ {x, y}) + {z}, (On remplace x et y par z.) (3.21)

On utilise ici la somme disjointe pour souligner que z n’est pas déjà dans S. Pour les arêtes de G0 ,
on a alors 
u 6= z, v 6= z, et {u, v} ∈ A, ou
0
{u, v} ∈ A ssi (3.22)
u = z, et ({x, v} ∈ A ou {y, v} ∈ A).

Le processus est illustré à la Figure 3.13. En général, on procède à une suite de contraction sur

x y z

Figure 3.13 – Contraction de l’arête {x, y}.

un graphe. La situation est souvent celle pour laquelle on contracte toute une chaı̂ne, c’est-à-dire
qu’on a une suite de sommets
x1 , x2 , . . . , xk−1 , xk ,
7. Il est peut-être même plus élégant de supposer que tous les sommets sont étiquetés par des ensembles, et de
poser z = x ∪ y. Voir l’exercice 3.22.
80 CHAPITRE 3. GRAPHES SIMPLES

dans le graphe pour lesquels on a des arêtes {xi , xi+1 }, mais autres arêtes dans le graphe se terminant
en l’un des xi pour 2 ≤ i ≤ k − 1. On peut alors tout contracter d’un bloc, pour remplacer la chaı̂ne
par une seule arête {x1 , xk }.
L’opération de contraction permet de définir la notion de mineur d’un graphe G = (S, A). On dit
qu’un graphe M est un mineur de G si on peut obtenir M par une suite de contraction à partir
d’un sous-graphe de G. Autrement dit, le graphe M s’obtient de G par une succession d’opérations
choisies parmi les suivantes :
(1) suppression d’un sommet, c’est-à-dire que, pour x ∈ S, on considère le graphe G0 = (S 0 , A0 )
avec S 0 := S \ {x}, et A0 = {{u, v} ∈ A | u 6= x, et v 6= x}.
(2) suppression d’une arête, c’est-à-dire que, pour {x, y} ∈ A, on considère le graphe G0 = (S 0 , A0 )
avec S 0 := S, et A0 = A \ {{x, y}}.
(2) contraction d’une arête.
Cette notion, introduite par Klaus Wagner (1910–2000), a eu un impact considérable sur la théorie
des graphes. Elle a mené au maintenant fameux théorème de Robertson-Seymour 8 énoncé ci-
dessous. Pour le formuler, rappelons qu’on dit qu’une famille F de graphe est dite mineur-fermée
si elle contient tout mineur d’un graphe qui lui appartient. En formule, on demande que F soit
telle que
Si (G ∈ F et M mineur de G) alors M ∈ F.
On ne considère ici que des classes qui sont aussi fermées par isomorphisme. Selon le théorème
de Robertson-Seymour, l’ensemble F, des graphes qui ne sont pas dans une telle classe F, est
caractérisé par un ensemble fini GF (à isomorphisme près) de graphes dit d’obstruction, dont au
moins un doit apparaı̂tre comme mineur de n’importe quel graphe G dans F. Autrement dit, on a

G∈F ssi ∃M ∈ GF (M mineur de G). (3.23)

La réciproque de cet énoncé donne la caractérisation suivante pour l’appartenance à la famille F :

G∈F ssi ∀M ∈ GF (M n’apparaı̂t pas comme mineur de G). (3.24)

On dit donc des éléments de GF que ce sont des mineurs-exclus. Un exemple classique donne une
caractérisation par mineur exclu pour la notion de graphes planaires discutés à la section suivante.

8. Neil Robertson, Ohio State University, et Paul Seymour, Princeton University.


3.14. GRAPHES PLANAIRES 81

3.14 Graphes planaires

On dit qu’un graphe (ou multigraphe avec boucle) est planaire si on peut le  plonger  dans le
plan (ou sur la sphère 9 ) sans qu’il y ait croisement entre les arêtes. Plus techniquement, on associe
d’abord à chaque sommet x du graphe un point Px de R2 . Puis, pour chaque arête {x, y}, on se
donne une courbe simple (une fonction continue)

γxy := [0, 1] → R2 , avec γxy (0) = Px , et γxy (1) = Py ,

qui est injective (elle ne se recoupe pas). On dit alors qu’on a un plongement du graphe dans le
plan, et que le graphe est planaire, si et seulement s’il est possible de choisir le tout pour que les
courbes γxy soient sans intersections entre elles en dehors de leurs extrémités, c.-à-d. :

γxy ∩ γuv = {x, y} ∩ {u, v}, lorsque {x, y} =


6 {u, v}. (3.25)

Il est facile de  voir  que le graphe de la Figure 3.12 est planaire, puisqu’il est dessiné de façon
à satisfaire la condition (3.25). Il est un peu plus difficile de constater qu’il n’y a aucune façon de
dessiner le graphe de Petersen pour que (3.25) soit satisfait. Dans ce type de situation, on dit que
le graphe n’est pas planaire.

3.15 Cartes

Une carte (mathématique) est simplement un plongement d’un multigraphe planaire G = (S, A),
avec boucles, dans la sphère S, à homéomorphisme près 10 . On considère donc que deux cartes sont
équivalentes si on peut déformer l’une dans l’autre par une déformation continue de la sphère. Le
même multigraphe peut donner lieu à plusieurs cartes différentes, c’est-à-dire que l’on ne peut pas
passer de l’une à l’autre par une déformation continue (voir Exercice ??). Pour une carte, on peut
considérer la notion de face. C’est une région connexe ouverte 11 de la sphère, délimitée par des
arêtes (qui forment un cycle). Plus précisément, les faces sont les régions connexes du sous-ensemble
de points de la sphère
{P ∈ S | P = γxy (t), {x, y} ∈ A, 0 ≤ t ≤ 1}.
Par exemple, lorsqu’on associe une carte à un arbre on n’a qu’une seule face. Lorsqu’on parle d’une
carte, obtenue par plongement de G, on identifie un sommet x avec le point Px , et l’arête {x, y}
avec la courbe γxy . Autrement dit, x est le nom du point Px . La figure 3.12 (qu’on imagine dessinée
sur une grande sphère) donne une carte avec 5 sommets, 6 arêtes, et 3 faces (incluant la face
9. Ce qui est en fait totalement équivalent.
10. Ceci signifie simplement qu’on peut déformer la figure obtenue de façon continue.
11. Rappelons que c’est un ouvert dans lequel il est possible de passer d’un point à un autre par une courbe continue
entièrement contenue dans l’ouvert. Pour plus de détails, voir un bon bouquin de topologie.
82 CHAPITRE 3. GRAPHES SIMPLES

externe). Dans la Figure 3.5, on a (approximativement) dessiné le permutoèdre sur la sphère. La


carte correspondante contient 24 sommets, 36 arêtes et 14 faces (6 carrés, et 8 hexagones).
On dit qu’une arête {x, y} est incident à une face F si elle se trouve sur son bord. Plus technique-
ment, on a que
{γxy (t) | 0 ≤ t ≤ 1} ⊆ F .

C’est-à-dire que la courbe est contenue dans la fermeture de F . Dans ce cas, on dit aussi que la
face F est incidente à l’arête {x, y}. De façon tout à fait semblable, on a la relation d’incidence
entre sommets et arêtes, et entre sommets et faces. Un isthme est une arête qui n’est incidente
qu’à une face. Toute autre arête est incidente à exactement deux faces. Les déformations continues
d’une carte préservent toutes ces relations d’incidence. En particulier, on montre à la Figure ??
deux cartes différentes associées au même graphe. Leur différence est mise en évidence par le fait
qu’elles donnent lieu à des relations d’incidence différentes.
Lorsqu’on efface des arêtes d’une carte (ou des sommets isolés) on obtient encore une carte. C’est
une sous-carte de la carte. Euler a trouvé une très jolie relation concernant les cartes.

Théorème 3.11 (Euler). Pour une carte connexe avec s sommets, a arêtes, et f faces, on a
toujours
s − a + f = 2. (3.26)

Preuve. On procède par récurrence sur a. Si a=0, comme la carte est connexe, on doit avoir
s = f = 1, et la relation est vérifiée. Par hypothèse de récurrence, supposons maintenant que la
relation d’Euler est vérifiée pour toute carte connexe ayant au plus a arêtes. On considère une carte
connexe C 0 ayant a0 := a + 1 arêtes (s0 sommets, et f 0 faces). Dans un premier temps, on suppose
qu’on peut effacer une des arêtes de cette carte, tout en conservant le fait d’être connexe. La carte
résultante C satisfait les conditions de l’hypothèse de récurrence, puisqu’elle contient a arêtes. Le
nombre de sommets de C étant s = s0 , on a la relation d’Euler pour cette carte : s − a + f = 2, avec
f son nombre de faces. Deux cas se présentent, et dans les deux cas nous allons voir que le nombre
de faces de la nouvelle carte est f := f 0 − 1. Puisqu’alors

s0 − a0 + f 0 = s − (a + 1) + (f + 1) = s − a + f = 2,

on aura montré (dans cette situation) que la relation d’Euler tient pour C 0 .
Pour vérifier que le nombre de faces de C est un de moins que le nombre de faces de C 0 , on raisonne
comme suit. Une première possibilité est que l’arête enlevée est une boucle, et alors on perd une face
en enlevant l’arête. Autrement l’arête enlevée se situe forcément entre deux faces, sinon le graphe
résultant en l’enlevant ne serait plus connexe. Ces deux faces se joignent pour n’en former qu’une
seule dans la carte C, et nous avons fini de discuter le cas où on peut obtenir une carte connexe en
enlevant une arête.
3.15. CARTES 83

Ne reste plus qu’à étudier la situation où il est impossible d’enlever une arête sans déconnecter
la carte. La seule possibilité est que le graphe sous-jacent est un arbre, et on a une seule face. La
relation d’Euler se déduit alors de la proposition 3.6. 

On associe à une carte C la carte duale C ∗ obtenue de la façon suivante. Les sommets de C ∗ sont
les faces de C, on a une arête entre deux sommets de C ∗ pour chaque arête entre les deux faces
correspondantes de C. Attention, on obtient parfois plusieurs arêtes entre deux sommets. On a
donc une carte qui correspond à plonger un mutigraphe dans la sphère, avec des boucles si la carte
comporte des isthmes. Chaque face du dual correspond à un sommet x de C. Elle est délimitée par
les arêtes de C ∗ obtenues à partir d’arêtes C, qui sont adjacentes à x. Il s’ensuit que le double dual
redonne la carte originale :
(C ∗ )∗ = C.

Les propositions suivantes permettent de montrer facilement que certains graphes ne sont pas pla-
naires, en partie en exploitant la relation d’Euler. On débute par souligner qu’on peut directement
 calculer le nombre de face d’un graphe planaire connexe sans vraiment le dessiner, puisque toute

carte correspondant à un dessin de ce graphe satisfait la relation d’Euler. Pour tout graphe, on peut
donc calculer
f := a + 2 − s.
Proposition 3.12. Pour tout graphe simple planaire connexe ayant s ≥ 3 sommet et a arêtes, on
a les inégalités
3 f ≤ 2 a, et a ≤ 3 s − 6. (3.27)

Preuve. La première étape est de montrer qu’on peut se restreindre aux graphes sans isthmes,
pour montrer la première inégalité. En effet, pour un sous-graphe obtenu en enlevant un isthme,
le nombre de face est conservé tout en réduisant le nombre d’arêtes. Cependant on peut perdre
la connexité. On montre d’abord que fait la première inégalité est valable pour les graphes simple
planaire sans isthmes, sans condition de connexité. En éliminant les situations extrêmes, on vérifie
facilement qu’on peut supposer qu’il y a au moins deux faces, et au moins trois arêtes.
Pour une arête α et une face F , on pose m(α, F ) = 1 si α est incidente à F . Sinon, on pose
m(α, F ) = 0. Les sommes
X X
m(α, F ), et m(α, F ),
F face α arête

donnent donc respectivement le nombre de faces incidentes à α et le nombre d’arêtes incidentes à


F . Comme on n’a pas d’isthmes, la première somme est toujours égale à 2. De plus, comme une
face est toujours délimitée par au moins 3 arêtes, on a l’inégalité
X
m(α, F ) ≥ 3.
α arête
84 CHAPITRE 3. GRAPHES SIMPLES

On calcule donc que


X X X X
2a = m(α, F ) = m(α, F ) ≥ 3 f.
α arête F face F face α arête

On déduit alors la deuxième inégalité à partir de la relation d’Euler par simple calcul, puisqu’on a
2a
2=s−a+f ≤s−a+ .
3
En isolant a on trouve bien l’inégalité désirée. 

Pour le graphe complet K5 par exemple, on a 10 arêtes et 5 sommets, et l’inégalité n’est pas
satisfaite. Donc K5 n’est pas planaire. Cependant, le théorème n’est pas une caractérisation des
graphes planaires. Ainsi, le graphe biparti complet K3,3 (avec 6 sommets et 9 arêtes) n’est pas
planaire, mais il satisfait l’inégalité (3.27). Pour le voir, on adapte un peu la preuve de la proposition
comme suit. La remarque clé est que les faces d’une carte qu’on aurait obtenue par un plongement
hypothétique de K3,3 , devraient forcément être délimitées par au moins 4 arêtes. En effet, parce que
K3,3 est biparti, on doit alterner entre sommets d’une des parties et sommets de l’autre lorsqu’on
tourne autour d’une face. Il s’ensuit qu’on a
X X X X
2a = m(α, F ) = m(α, F ) ≥ 4 f.
α arête F face F face α arête

En remplaçant dans la relation d’Euler, on trouve que a ≤ 2 s − 4. Mais cette relation n’est pas
vérifiée pour K3,3 , puisque a = 9 et s = 6. On conclut donc que K3,3 n’est pas planaire.
Il peut sembler difficile de savoir reconnaı̂tre en général les graphes planaires des graphes non-
planaires, mais on a en fait la caractérisation très simple suivante.

Théorème 3.13 (Wagner). Un graphe est planaire si et seulement s’il ne contient comme mineur,
ni un graphe K3,3 , ni un graphe K5 .

Il s’ensuit qu’on peut mettre au point un algorithme assez efficace pour vérifier si un graphe est
planaire ou pas, en vérifiant si le graphe contient ou non l’un des deux mineurs exclus. Cependant,
cet algorithme ne donne aucune indication sur la façon de  dessiner  le graphe de façon planaire,
même s’il affirme que cela est possible. En fait, il y a généralement plusieurs façons de dessiner un
graphe qu’on sait être planaire, et aucune ne s’impose comme  la  meilleure façon.
3.16. COLORATION DE GRAPHES 85

3.16 Coloration de graphes

On dit qu’on a une (bonne) coloration des sommets d’un graphe


G = (S, A), si on une fonction f : S → C des sommets du graphe à
valeur dans un ensemble C de  couleurs , telles que deux sommets
adjacents n’ont jamais la même couleur. C’est donc dire que
f (x) 6= f (y), si {x, y} ∈ A. (3.28)
On dit qu’un graphe est k-coloriable s’il admet une coloration avec
Figure 3.14 – Coloration du
un ensemble de k couleurs. La Figure 3.14 donne une 3-coloration
graphe de Petersen.
du graphe de Petersen. Le nombre chromatique χ(G) d’un graphe
G est le plus petit entier k pour lequel G admette une k-coloration. Par examen et en exploitant
le fait que puisque chaque sommet a 3 voisins, on constate que le graphe de Petersen n’est pas
2-coloriable. Son nombre chromatique est donc 3.

Figure 3.15 – Au moins 4 couleurs.

Le problème de savoir quel est le nombre minimal de couleurs nécessaire


pour colorer un graphe planaire a d’abord été posé par Francis Guthrie
en 1852. Il a constaté (sans pouvoir le montrer) que 4 couleurs semblait
toujours être un nombre suffisant, et que 3 ne l’était pas (voir l’exemple
de la Figure 3.15). D’autre part, il est assez facile de monter que 5 cou-
leurs suffisent. Sa conjecture (connue sous le nom de conjecture des quatre
couleurs) est que tout graphe planaire est 4-coloriable. Jusqu’en 1976, la
conjecture des quatre couleurs est restée ouverte. La première preuve,
qui fut donnée par Appel et Haken, a nécessité un calcul complexe par
ordinateur pour étudier un grand nombre de cas particuliers. Pour la com-
munauté mathématique, cela fut le premier exemple d’une telle situation,
avec une preuve en partie basée sur un calcul par ordinateur. Francis Guthrie
(1831–1899)
On peut calculer le nombre de k-colorations possibles pour un graphe G
en posant t = k dans le polynôme 12 chromatique PG (t) de G, qui se définie comme suit. Tout
12. Nous allons voir ci-dessous pourquoi c’est un polynôme.
86 CHAPITRE 3. GRAPHES SIMPLES

d’abord, il est clair que k s est le nombre de k-colorations possibles pour un graphe discret à s
sommets, puisqu’on peut choisir librement les couleurs d’un sommet. Un graphe discret à s sommet
admet donc ts comme polynôme chromatique. Dans les autres cas, on calcule récursivement le
polynôme PG (t), au moyen de l’équation

PG (t) = PG0 (t) − PG00 (t), (3.29)

où G0 est le graphe obtenu par suppression d’une arête {x, y}, et G00 est obtenu par contraction de
cette même arête. On justifie cette équation par le raisonnement suivant. Pour calculer le nombre
PG (k) de k-colorations d’un graphe G, on calcule d’abord (récursivement) le nombre PG0 (k) de k-
coloration du graphe G0 obtenu en enlevant l’arête {x, y}. Ce nombre est plus grand que le nombre
de k-colorations de G, puisque les sommets x et y peuvent être de même couleur. Hors, le nombre
de k-colorations de G, pour lesquelles x et y sont de la même couleur, est clairement égal au nombre
de k-colorations de G00 (obtenu par contracte de {x, y}), avec comme couleur de x et de y la couleur
du sommet obtenu en contractant l’arête {x, y}. On a donc bien (3.29). Par récurrence, on peut
supposer que PG0 (t) et PG00 (t) sont des polynômes, respectivement de degré s et s − 1, donc PG (t)
est un polynôme de degré s. On a la proposition suivante.

Proposition 3.14. Le polynôme chromatique d’un graphe à s sommets, a arêtes et c composantes


connexes est un polynôme de degré s, tel que
(1) Le coefficient de ts est 1,
(2) Le coefficient de ts−1 est −a,
(3) Le coefficient de ti est 0, si i < c,
(4) Le coefficient de tc est non-nul,
(5) Les signes des coefficients de PG (t) alternent,
(6) Si G1 , G2 , . . ., Gc sont les composantes connexes de G, alors

PG (t) = PG1 (t)PG2 (t) · · · PGc (t).

Preuve. On vérifie facilement (1) par récurrence sur le nombre d’arêtes via l’équation (3.29), avec
comme cas initial la situation du graphe discret (qui n’a aucune arête). La propriété (6) découle de
ce que le nombre de k-colorations de G, ayant les composantes connexes Gi , est égal au produit

PG1 (k)PG2 (k) · · · PGc (k),

puisque le choix des couleurs de sommets de composantes distinctes peut se faire de façon indépen-
dante. On montre aussi (2) par récurrence sur le nombre d’arêtes, puisque le nombre d’arêtes de
G0 est a − 1, et que PG00 (t) est de degré s − 1 avec coefficient dominant égal à 1. On remarque
que le polynôme chromatique n’a jamais de terme constant, puisqu’il ni a aucune coloration avec
0 couleurs. Ceci permet de déduire (3) de (6), puisque chaque P (Gi , t) est multiple de t. Pour
3.16. COLORATION DE GRAPHES 87

montrer (5), encore une fois par récurrence, on observe que les termes de même degré de PG0 (t)
et de −PG00 (t) ont même signe. D’autre part, (4) découle du cas c = 1 (c.-à-d. : G est connexe)
puisque chaque P (Gi , t) est multiple de t. Pour voir que le coefficient de t est non nul dans le cas
où G est connexe, on utilise (5) et la récurrence en observant que G00 est connexe si G l’est. 

Bien entendu, le nombre chromatique du graphe apparaı̂t comme étant le plus petit entier k pour
lequel on a PG (k) 6= 0. Il s’ensuit que, si k = χ(G), alors on a

PG (t) = t (t − 1) · · · (t − (k − 1)) Q(t), (3.30)

où Q(t) est un certain polynôme. En effet, pour les entiers i entre 0 et k−1, le polynôme chromatique
doit s’annuler, ce qui force 3.30 (à ce propos, voir Appendice C.1).
On a les valeurs particulières suivantes (voir Exercice 3.18) :

PKn (t) = t (t − 1) (t − 1) . . . (t − (n − 1)). (3.31)


n−1
PG (t) = t (t − 1) , si G est un arbre. (3.32)
n n
PCn (t) = (t − 1) + (−1) (t − 1). (3.33)

Il s’ensuit que 2 est le nombre chromatique d’un arbre et d’un cycle, mais on peut aussi voir cela
directement facilement.
88 CHAPITRE 3. GRAPHES SIMPLES

3.17 Chemins dans le graphe Z × Z(∗)

Nous avons vu plusieurs notions liées à des chemins Z


dans des graphes finis. On a une situation tout à fait
analogue dans le contexte de graphes infinis. Nous n’al-
lons considérer ici que le cas Z×Z. Ce cas est important
pour la physique statistique, entre autres pour l’étude
de polymères, et de processus de diffusion. Une des si-
tuations encore mal comprises est celle des marches
auto-évitantes, c’est-à-dire les chemins qui ne se re-
coupent pas eux-mêmes. Ainsi, on ne sait même pas
compter le nombre de ces chemins ayant une longueur
Z
donnée, et plusieurs croient que c’est un problème très
difficile.
Le plan combinatoire Z × Z est l’ensemble des points Figure 3.16 – Un chemin dans Z × Z.
(x, y) à coordonnées entières du plan cartésien, avec des arêtes

{(x, y), (x + 1, y)}, et {(x, y), (x, y + 1)},

pour chaque sommet (x, y). Une partie de ce graphe orienté est illustré à la Figure 3.16.
Tout comme dans le cas des graphes finis, un chemin
γ dans le graphe Z × Z est donc une suite finie

γ = (p0 , p1 , . . . , pn ), (3.34)

de points pi = (xi , yj ) de Z × Z avec


(
pi ± (1, 0) (pas horizontal ), ou,
pi+1 =
pi ± (0, 1) (pas vertical ).

pour 0 ≤ i ≤ n − 1. Les notions liées aux chemins


dans le cas fini se transposent directement à ce nou-
veau contexte. On trouve à la Figure 3.16 un chemin
de longueur 30 allant de l’origine (0, 0) au point (6, 4).
Très souvent la source d’un chemin est le point (0, 0). Figure 3.17 – Un chemin aléatoire dans
Z × Z.
Comme un chemin γ (issu de (0, 0)) correspond à une
suite de pas verticaux et de pas horizontaux, on peut le coder sous la forme d’un  mot 13  w(γ)
sur l’alphabet {x, x, y, y}, avec x et x dénotant des pas horizontaux (respectivement vers la droite
13. Voir la section 6.2 pour plus de détails sur cette notion.
3.18. EXERCICES 89

et vers la gauche) ; et y et y dénotant des pas verticaux (respectivement vers le haut et vers le
bas). Par abus de langage, on désigne aussi par γ le mot associé au chemin γ. Ainsi le chemin de
la Figure 3.16 correspond au mot

xyxxyxxxxyyyxyyyyxxxxxyxxxxxxx.

Lorsqu’on regarde de loin un chemin très long dans Z×Z, on tend vers le  mouvement brownien .
Ceci est illustré à la Figure 3.17.
L’étude du mouvement brownien est importante dans plusieurs contextes physiques. Pour en savoir
un peu plus, voir le site :

http://fr.wikipedia.org/wiki/Mouvement_brownien

3.18 Exercices

3.1. En comptant de deux façons le nombre d’arêtes du graphe complet Kn+1 , montrer qu’on a
l’identité
n(n + 1)
1 + 2 + 3 + ... + n = . (3.35)
2
3.2. Combien le cube de dimension n a-t-il d’arêtes ?

3.3. Montrer que le graphe biparti complet Kn,k est toujours un sous-graphe du graphe biparti
Kn+r,k+s , quelque soit r et s dans N.

3.4. Montrer qu’on peut définir récursivement la distance entre deux sommets x et y d’un graphe
connexe G, en posant
(
0 si x = y,
dG (x, y) := (3.36)
1 + minz∈VG (x) dG (z, y) sinon.

3.5. Calculer, pour les graphes bipartis complets, les cubes, et les cycles,
a) l’excentricité de chaque sommet,
b) le rayon,
c) le diamètre.
Trouver aussi tous les centres de ces graphes.

3.6. Montrer que le diamètre d’un graphe connexe à n sommets est toujours plus petit ou égal à
n − 1.
90 CHAPITRE 3. GRAPHES SIMPLES

3.7. Prouver la variante du Théorème 3.9 correspondant au cas des multigraphes connexes avec
exactement deux sommets de degré impair.
3.8. Montrer que tout graphe à n sommet est isomorphe à un sous-graphe du graphe complet Kn .
3.9. Trouver deux graphes non isomorphes ayant la même suite de degré (0, 1, 3, 1, 0).
3.10. On dit qu’une suite (s0 , s1 , . . . , sn−1 ), avec si ∈ N et s0 + s1 + . . . + sn−1 = n, est graphique
si elle apparaı̂t comme suite de degrés d’un graphe G (à n sommets). Parmi les suites suivantes,
déterminer celles qui sont graphiques.
a) (0, 2, 1, 2, 0),
b) (0, 0, 2, 2),
c) (0, 1, 2, 3, . . . , n − 1).
3.11. On dit qu’un graphe est pair si tous ces sommets sont de degré pair. Montrer que le nombre
de graphes pairs ayant n + 1 sommets est le même que le nombre de graphes ayant n sommets.
3.12. Montrer que, pour un graphe simple avec c composantes connexes, s sommet et a arêtes, on
a les inégalités  
s−c+1
s−c≤a≤ .
2
Suggestion : Pour la seconde inégalité, considérer la situation où toutes les composantes connexes,
sauf une, sont réduites à un seul sommet.
3.13. Prouver qu’un graphe avec s sommets et plus (>) de s−1

2 arêtes est forcément connexe.
3.14. Montrer que pour une forêt G = (S, A), avec s sommets et a arêtes, on a que s − a est égal
au nombre de composantes connexes de G.
3.15. Montrer que pour une carte, avec s sommets, a arêtes, f faces, et c composantes connexes,
on a
s − a + f = 1 + c.
3.16. On dit qu’un graphe est sans triangle s’il ne contient aucun sous-graphe isomorphe à K3 .
Montrer que pour un graphe planaire sans isthme et sans triangle, ayant s sommets, a arêtes, et c
composantes connexes, on a l’inégalité
a ≤ 2 s − 2 c − 2.
3.17. Montrer par récurrence que le coefficient (i, j) de la k-ième puissances AkG , de la matrice
d’adjacence d’un graphe G = ([n], A), donne bien le nombre de chemins de longueur k allant de i
à j. On observe facilement que c’est le cas pour k = 0, puisque A0G = Idn est la matrice identité
n × n. Pour montrer l’étape de récurrence, expliciter le produit de matrice AkG · AG .
3.18. Montrer qu’on a les formules (3.31), (3.32), et (3.33).
3.18. EXERCICES 91

Programmation mathématique

3.19. Concevoir un programme qui calcule le diamètre et le rayon d’un graphe, et qui en trouve
tous les centres.

Exploration mathématique

3.20. Montrer qu’on peut plonger K3,3 dans un tore, c.-à-d. : dessiner le graphe K3,3 sur le tore
sans croisement des arêtes. Combien obtient-on de faces ?

3.21. Montrer que pour un graphe connexe plongé dans le tore, on a s − a + f = 0.

3.22. Étant donné un graphe G = (S, A), on considère le graphe G0 obtenu à partir de G en ré-
étiquettant chaque sommet x par l’ensemble {x}. Autrement dit, G0 := (S 0 , A0 ) avec S 0 := {{x} | x ∈
S}, et A0 := {{{x}, {y}} | {x, y} ∈ A}. Lors d’une contraction de l’arête {{x}, {y}}, on étiquette
{x, y} le sommet obtenu. Montrer qu’en contractant (dans n’importe quel ordre) successivement
toutes les arêtes de graphe G0 , on obtient toujours un graphe discret dont le nombre de sommets
est le nombre de composantes connexes de G0 .

3.23. Adapter l’approche de l’exercice 3.22 pour en faire une procédure qui calcule les composantes
connexes d’un graphe.
92 CHAPITRE 3. GRAPHES SIMPLES
Chapitre 4

Structures arborescentes

4.1 Introduction

Parmi les graphes simples, les arbres jouent un rôle spécial. Leur étude est liée à celle des arbres
 enracinés , qu’on appelle ici arborescences. Ces derniers graphes sont naturellement orientés (en

allant vers la racine), et il est donc naturel de discuter de ces objets à ce stade de notre présentation.

4.2 Arbres

Rappelons qu’un arbre est tout simplement un graphe simple connexe sans cycle. De façon équivalente,
un arbre G = (S, A) est un graphe simple dans lequel il existe un et un seul chemin reliant toute
paire de sommets. En effet, il existe un tel chemin parce que G est connexe, et le chemin est unique
parce que sinon on aurait un cycle. On appelle aussi souvent noeuds les sommets d’un arbre. Tous
les noeuds d’un arbre ont au moins un voisin. Ceux qui n’en n’ont qu’un seul sont appelés feuilles
de l’arbre.
Lorsqu’on dessine un arbre dans le plan, la disposition des voisins d’un noeud autour de celui-ci
n’a pas d’importance. Autrement dit, les deux arbres de la Figure 4.1 sont les mêmes. On dénote
Arb[S] l’ensemble des arbres qui ont l’ensemble S comme ensemble de noeuds. Par définition, il n’y
a pas d’arbre sur l’ensemble vide, et un seul arbre sur un singleton. On a les 16 arbres suivants sur

93
94 CHAPITRE 4. STRUCTURES ARBORESCENTES

t z
v
q v
q
e
g d d u
s
c f c
b w b f w
s e g
a z a t
u

Figure 4.1 – Deux présentations du même arbre.

S = {a, b, c, d}.

au bu cu d,u au bu du c,u au cu bu du
,

au cu du b,u au du bu c,u au du cu bu
,

bu au cu d,u bu au du c,u cu au bu du
,
(4.1)
cu au du b,u du au bu c,u du au cu bu
,
cu cu bu bu
@ @ @ @
@au bu @bu au @cu au @du au
@ @ @ @

bu du du cu
, , , .

En plus d’étudier de nombreux liens entre la théorie des groupes et les


arbres, Cayley a montré qu’il y a nn−2 arbres ayant n noeuds. Autrement
dit,
|Arb[S]| = nn−2 . (4.2)

Une des preuves les plus élégantes de ce fait passe par la théorie des
espèces introduite par A. Joyal, et développée par le groupe de combi-
natoire de l’UQAM. Elle consiste, par un simple argument combinatoire,
à déduire la formule (4.2) de la formule d’énumération facile des endo-
fonctions sur un ensemble à n éléments, à savoir qu’il y en a nn . Cette
preuve est mentionnée dans le livre The Book comme l’une des plus jolies
preuves en mathématiques. Arthur Cayley
(1821–1895)
4.3. ARBORESCENCES 95

La notion de centre, que nous avons introduite au à la section 3.7 pour tout graphe connexe, prend
une forme particulière pour les arbres.
En effet, il n’y a que deux possibilités. Soit que l’arbre t
v
q
ait un seul centre ; soit qu’il en ait deux, mais alors ce
e
sont deux sommets adjacents. En fait, le centre c(G) g d
s
d’un arbre G = (S, A) peut-être calculé récursivement c f
b w
comme suit. Si G est réduit à un noeud, ou une arête,
alors C(G) = G. Sinon, soit F l’ensemble des feuilles a z u
de G, et T := S \ F . On a alors que

c(G) := c(G |T ). Figure 4.2 – Le centre d’un arbre.

Autrement dit, le centre d’un arbre est égal au centre de l’arbre obtenu en coupant toutes les
feuilles de l’arbre. C’est donc, soit un noeud, soit une arête. Par exemple, le centre de l’arbre de la
Figure 4.2 est le noeud (rouge) étiquetté b. De nombreuses identités profondes, de la combinatoire
des arbres, peuvent s’obtenir en exploitant une décomposition autour du centre des arbres. C’est
le cas pour la formule d’Otter-Leroux 1 .

4.3 Arborescences

Une arborescence (on dit aussi arbre avec racine, ou


arbre enraciné) est un arbre dans lequel on a choisi un
des noeuds (n’importe lequel) pour qu’il joue le rôle de
racine. La Figure 4.3 présente une arborescence. Pour
chaque arbre on a donc n arborescences distinctes. On
déduit donc de la formule (4.2), qu’il y a nn−1 arbores-
cences à n noeuds.
En exploitant le fait qu’il y a un et un seul chemin
allant d’un noeud quelconque à la racine, on oriente les Figure 4.3 – Une arborescence.
arêtes d’une arborescence  vers  la racine. Autrement dit, l’arête {x, y} d’une arborescence est
remplacée par le couple (x, y), si et seulement si l’unique chemin allant de x à la racine (dans α)
commence par le pas (x, y). En résumé, on obtient un graphe orienté connexe acyclique, avec un
seul puits. On dit de ce puits que c’est la racine de l’arborescence. Quant à elles, les sources sont
appelées feuilles de l’arborescence. Autrement dit, ce sont les sommets qui n’ont qu’un seul voisin.
Observez que, bien qu’il soit possible que la racine n’ait qu’un seul voisin, on ne considère pas que
ce soit une feuille. La seule situation où la racine est aussi une feuille est lorsque l’arborescence est
réduite à un seul noeud.
1. Pierre Leroux de l’UQAM, (1942-2008).
96 CHAPITRE 4. STRUCTURES ARBORESCENTES

On peut envisager une arborescence G = (S, A) comme la relation de


couverture d’un ordre, avec la racine comme élément le plus grand., et on
désigne par ≺G l’ordre correspondant. La branche attachée en un noeud
y d’une arborescence est la restriction du graphe à l’ensemble des z, tels
que z G y. Une branche est donc aussi une arborescence, ayant le noeud
y comme racine. On dit que c’est la branche issue de y. Les branches de
l’arborescence sont les branches issues des voisins de sa racine.
La profondeur πG (y) d’un noeud y, d’une arborescence, est la distance
entre ce noeud et la racine. Autrement dit, c’est la longueur de l’unique
chemin qui relie ce noeud à la racine. La profondeur π(G), d’une arbo-
rescence, est la profondeur maximale d’un noeud dans celle-ci. On peut
calculer récursivement la profondeur d’un arbre, comme suit : Pierre Leroux
(1942–2008)
πG = 1 + max πB , (4.3)
B

où B varie dans l’ensemble des branches de l’arborescence. Bien entendu, si l’arborescence est
réduite à sa racine, la profondeur est égale à 1. Une récurrence semblable permet de calculer le
nombre f (G) de feuilles d’une arborescence :
X
f (G) = 1 + f (B). (4.4)
B

Considérant l’ensemble Gk des noeuds de profondeur k dans une arborescence G, la largeur λ(G)
de G est alors définie comme étant

λ(G) := max{|Gk | | 0 ≤ k ≤ π(G) }. (4.5)

L’étude de ces paramètres sur les arborescences est intimement liée à l’analyse en complexité d’al-
gorithmes de recherche dans les arbres, ou les dictionnaires. Pour la profondeur, cela correspond à
mesurer le nombre de comparaisons nécessaire avant de trouver une information.
4.4. ARBRES BINAIRES 97

4.4 Arbres binaires

Un arbre binaire 2 sur l’ensemble S peut se décrire récursivement de la façon suivante. Il est
a) soit l’arbre binaire vide, dans le cas S = ∅ ; soit l’arbre binaire réduit à un seul noeud, lorsque
|S| = 1 ;
b) soit constitué d’un noeud (la racine, qui est un élément x de S) auquel sont attachées une
branche gauche et une branche droite (qui sont chacun des arbres binaires, respectivement
sur des ensembles B et C tels que B + C = S \ {x}).
Plus techniquement, un arbre binaire est un triplet α = (x, γ, δ), avec x ∈ S, γ un arbre binaire
sur B, δ un arbre binaire sur C, et B + C = S \ {x}. On dit que x est la racine de l’arbre, et que γ
en est la branche gauche, et δ la branche droite. On dénote par B[S] l’ensemble des arbres binaires
sur S. On a donc un graphe orienté, mais il est en plus dessiné dans le plan de façon à distinguer
la gauche de la droite.
On dessine habituellement les arbres binaires avec la racine tout en haut, et les
deux branches pointant vers le bas, l’une vers la gauche, l’autre vers la droite.
Le noeud c est la racine, et a, d et f sont des feuilles. La branche gauche de
l’arbre est réduite au seul noeud a, et la branche droite est celle portée par les
noeuds b, d, e, et f .
Il est courant de présenter des arbres, ou des graphes, sans étiquettes. On dit
alors qu’on a dessiné la forme de l’arbre. Plus techniquement, on définit la
notion de type de graphes, c’est-à-dire les classes d’équivalences pour a notion
d’isomorphisme de graphe. On a donc une notion de type d’arbres, type de
graphes orientés, etc.
À chaque forme d’arbre binaire à n noeuds, il correspond en fait n! arbres qui Eugène Catalan
peuvent s’obtenir en étiquetant (de toutes les façons possibles) les n noeuds par (1814–1894)
les éléments de S. Le nombre de formes (voir exercice 4.3) d’arbres binaires à
n noeuds est le n-ième nombre de Catalan :
 
1 2n
Cn = . (4.6)
n+1 n

Le nombre total d’arbres binaires sur S, de cardinal n, est donc


 
n! 2n
|B[S]| = . (4.7)
n+1 n

Les 5 formes d’arbres binaires à n = 3 noeuds sont celles illustrées à la Figure 4.4.
2. On devrait plutôt dire  arborescence binaire , mais ce n’est pas la tradition.

98 CHAPITRE 4. STRUCTURES ARBORESCENTES
u u u u u
@ @ @
u u @u
@ @u
@ u @u
@
@ @
u @u
@ u @@u

Figure 4.4 – Les formes d’arbres binaires à 3 noeuds.

Parcours d’arbres binaires

Dans plusieurs contextes, on s’intéresse à l’exploration des  valeurs  qui se retrouve dans un arbre
binaire, par exemple pour trouver où se situe une valeur spécifique. Pour ce faire, il est fréquent
qu’on parcoure systématiquement l’arbre selon l’une des  stratégies  suivantes. On a les parcours
préfixe (dénoté ϕ) et postfixe (dénoté ψ), qui sont respectivement définis 3 comme suit :
(
x si, α = (x),
ϕ(α) := (4.8)
x ϕ(γ) ϕ(δ) si, α = (x, γ, δ),

et (
x si, α = (x),
ψ(α) := (4.9)
ψ(γ) ψ(δ) x si, α = (x, γ, δ).
Par exemple, avec l’arbre de la figure 4.5, on obtient respectivement

ϕ(α) = acbdf e, et ψ(α) = cf deba.

4.5 Arbres binaires croissants


ua
Parmi les arbres binaires sur un ensemble totalement ordonné @
S, on a ceux pour lesquels les étiquettes vont en croissant uc @ ub
@
le long de tout chemin allant de la racine aux feuilles. Le
ud @ue
@
plus petit élément de S étiquette donc forcément la racine.
On dit de tels arbres binaires qu’ils sont croissants, et on uf
dénote Abc[S] l’ensemble des arbres binaires croissants dont
les noeuds sont étiquetés par les éléments de S. On suppose Figure 4.5 – Arbre binaire crois-
que sur l’ensemble vide, il n’y a qu’un arbre binaire croissant : sant, avec a < b < c < d < e < f .
l’arbre vide.
Techniquement, un arbre binaire croissant sur S est un triplet (min(S), γ, δ), où γ est un arbre
binaire croissant sur B ⊆ S \ {min(S)}, et δ est un arbre binaire croissant sur le complément de B
3. Voir la section suivante pour la définition du parcours infixe, plutôt appelé projection, et dénoté π.
4.5. ARBRES BINAIRES CROISSANTS 99

dans S \{min(S)}. Sur l’ensemble S = {1, 2, 3}, on a les 6 arbres binaires croissants de la Figure 4.6.

u1 u1 u1 u1 u1 u1
@ @ @ @
u2 u2 @@u2 @@u2 u3 @@u2 u2 @@u3
@ @
u3 @@u3 u3 @@u3

Figure 4.6 – Les arbres binaires croissants sur {1, 2, 3}.

En fait, le nombre d’arbres binaires croissants à n-sommets est exactement n!. Ceci découle du fait
qu’on a une bijection π (la projection) entre arbres binaires croissants et ordre totaux sur S. Elle se
définit récursivement comme suit, en présentant les ordres totaux sur S sous forme de mots. Pour
un arbre croissant α = (a, γ, δ) (avec branche gauche γ et branche droite δ), on a la projection

π(α) := π(γ) a π(δ). (4.10)

On récupère l’arbre α à partir de ` = π(α) en calculant le déployé ∆(`) de `. Plus précisément,


pour un ordre total ` = x1 x2 · · · xn sur S, on pose

∆(`) := (a, ∆(u), ∆(v)), (4.11)

où u et v sont les mots qui sont uniquement caractérisés par le fait que ` se décompose comme
comme produit (de concaténation) de la façon suivante :

` = u a v.

On voit facilement que la fonction ∆ est l’inverse de π. Par exemple, le mot cabf de est la projection
de l’arbre binaire croissant de la Figure 4.5. On dit aussi parfois qu’on a obtenu le mot π(α) par
lecture infixe de l’arbre α.
Il découle directement de la construction de la bijection π que

|Abc[S]| = n!, (4.12)

si S est un ensemble totalement ordonné de cardinal n.


100 CHAPITRE 4. STRUCTURES ARBORESCENTES

4.6 Arbres ordonnés

Un arbre ordonné) est un arbre (une arborescence) soit réduit à un seul noeud, soit constitué d’un
noeud (la racine) auquel est rattachée une suite non vide d’arbres ordonnés. Ce sont les branches
de l’arbre, et elles sont ordonnées de gauche à droite. La Figure 4.7 présente les formes d’arbres
ordonnés à 4 noeuds.
Plus techniquement, un arbre ordonné sur S est soit réduit à (x) si S = {x}, soit un couple (x, B),
où x (dans S) est la racine de l’arbre, et B = (α1 , α2 , . . . , αk ) est une suite non vide (k > 0)
d’arbres ordonnés. Il n’y a pas d’arbre ordonné sur l’ensemble vide.
Il y a une bijection classique entre arbres binaires et arbres ordonnés. Le passage d’un arbre binaire
à un arbre ordonné peut se décrire aisément en terme de filiation. On ajoute un nouveau noeud

u u u u u
@ @ @
u u u @u
@ u u @
@u u @u
@
@
u u @u
@ u u

Figure 4.7 – Formes d’arbres ordonnés à quatre noeuds

comme  père  4 de la racine, et on interprète le fait de descendre dans la branche gauche d’un
arbre binaire comme le passage de  père  en  fils . Descendre dans la branche droite s’interprète
comme le passage de  frère  à  frère cadet . Ce processus est illustré à la Figure 4.6. Le noeud
supplémentaire est celui qui est étiqueté x. On enlève de part et d’autre les étiquettes des noeuds,
pour obtenir la correspondance en terme de forme d’arbres.
Pour n = 3, la bijection de la Figure 4.9.

4. Selon le goût du lecteur, on peut substituer  mère  pour  père  et  fille  pour  fils , ou même encore


utiliser les termes plus neutres  parent  et  enfant .


4.7. FONCTION DE STATIONNEMENT(∗) 101

a a x x
v v v v
@ @
@ @
@ @
b v @vc b v @v c
@ a v c v @ve
@
@
7→ @
@ 7→ A
 A
d v @ ve d v @ ve
@ b v v
 d Avf
@ @
@
@
@vf @ vf
@

Figure 4.8 – Un arbre binaire et l’arbre plan correspondant.

s s s s s
s s @s @s s @s
@ @ @

s @s s @s
@ @

l l l l l
s s s s s
s s s @s s s @s s @s
@ @ @

s s @s s s
@

s
Figure 4.9 – La bijection arbres binaires, arbres aodonnés, pour n = 3.

4.7 Fonction de stationnement(∗)

Apparemment la notion que nous allons maintenant aborder est due à R. Pyke (voir [25]). Elle a
été redécouverte par A.G. Konheim et B. Weiss (voir [19]) dans un contexte informatique, pour
l’étude d’un certain type de  hashage .
On suppose que n  conducteurs  ont chacun opté d’avance pour une des n places de stationne-
ment, toutes situées du même coté d’une rue à sens unique et numéroté consécutivement de 1 à n.
Autrement dit, on a une fonction ψ de l’ensemble C des conducteurs vers l’ensemble {1, 2, . . . , n},
qui rend compte des préférences de stationnement de chaque conducteur, avec ψ(c) = k si le conduc-
teur c préfère la place k. On dit que ψ est la fonction de préférence. Il n’y a aucune restriction
sur ces préférences. Par exemple, les conducteurs peuvent avoir tous choisi la place 1 comme place
préférée.
Pour une fonction de préférence ψ fixée, on suppose que les conducteurs arrivent l’un après l’autre,
dans un ordre quelconque, et s’avancent jusqu’à leur place préférée. Ils s’y garent si elle est libre, ou
se garent à la première place libre qui suit leur place préférée. Dans le cas illustré à la Figure 4.10,
102 CHAPITRE 4. STRUCTURES ARBORESCENTES

le prochain conducteur désire se garer à la place numérotée 8, qui est occupée. Il se garera donc à
la donc la place 9, qui est libre.

ψ(c)=8

J
1 2 3
JJ 6 7
J 9 10 11
J

Figure 4.10 – Un conducteur cherchant sa place préférée.

S’il existe un ordre d’arrivée des conducteurs pour lequel un des conducteurs n’arrive pas à se
trouver une place (suivant cette procédure) avant de parvenir à la fin de la rue, on dit que la
fonction de préférence ψ n’est pas une fonction de stationnement. Au contraire, on dit avoir une
fonction de stationnement si chaque conducteur réussit à se garer, quelque soit l’ordre d’arrivée.
On montre facilement que ψ est une fonction de stationnement si et seulement si, pour tout k entre
1 et n, l’image inverse
ψ − ([k]) = {c ∈ C | ψ(c) ≤ k}.
contient au moins k éléments, i.e. :
ψ − ([k]) ≥ k. (4.13)
Autrement dit, pour chaque k il y a au moins k conducteurs qui désirent se garer dans les k
premières places.
On dénote Sta[n] l’ensemble des fonctions de stationnement, avec C = [n]. On peut décrire une
fonction de stationnement comme un mot ψ = p1 p2 · · · pn , avec pi = ψ(i). Ainsi, les 3 fonctions de
stationnement qui correspondent au cas n = 2 sont :

Sta[2] = {11, 12, 21}.

Pour n = 3, on a les 16 fonctions de stationnement :

Sta[3] = {111, 112, 121, 211, 113, 131, 311, 122,


212, 221, 123, 132, 213, 231, 312, 321}

Le problème consiste alors à compter le nombre de fonctions de stationnement en terme de n.


Pour ce faire 5 on déforme la rue pour en faire un cercle, et on ajoute une place de stationnement
étiquetée n + 1, comme illustré à l Figure 4.11. qui peut aussi être l’une des places préférées. Il
5. Cette approche est due à Pollak (voir [?, Sec. 2]).
4.8. FORÊTS 103

J J
1 2

1
n+

...
n
...

k
J
Figure 4.11 – Stationnement circulaire.

en résulte donc que ψ prend maintenant des valeurs entre 1 et n + 1. Toutes les voitures peuvent
toujours se stationner, quitte à repasser par le début ; et, à la fin, il reste toujours exactement une
place de libre. La fonction ψ est une fonction de stationnement si la seule place libre est la place
numérotée n + 1. Pour chaque fonction de préférence ψ, et chaque j entre 0 et n, on a une fonction
de préférence ψj définie comme :

ψj (c) := (ψ(c) + j mod n + 1).

Parmi les (n + 1)n fonctions de préférences, il y en a n + 1 qui s’écrivent comme ψj , pour chaque
fonction de stationnement ψ. Une seule d’entre elles laisse la place n + 1 libre. On a donc (n +
1)n /(n + 1) = (n + 1)n−1 fonctions de stationnement :

|Sta[n]| = (n + 1)n−1 . (4.14)

4.8 Forêts

Le lien entre fonctions de stationnement et les graphes simples passe par la notion de forêt, c’est-
à-dire tout simplement un graphe simple dont les composantes connexes sont des d’arborescence
(chacune est un arbre où on a sélectionné une racine). Par exemple, sur l’ensemble de sommets
S = {1, 2, 3}, on a les 16 forêts de la Figure 4.12.

4.9 Exercices

4.1. Montrer que la profondeur d’un arbre binaire à n feuilles est au moins égale à log2 (n).
104 CHAPITRE 4. STRUCTURES ARBORESCENTES

1 1 1 1 1 3 2 3 1 2 3 2

2 3 2 3 2 3 2 3 2 1 3 1

2 1 3 1 1 1 2 2 3 3
2 3 1 3 1 2
3 2 3 2 3 1 2 1

Figure 4.12 – Forêts sur {1, 2, 3}.

4.2. Montrer que, pour Cn le nombre de formes d’arbres binaires à n noeuds, on a la récurrence
n−1
X
Cn = Ck Cn−k−1 , (4.15)
k=0

avec C0 = 1.
4.3. Avec Cn comme à l’exercice 4.2, on considère la série

X
C(x) := Ck xk .
k=0

a) Montrer que la récurrence (4.15) est équivalente à l’égalité


C(x) = 1 + x C(x)2 . (4.16)

b) En déduire que √
1−
1 − 4x
C(x) = . (4.17)
2x
c) Démontrer la formule (4.6) en utilisant la formule classique de développement en série
(a x)2 (a x)3 (a x)k
(1 + a x)r = 1 + r (a x) + r(r − 1) + r(r − 1(r − 2) + . . . + (r)k + ....
2 6 k!
(4.18)
Rappelons que le symbole de Pochammer , (r)k , se définit récursivement en posant
(
1 si k = 0,
(r)k :=
r (r − 1)k−1 si k ≥ 1.
4.4. Décrire une bijection directe entre les formes d’arbres binaires sur n noeuds, et les triangula-
tions d’un polygone à n+2 sommets. Suggestion : Les noeuds de l’arbre correspondent aux triangles,
et deux noeuds sont reliés si les triangles correspondants ont une arête en commun. On place la
racine dans le triangle contenant l’arête {1, 2}. Pour n = 3, on aura la bijection de la Figure 4.13.
4.9. EXERCICES 105

s s s s s
s s @s @s s @s
@ @ @

s @s s @s
@ @

l l l l l

2 2 2 2 2

3 1 3 1 3 1 3 1 3 1

4 5 4 5 4 5 4 5 4 5

Figure 4.13 – Bijection arbres binaires et triangulations.

Programmation mathématique

4.5. Construire une procédure qui calcule tous les arbres binaires sur un ensemble S.

4.6. Construire une procédure qui calcule la profondeur d’un arbre binaire sur un ensemble S.

4.7. Construire une procédure qui calcule tous les arbres binaires croissants sur un ensemble tota-
lement ordonné S.

4.8. Construire une procédure qui calcule la profondeur d’un arbre binaire croissant sur un ensemble
totalement ordonné S.

4.9. Construire une procédure qui calcule tous les arbres ordonnés sur un ensemble S.

4.10. Construire une procédure qui transforme un arbre binaire en arbre ordonné, comme il est
décrit à la Figure 4.8.
106 CHAPITRE 4. STRUCTURES ARBORESCENTES
Chapitre 5

Graphes orientés

5.1 Introduction

Lorsqu’on oriente les arêtes d’un graphe, on obtient la notion de graphes orientés. On a dans ce cas
des variantes intéressantes des algorithmes sur les graphes.

5.2 Graphe orienté.

Un graphe orienté G est la donnée d’un couple (S, A), avec A ⊆ S × S. Un graphe orienté sur
un ensemble de sommets S correspond donc à la donnée d’une relation A sur S. Comme pour les
graphes simples, les éléments de S sont appelés sommets, mais les éléments de A sont plutôt appelé
des arcs. Autrement dit, la différence avec les graphes simples 1 et les graphes orientés réside dans
le fait qu’on a donné une orientation aux arêtes, puisqu’il y une différence entre (x, y) et (y, x).
Pour un arc a = (x, y) dans A, on dit que x est la source de a, et que y en est le but. La Figure 5.2
illustre par un dessin 2 cette notion de graphe orienté.
On dit d’un arc (x, x) que c’est une boucle du graphe. On désigne par Gro[S] l’ensemble des graphes
orientés sur un ensemble S, de n sommets, et le nombre de graphes orientés sur S est
Gro[S] = 2n·n . (5.1)
Les graphes orientés de sommets {•, •} sont les 16 graphes de la Figure 5.1. Le degré sortant (resp.

degré entrant) d’un sommet x du graphe G = (S, A), dénoté d+G (x) (resp. dG (x)), est défini comme

d+
G (x) := #{y | (x, y) ∈ A} (resp. d−
G (x) := #{y | (y, x) ∈ A}).

1. On insiste ici mieux sur la différence entre les deux notions en utilisant l’adjectif simple.
2. Bien entendu, plusieurs dessins différents peuvent correspondent au même graphe. Nous y reviendrons.

107
108 CHAPITRE 5. GRAPHES ORIENTÉS

Figure 5.1 – Les 16 graphes orientés sur {•, •}.

En particulier une boucle contribue autant au degré sortant qu’au degré entrant. On a alors

Lemme 5.1 (Des coups de pieds). Pour tout graphe orienté G,


X X
d+
G (x) = d−
G (x). (5.2)
x∈S x∈S

Preuve. Voir exercice 5.1. 

À chaque graphe orienté G = (S, A), on associe les deux nouveaux graphes suivants. On a G(−1) =
(S, A(−1) ) le graphe orienté inverse de G, et G = (S, A) le graphe orienté complémentaire de G,
respectivement définis en posant

A(−1) := {(y, x) | (x, y) ∈ A}, et A := (S × S) \ A.

Bien entendu, lorsque G a n sommets,

|A(−1) | = |A|, et |A| = n2 − |A|, (5.3)

et on a les égalités
d+
G−1
(x) = d−
G (x), et d−
G−1
(x) = d+
G (x),

d+
G
(x) = n − d+
G (x), et dG (x) = n − d−
G (x).

Tout comme dans le cas des graphes simples, pour S = [n], la matrice d’adjacence d’un graphe
orienté (S, A) est définie comme
(
1 si (i, j) ∈ A,
AG := (aij )1≤i,j≤n , avec aij = (5.4)
0 sinon.

Ainsi, on un graphe orienté et sa matrice d’adjacence à la Figure 5.2. Toutes les matrices n × n de 0
5.2. GRAPHE ORIENTÉ. 109

1
3
 
0 1 0 0 1
0 1 1 0 0
 
A=
0 0 0 1 0
0 1 0 1 0
5 4 1 0 0 1 1

Figure 5.2 – Un graphe orienté.

et de 1 peuvent apparaı̂tre comme matrice d’adjacence d’un graphe orienté. Ainsi, aux 16 graphes
orientés de la Figure 5.1, correspondent les 16 matrices :
               
0 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0
, , , , , , , ,
0 0 0 1 1 0 0 1 0 0 1 0 0 1 1 1
                (5.5)
0 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1
, , , , , , , .
0 0 1 0 1 1 1 1 1 0 0 1 1 0 1 1
On observe que la matrice d’adjacence du graphe inverse de G est la transposé de la matrice
d’adjacence de G :
AG(−1) = (AG )tr (5.6)
La matrice d’adjacence du complémentaire de G s’obtient simplement en remplaçant chaque 0 par
1, et chaque 1 par un 0, dans la matrice d’adjacence de G :
AG (i, j) = 1 − AG (i, j). (5.7)

Isomorphismes de graphe orienté

On a un isomorphisme de graphes orientés



f : G1 −→ G2 ,
pour G1 = (S1 , A1 ) et G2 = (S2 , A2 ), si f est une bijection allant de S1 à S2 , qui est telle que
(x, y) ∈ a ssi (f (x), f (y)) ∈ A0 .
Le composé d’isomorphismes de graphes est un isomorphisme de graphe, et la fonction inverse de
f est aussi un isomorphisme de graphe. On dit encore de deux graphes orientés isomorphes qu’ils

ont la même forme. On observe qu’une bijection f : S1 −→ S2 , établie un isomorphisme entre les
(−1) (−1)
graphes G1 et G2 , si et seulement si elle établie un isomorphisme entre les graphes G1 et G2
(ou encore entre les graphes G1 et G2 ).
110 CHAPITRE 5. GRAPHES ORIENTÉS

Lien avec les graphes simples

On peut  simuler  un graphe simple G = (S, A) par un graphe orienté G0 = (S, B), ayant les
mêmes sommets, en posant

(x, y) ∈ B et (y, x) ∈ B exactement quand {x, y} ∈ A.

Autrement dit, on remplace chaque arête de A par les deux arcs possibles entre x et y (c.-à-d. :
dans les deux orientations). On a donc
G = G(−1) .
Cette construction est compatible avec la notion d’isomorphisme, et avec le passage à la matrice
d’adjacence, qui est alors symétrique. Ainsi, plusieurs résultats concernant les graphes orientés
s’adaptent au cas des graphes simples par le biais de cette même construction.
On peut associer un graphe simple à chaque graphe orienté G = (S, A) (sans boucle), simplement
en remplaçant chaque arc (x, y) par l’arête {x, y}. Au besoin, on enlève d’abord les boucles. On dit
alors qu’on a oublié l’orientation des arcs.
On peut aussi construire plusieurs graphes orientés à partir d’un graphe simple G donné, en  mu-
nissant d’une orientation  chaque arête de G. Ceci correspond à choisir de remplacer l’arête {x, y}
soit par l’arc (x, y), soit par l’arc (y, x). On dit alors qu’on a orienté l’arête {x, y}. Clairement, un
graphe simple G, avec a arêtes, admet 2a orientations distinctes.

5.3 Endofonction

Une façon agréable de construire certains graphes orientés, sur un ensemble de sommets S, est de
considérer une fonction quelconque f : S → S. On dit souvent qu’on a une endofonction sur S. Les
arcs du graphe associé sont les couples (x, f (x)), c’est-à-dire les éléments de la relation fonctionnelle
sous-jacente à la fonction f .
Le graphe ainsi construit porte parfois le nom de graphe sagittal
de la fonction f . On le dénote Gf . Observons que la matrice d’ad-
jacence de Gf contient un et un seul 1 sur chacune de ses lignes.
C’est l’expression de la propriété de fonctionnalité en terme de
graphes : il y a un et un seul arc sortant de chaque sommet.
Lorsque f est bijective, il y a de plus un et un seul arc entrant
dans chaque sommet, et on dit que la matrice d’adjacence est
une matrice de permutation. Elle a un et un seul 1 sur chaque
ligne et sur chaque colonne. Figure 5.3 – Une endofonction.
Un élément x dans S est dit récurrent (pour f ) s’il existe k > 0
5.4. CHEMINS DANS UN GRAPHE ORIENTÉ 111

tel que x = f k (x). Comme S est fini, S contient forcément (voir Exercice 5.8) au moins un élément
récurrent pour f .

5.4 Chemins dans un graphe orienté

On adapte la notion de chemin dans un graphe simple, au contexte des graphes orientés, tout
simplement en demandant de  respecter  l’orientation des arêtes. Un chemin

γ = (x0 , x1 , x2 , . . . , xn ),

dans un graphe orienté G = (S, A) est donc une suite de sommets, xi dans S, avec chaque (xi , xi+1 )
un arc de G. Tout comme on l’a fait pour les chemins dans les graphes simples, on dit que x0 est
la source de γ, et que xn est son but. Encore ici, n est la longueur de γ.
L’ensemble des chemins de longueur k, allant de x à y, est dénoté Gk (x, y). Les chemins de longueur
0 s’identifient aux sommets du graphe, et on écrit plus simplement 1(x, y) pour G0 (x, y). Ainsi,

{(x)} si, x = y,
1(x, y) =
∅ sinon.

Les chemins de longueur 1 correspondent aux arcs du graphe, et si on écrit simplement G(x, y),
plutôt que G1 (x, y), alors 
{(x, y)} si, (x, y) ∈ A,
G(x, y) =
∅ sinon.
On dénote par G∗ (x, y) l’ensemble des chemins allant de x à y dans le graphe orienté G, c.-à-d. :

G∗ (x, y) := 1(x, y) + G(x, y) + G2 (x, y) + . . . (5.8)

Cet ensemble peut être infini.


La composition de chemins dans G est définie tout comme dans le cas des graphes simples. C’est
donc une fonction
Gk (x, y) × Gj (y, z) → Gk+j (x, z). (5.9)
Le nombre de chemins de longueur k i à j dans un graphe orienté G = (S, A), avec S = {1, 2, . . . , n},
est donné par la k-ième puissance de la matrice d’adjacence de G :
Proposition 5.2. Pour un graphe orienté G = ([n], A), le nombre de chemins allant de i à j dans
G est égal au coefficient (i, j) de la k-ième puissance de la matrice d’adjacence AG :

Gk (x, y) = (AG )k (x, y). (5.10)


112 CHAPITRE 5. GRAPHES ORIENTÉS

Observons, en particulier, qu’il y a un unique chemin de longueur k issu d’un sommet donné x dans
le graphe sagittal Gf , associé à une endofonction f . C’est le chemin

(x, f (x), f 2 (x), . . . , f k−1 (x)),

obtenu en itérant f .

Chaı̂nes

Une chaı̂ne dans un graphe orienté G = (S, A) est chemin dans le graphe simple obtenu en oubliant
l’orientation dans G. Autrement dit, on a

γ = (x0 , x1 , x2 , . . . , xn ),

avec (xi , xi+1 ) ∈ A ou (xi+1 , xi ) ∈ A. Par ce biais, on peut donc transposer au contexte des graphes
orientés les notions de connexité déjà considérées pour les graphes simples.
Par exemple, on peut décomposer une endofonction sur S en composantes connexes, comme illustré
à la Figure 5.3.

Composantes fortement connexes

En utilisant la notion de chemins, plutôt que celle de chaı̂ne, on est amené à considérer la notion de
 connexité forte  sur un graphe orienté. Plus précisément, on introduit la relation d’équivalence

x ≡ y entre sommets de G = (S, A), qui code le fait que deux sommets x et y sont dans une même
composante fortement connexe. C’est-à-dire que x ≡ y si et seulement si il existe dans G un chemin
de x à y, et un chemin de y à x.
Tout graphe orienté admet une décomposition unique en composantes connexes, et chacune de ces
composantes se décompose à son tour en composantes fortement connexes de façon unique.
5.5. GRAPHES ACYCLIQUES 113

5.5 Graphes acycliques


b
c
Un cycle dans un graphe orienté G = (S, A) est un chemin d
de longueur ≥ 1, pour lequel la source coı̈ncide avec le but.
e
En particulier, il peut être réduit à une boucle. On dit qu’un
graphe orienté G est acyclique s’il est impossible de trouver un
cycle dans G. En particulier, G ne doit contenir aucune boucle,
et chaque fois que (x, y) est un arc de G alors (y, x) ne l’est pas.
L’ensemble des graphes acycliques de sommets A est dénoté a
Acyc[A]. La Figure 5.4 donne un exemple de graphe acyclique.
Dans un graphe acyclique G, on dit qu’un sommet x est une Figure 5.4 – Un graphe acy-
source, s’il n’y a aucun arc de G dont x soit le but. Dans le clique.
graphe de la Figure 5.4, a est une source. De même, on dit que x est un puits, s’il n’y a aucun arc
de G dont x soit la source. Dans le graphe de la Figure 5.4, b et c sont des puits. Il est facile de
montrer que

Proposition 5.3. Tout graphe acyclique contient au moins une source, et au moins un puits.

Preuve. On procède par contradiction. Soit G un graphe acyclique sans puits (l’argument est
semblable dans le cas des sources). Considérons un chemin (x0 , x1 , . . . , xk ) dans G. Comme xk
n’est pas un puits, il existe un arc (x, y) dans G via lequel on peut prolonger le chemin ci-haut pour
obtenir le chemin (x0 , x1 , . . . , xk , y). Ceci montre qu’il y a un chemin de longueur arbitraire dans
G. Par le principe des tiroirs, tout chemin assez long contient forcément deux sommets du chemin
qui coı̈ncident, disons xi = xj avec i < j. On a donc un circuit (xi , . . . , xj ) dans le graphe, ce qui
contredit l’hypothèse d’acyclicité. 

Dans un graphe acyclique G = (S, A), on peut  découper  l’ensemble des sommets selon leur
rang. Notre description de cette décomposition exploite les ensembles

A−1 (x) := {y ∈ S | (y, x) ∈ A}, (5.11)

associés aux sommets de S. Observons que A−1 (x) = ∅ si et seulement si x est un puit de G. On a
alors la décomposition en somme disjointe

S = R0 + R1 + . . . Rk , (5.12)

où k est la longueur d’un plus long chemin dans G, et Ri est l’ensemble des sommets de rang i
obtenus récursivement comme suit. On commence par poser

R0 := {x ∈ S | A−1 (x) = ∅}. (5.13)


114 CHAPITRE 5. GRAPHES ORIENTÉS

C’est donc l’ensemble des puits de G. Puis, pour chaque 0 < i ≤ k, on pose

Ri := {x ∈ S | A−1 (x) ⊆ Ri−1 }. (5.14)

Par définition, le rang, rG (x), d’un sommet x, est égal à i si et seulement si x ∈ Ri . Tous les
sommets dans Rk sont des puits, mais il peut y avoir des puits qui sont dans l’un des Ri , avec

i < k. Une numérotation, d’un graphe G = (S, A) à n sommets, est une bijection f : S −→[n]
telle que f (x) < f (y) si (x, y) ∈ A. En exploitant ces notions de rang et de numérotation, on peut
montrer que

Proposition 5.4. Un graphe à n sommets G = (S, A) est acyclique, si et seulement s’il admet une
numérotation.

En élaborant sur ces idées 3 , on peut montrer (voir [29]) que le nombre αn := |Acyc[A]| de graphes
acycliques sur un ensemble A à n élément est caractérisé par la récurrence

n  
k+1 n
X
αn = (−1) 2k (n−k) αn−k , (5.15)
k
k=1

et on a les valeurs

n 0 1 2 3 4 5 6 7 8 ...

|Acyc[n]| 1 1 3 25 543 29281 3781503 1138779265 783702329343 . . .

L’argument de la preuve de la Proposition 5.3 montre qu’on a aussi

Proposition 5.5. Dans un graphe acyclique G sur A, de cardinal n, les chemins ont une longueur
bornée par le nombre de sommets. On a donc Gk = ∅ pour tout k ≥ n. Il en découle que pour tout
sommet x et y, on a :

G∗ (x, y) := 1(x, y) + G(x, y) + G2 (x, y) + . . . + Gn−1 (x, y). (5.16)

C’est donc un ensemble fini.

On dit qu’on a muni un graphe simple d’une orientation acyclique, si le graphe orienté résultant
est acyclique. Par exemple, le graphe complet K3 (le triangle) admet les 6 orientations acycliques

3. Avec un argument d’inclusion-exclusion qui exploite le choix d’un sous-ensemble de sources.


5.5. GRAPHES ACYCLIQUES 115

suivantes :
2 2 2

1 3 1 3 1 3
2 2 2

1 3 1 3 1 3

Un résultat surprenant est que le nombre d’orientations acycliques d’un graphe simple G peut
s’obtenir facilement en évaluant le polynôme chromatique PG (t) du graphe simple. En effet, on a
que

Théorème 5.6 (Stanley 4 ). Le nombre α(G), d’orientations acycliques d’un graphe simple G à n
sommets, est tel que
α(G) = (−1)n PG (−1). (5.17)

Preuve. On procède par récurrence sur le nombre d’arêtes, en utilisant l’équation (3.29). Le cas
du graphe discret est clair, puisqu’il n’a qu’une seule orientation acyclique. Supposons donc qu’on
a (5.17) pour les graphes simples ayant au plus a arêtes. Pour G0 et G00 , obtenus respectivement
par suppression et contraction d’une arête choisie, joignant deux sommets de x et y, d”un graphe
simple G ayant a + 1 arêtes, il faut montrer que

α(G) = α(G0 ) + α(G00 ). (5.18)

Observons d’abord que toute orientation acyclique de G00 donne une orientation acyclique de G0
obtenue via la correspondance qu’il y a entre les arêtes de G0 et celles de G00 établie par le processus
de contraction. On oriente simplement les arêtes de G0 de la même façon que l’arête image suivant
la contraction. Pour un orientation acyclique donnée de G0 , il y a deux cas possibles. Le premier
cas correspond à la situation où l’on peut orienter l’arête choisie sans restriction. Cela correspond
exactement au cas où l’orientation acyclique de G0 proviens d’une orientation acyclique de G00
comme nous venons de le décrire. Il en résulte donc 2 α(G00 ) orientations acycliques de G. Dans
le deuxième cas, on doit simplement vérifier qu’il existe toujours une orientation de l’arête choisie
qui donne une orientation acyclique de G à partir d’une orientation acyclique de G0 . S’il n’est pas
possible de choisir l’orientation (x, y) pour l’arête choisie, c’est parce qu’on créé ainsi dans G un cycle
(x0 , x1 , . . . xn ), avec x = x0 = xn et y = x1 . Si l’autre orientation (y, x) est elle aussi impossible,
on aura un cycle (y0 , y1 , . . . yk ), avec y = y0 = yn et x = y1 . Mais alors (y1 , . . . yk , x2 , . . . xn ) est
alors un cycle dans G0 , ce qui contredit le fait qu’on est parti d’une orientation acyclique de G0 .
4. Richard P. Stanley, Acyclic orientations of graphs, Discrete Mathematics 5 (2) (1973), pp. 171–178.
116 CHAPITRE 5. GRAPHES ORIENTÉS

En résumé, on a montré que

α(G) = (α(G0 ) − α(G00 )) + 2 α(G00 ),

ce qui montre bien (5.18). 

Par exemple, on calcule qu’il y a n! orientations acycliques du graphe complet Kn , puisque son
polynôme chromatique est t(t − 1)(t − 1) · · · (t − (n − 1)). On peut le voir directement en raisonnant
récursivement comme suit. De la proposition 5.3, il découle qu’on a au moins un sommet source.
En fait, il ne peut y en avoir qu’un, puisque deux sommets sources ne peuvent être reliés par un
arc. Bien entendu, il y a n choix pour ce sommet source. Si on enlève ce sommet, l’hypothèse de
récurrence assure qu’il y a (n−1)! orientations acycliques du graphe restant. On a donc globalement
n! orientations.

5.6 Graphes valué

Il est souvent intéressant, pour des applications, de donner un  poids  aux arcs d’un graphe
orienté. Ce poids (ou valuation) correspond par exemple à une distance (entre villes), à un coût
(d’un voyage, d’une transaction), ou encore à une probabilité (de passer d’un sommet à un autre).
Bien entendu, selon la nature de cette valuation, des problèmes différents se posent. Nous allons
cependant voir que leur solution suit très souvent le même cheminement.
Un  graphe valué  est simplement un graphe orienté G = (S, A) muni d’une valuation des arcs,
c’est-à-dire une fonction
ν : A → R, (5.19)
à valeur dans un certain (demi-)anneau 5 R (comme N, Q, R, R+ ∪ {∞}, {0, 1}, etc.). L’avantage
de choisir des poids qui font partie d’un anneau (ou d’un demi-anneau) deviendra évident par la
suite. Il est habituel d’étendre la valuation à tout l’ensemble S × S, en posant simplement que

ν(x, y) := 0 si (x, y) 6∈ A. (5.20)

Attention, ici  0  correspond à l’élément neutre (pour l’addition) du semi-anneau R. L’analogue


de la matrice d’adjacence pour un graphe valué sur [n] est la matrice

Aν = (aij )1≤i,j≤n , où aij := ν(i, j), (5.21)

En fait, en choisissant la valuation ν : A → N, telle que ν(x, y) = 1 pour (x, y) dans A, on


récupère exactement la notion originale de matrice d’adjacence. En ce sens, la notion de graphe
5. C’est un ensemble muni d’opérations abstraites de  somme  et de  produit  , avec de bonnes propriétés.
On utilise ici le terme  demi-anneau , parce qu’il n’y a pas nécessairement d’inverse additif. Voir appendice C.
5.6. GRAPHES VALUÉ 117

valué généralise celle de graphe orienté. On peut donc reformuler la définition de graphe valué
sous la forme simplifiée suivante. Un graphe valué, sur un ensemble de sommets S, est un couple
G = (S, ν) avec ν une valuation des éléments de S × S, c’est-à-dire une fonction

ν : S × S → R, (5.22)

à valeur dans un demi-anneau R. On considère alors que les arcs de G sont les couples (x, y) ∈ S
tels que ν(x, y) 6= 0. Autrement formulé, l’ensemble A des arcs de G est

A := {(x, y) ∈ S × S | ν(x, y) 6= 0}. (5.23)

À chaque chemin γ = (x0 , x1 , x2 , . . . , xn ), correspond la valuation

ν(γ) := ν(x0 , x1 ) · ν(x1 , x2 ) · . . . · ν(xn−1 , xn ),

où la multiplication est celle de R. On cherche très souvent à calculer les chemins de valuation
minimale (ou maximale). On considère aussi la valuation ν(H) de sous-graphes H = (S, B), avec
B ⊆ A, définie en posant X
ν(H) := ν(x, y). (5.24)
(x,y)∈B

Le cas particulier où H est un arbre (dit couvrant) est très souvent important, et la recherche d’un
arbre couvrant de valuation minimale est un problème classique dans ce domaine.
(k)
Les coefficients de la matrice Akν = (aij )1≤i,j≤n correspondent alors à

(k)
X
aij = ν(γ),
γ

où la somme a lieu sur l’ensemble des chemins de longueur k, allant de i à j. Selon le contexte,
plusieurs problèmes sur les graphes valués peuvent se résoudre par un calcul matriciel bien adapté.
Nous allons en discuter quelques exemples.
118 CHAPITRE 5. GRAPHES ORIENTÉS

5.7 Matrices booléennes

Comme Boole, nous allons maintenant calculer avec des matrices de façon
 logique , tout simplement en supposant que

1 + 1 = 1.

Ici, 1 représente la valeur de vérité  vrai , tandis que 0 représente la


valeur  faux . Les coefficients des matrices sont donc  booléens  au
sens décrit de façon plus précise ci-dessous. L’intention est de  calcu-
ler  s’il existe un chemin de longueur k allant de x à y dans un graphe
orienté donné. Plus précisément, on travaille avec des matrices avec co-
efficients dans l’anneau de Boole B. C’est l’ensemble B := {0, 1} muni de
l’addition telle que
George Boole
0 + 0 = 0, 1 + 0 = 1, 0 + 1 = 1, et 1 + 1 = 1, (1815 – 1864)

et la multiplication

0 · 0 = 0, 0 · 1 = 0, 1 · 0 = 0, et 1 · 1 = 1.

L’addition correspond au  ou  logique, et la multiplication au  et  logique.


Pour les matrices à valeur dans B, on a l’addition booléenne terme-à terme, et le produit matriciel
est tel que
n
X
(M · N )ij = Mik Nkj = 1, ssi ∃k (Mik = 1, et Nkj = 1). (5.25)
k=1

Nous considérons ici le cas des graphes valués avec valeur dans l’anneau booléen. La matrice d’ad-
jacence correspondante est la même que la matrice d’adjacence usuelle d’un graphe orienté, mais
les calculs sont différents. Il découle de (5.25) que le coefficient (i, j) de Ak = AkG est soit 1, soit 0,
selon qu’il y ait ou non un chemin de longueur k allant de i à j, et on a que
Proposition 5.7. La matrice booléenne

A∗ = Idn + A + A2 + A3 + . . . , (5.26)

a coefficient (i, j) égal à 1, si et seulement s’il existe un chemin allant de i à j dans G. Sinon, ce
coefficient est 0.

Observez que pour calculer A∗ , dans un graphe orienté à n sommets, il n’est pas nécessaire de
dépasser le calcul de An−1 , puisque le plus court chemin entre deux sommets est au plus de longueur
n − 1. En fait, on obtient A∗ = Ak aussitôt que Ak = Ak+1 .
5.8. LE DEMI-ANNEAU TROPICAL 119

Bref, pour obtenir A∗ récursivement, on calcule 6

Bk = Idn + A · Bk−1 , (5.27)

avec B0 = Idn . On s’arrête si Bk = Bk+1 , et alors A∗ = Bk . L’avantage de la stratégie de calcul (5.27)


est de diminuer le nombre total de multiplications de matrices.
Quelque soit le graphe orienté G = (S, A), on obtient un nouveau graphe orienté G∗ en considérant
le graphe dont la matrice d’adjacence est la matrice booléenne A∗ . On dit que G∗ est la fermeture
transitive de G.

5.8 Le demi-anneau tropical

Considérons maintenant que la valuation d’un arc (x, y) est


dans R+ ∪ {∞}. On peut alors penser que ν(x, y) est un coût
pour passer de x à y, avec le coût  ∞  s’il est impossible
de passer de x à y (parce qu’il n’y a pas d’arc les reliant).
Selon cette interprétation, il est naturel de considérer que

ν(γ) := ν(x0 , x1 ) + ν(x1 , x2 ) + . . . + ν(xn−1 , xn ),

est le coût pour parcourir le chemin γ = (x0 , x1 , x2 , . . . , xn ).


Dans ce contexte, une question typique consiste à chercher le
chemin de coût minimal joignant deux sommets donnés. Imre Simon
Pour adapter nos calculs matriciels à ce contexte, on est (1943–2009)
amené à travailler avec des matrices dont les coefficients sont dans le demi-anneau tropical . L’en-
semble sous-jacent est donc R+ + {∞}, avec les opérations

x ⊕ y := min(x, y) et x ⊗ y := x + y.

On pose x ⊕ ∞ = x (c’est-à-dire que ∞ est l’élément neutre pour ⊕), et x ⊗ ∞ = ∞. Il peut paraı̂tre
étrange d’utiliser  +  comme  multiplication , mais on constate qu’on a bien

x ⊗ (y ⊕ z) = (x ⊗ y) ⊕ (x ⊗ z),

ainsi que les autres propriétés nécessaires pour obtenir un demi-anneau. Le demi-anneau résultant a
été nommé  tropical  par Dominique Perrin, en l’honneur d’Imre Simon qui en a étudié beaucoup
de propriétés et d’applications. Au cours des récentes années, un vaste champ d’études, appelé
géométrie tropicale, s’est développé.
6. Suivant la méthode du schéma de Horner , pour William George Horner, mathématicien anglais (1786–1837).
120 CHAPITRE 5. GRAPHES ORIENTÉS

Lorsqu’on calcule dans le demi-anneau tropical, on obtient

0 ⊕ ∞ = 0, x ⊕ ∞ = x, x⊗0=x et x ⊗ ∞ = ∞.

Il s’ensuit que l’analogue de la matrice identité est


 
0 ∞ ∞ ... ∞
∞ 0 ∞ . . . ∞
 
Idn = ∞ ∞ 0 . . . ∞


 .. .. .... .. 
. . . . .
∞ ∞ ∞ ... 0

Ainsi, à la Figure 5.5, on a le graphe valué accompagné de sa matrice de valuation.

1
b
3
2
 
∞ 3 ∞ ∞ 3
a
c ∞ 1 2 ∞ ∞ 
5  
∞ ∞ ∞ 4 ∞
Aν =  
4
3 3
∞ 5 ∞ 1 ∞
3 ∞ ∞ 2 1
e d
2
1 1

Figure 5.5 – Matrice des valeurs.

On cherche alors à calculer la matrice des coûts suivante :



0
 si x = y,
C(x, y) := ∞ si il n’y a pas de chemin allant de x à y, (5.28)

min{ν(γ) | γ allant de x à y} sinon.

Proposition 5.8. La matrice des coûts est égale à la k-ième puissance tropicale :

C = Akν ,

de la matrice de valuation, où k est tel que Akν = Ak+1


ν , et il existe un tel k avec k ≤ n − 1.
5.9. FLOT DANS UN RÉSEAU 121

5.9 Flot dans un réseau

Un réseau est un graphe valué G = (S, ν), à valeurs 7 dans R, dans lequel il y a un unique sommet
source s, avec d− (s) = 0, et un unique sommet puits p, avec d+ (p) = 0. Dans la plupart des cas,
le graphe est acyclique. Pour chaque arc, on dit que ν(x, y) est la capacité de l’arc. Ces notions
apparaissent naturellement dans l’étude de réseaux électriques, de réseaux de transport, de réseaux
de distribution, de réseaux d’aqueducs, etc.
Pour toute fonction f : S × S → R, et tout sommet x de G, on considère les valeurs :
X X
f − (x) := f (y, x), et f + (x) := f (x, y). (5.29)
y∈S y∈S

Un flot f dans le réseau G est une fonction f : S × S → R telle que


1) pour tout arc (x, y), on a 0 ≤ f (x, y) ≤ ν(x, y),
2) pour tout sommet x (autre que la source et le puits), on a f + (x) = f − (x).
La première condition s’interprète comme le fait que le flot dans chaque arc est limité par sa
capacité, et la seconde comme le fait que la quantité de flot qui entre dans un sommet est la même
que celle qui en sort 8 (il n’y a pas de pertes dans le réseau).
Il découle de ces conditions que f + (s) = f − (p). Cette quantité globale, dénotée V (f ) := f + (s),
est la valeur du flot. Une des questions principales, qui se posent dans l’étude des réseaux, est
de trouver des flots dont la valeur maximale. On dit alors qu’on a un flot maximal dans G. Pour
faciliter l’étude de ces flots maximaux, on considère les notions suivantes. On dit que l’arc (x, y)
est saturé, par le flot f , si f (x, y) = ν(x, y). Un séparateur T du réseau, est un ensemble d’arcs
tel que tout chemin de la source au puits passe par au moins un des arc de T . On dit alors que la
capacité du séparateur est
X
ν(T ) := ν(x, y). (5.30)
(x,y)∈T

Il est naturel de considérer que la capacité du réseau νG est le minimum des capacités de ses
séparateurs :
νG = min{ν(T ) | T séparateur de G}. (5.31)
Ceci est rendu plus clair par le lemme suivant.

Lemme 5.9. Pour tout réseau G, la capacité d’un séparateur T , de G, est toujours plus grande ou
égale à la valeur d’un flot dans G. Si la valeur de f est égale à la capacité de T , alors tous les arcs
de T sont saturés.
7. On peut considérer des valuations plus générales, avec valeurs dans un demi-anneau ordonné.
8. Dans le contexte des réseaux électriques, c’est la première loi de Kirchhoff.
122 CHAPITRE 5. GRAPHES ORIENTÉS

Preuve. 

Le théorème suivant caractérise les flots maximaux.

Théorème 5.10 (Ford-Fulkerson). Dans un réseau G, la valeur d’un flot maximal f est égale à
la capacité de G :
V (f ) = νG .

En guise de démonstration de ce théorème, nous allons voir comment construire algorithmiquement


un flot maximum dans un réseau. On commence par construire un flot dans lequel chaque chemin
allant de la source au puits contient au moins un arc saturé. On dit qu’un tel flot est complet.
1) En premier lieu, on choisit un flot f (de départ) qui sera successivement modifié pour obtenir,
en fin de course, un flot complet. On peut toujours choisir ce flot de départ comme étant
le flot nul , f (x, y) = 0, pour tout (x, y) dans A. Cependant, on peut souvent trouver un
meilleur flot de départ (qui est plus grand), en exploitant les particularités du problème.
2) On  améliore  successivement le flot f de la façon suivante, jusqu’à l’obtention d’un flot
complet. En effet, si f n’est pas complet, il existe 9 un chemin

γ = (x0 , x1 , . . . , xn ),

allant de la source s = x0 au puits p = xn , le long duquel aucun des arcs n’est saturé :
c.-à-d. : f (xi , xi+1 ) < ν(xi , xi+1 ). On peut alors considérer le flot f 0 :
(
f (x, y) si l’arc (x, y) n’est pas dans γ,
f 0 (x, y) := (5.32)
f (x, y) + ε sinon,

avec ε égal à
ε := min{ν(x, y) − f (x, y) | (x, y) dans γ}.

3) On répète l’étape 2) jusqu’à l’obtention un flot complet.


À partir de ce flot complet, on construit un flot maximal en répétant le processus suivant tant que
cela est possible. On commence par marquer récursivement certains sommets du réseau G d’un
 + , ou d’un  − , comme suit.

1) La source s est marquée d’un +.


2) Si x est marqué, et (x, y) est un arc non saturé par f , alors on marque y d’un +.
3 Si x est marqué, et (y, x) est un arc pour lequel f (y, x) > 0, alors on marque y d’un −.

9. On trouve un tel chemin par une exploration facile à mettre en place. Voir Exercice 5.14.
5.10. CHEMINS ET MOTS (∗) 123

À la fin de ce processus de marquage, si le puits n’est pas marqué alors le flot est maximal et on a
terminé. Sinon, le puits est forcément marqué d’un +, et il existe un chemin, constitué de sommets
marqués, allant de la source au puits :

γ = (x0 , x1 , . . . , xn ), où s = x0 , et xn = p.

on construit un nouveau flot f 0 , égal à f en dehors de ce chemin, en posant


a) f (xi , xi+1 ) := f (xi , xi+1 ) + ε, si xi+1 est marqué d’un +,
b) f (xi+1 , xi ) := f (xi+1 , xi ) − ε, si xi+1 est marqué d’un −,
avec ε égal au minimum des valeurs ν(xi , xi+1 ) − f (xi , xi+1 ) (pour les xi+1 marqués d’un +) et
f (xi+1 , xi ) (pour les xi+1 marqués d’un −).

(∗)
5.10 Chemins et mots

En associant des lettres 10 à chaque arc d’un graphe orienté,

θ : A ,→ {a, b, c, . . . },

de façon à ce qu’on ait des lettres distinctes associées aux arcs issus
d’un même sommet,

θ(x, y) 6= θ(x, z) si y 6= z,

on peut associer aux chemins des mots, c’est-à-dire une suite de


lettre. On dit que la lettre associée à un arc est son étiquette. Ainsi, Leonardo Fibonacci
on obtient le mot θ(γ) de n-lettres (1170 – 1250)
θγ := θ1 θ2 · · · θn , en posant θi = θ(xi−1 , xi ), (5.33)

qui code le chemin (x0 , x1 , . . . , xn ) allant de x = x0 à y = xn . À l’étape k, le long d’un chemin


ainsi codé, on passe donc du sommet xk−1 au sommet xk , en empruntant l’unique arc issu de xk−1
ayant la lettre θk comme étiquette. On dénote ε le mot vide, qui correspond au chemin vide. Selon
ce codage, les chemins de longueur n, allant du sommet • à lui-même dans le graphe orienté F sont
énumérés à la Figure 5.6. Observons que, chaque chemin γ dans F n−1 (•, •), peut se prolonger par
la boucle a pour donner un chemin dans F n (•, •). De plus, chaque chemin γ dans F n−2 (•, •), peut
se prolonger par l’ajout de ba pour donner aussi un chemin dans F n (•, •). En résumé,
n o n o
F (n) (•, •) = θ · a θ ∈ F n−1 (•, •) + θ · ba θ ∈ F n−2 (•, •) .

10. En fait, tout ceci est encore une fois un cas de graphe valué. La valuation est dans le demi-anneau des sommes
formelles de  mots , avec comme multiplication la concaténation de mots.
124 CHAPITRE 5. GRAPHES ORIENTÉS

n Chemins de longueur n de • à •
b
0 {ε}
1 {a}
2 {aa, ba} a
3 {aaa, baa, aba} a
4 {aaaa, baaa, abaa, aaba, baba}
.. ..
. .

Figure 5.6 – Chemins dans le graphe de Fibonacci.

Si Fn désigne le nombre d’éléments de F n (•, •), on a donc la récurrence

Fn = Fn−1 + Fn−2 , avec F0 = F1 = 1, (5.34)

Les nombres Fn sont donc les fameux nombres de Fibonacci , dont les premières valeurs sont

n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 . . .
Fn 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 . . .

On vérifie facilement par récurrence que les puissances de la matrice d’adjacence du graphe de
Fibonacci donne  n  
1 1 Fn Fn−1
= , (5.35)
1 0 Fn−1 Fn−2
par le biais de l’égalité     
1 1 Fn−1 Fn−2 Fn Fn−1
= ,
1 0 Fn−2 Fn−3 Fn−1 Fn−2
qui découle de (5.34). En passant, soulignons que les nombres de Fibonacci admettent de nombreuses
autres interprétations combinatoires.
5.11. CHAÎNES DE MARKOV(∗) 125

5.11 Chaı̂nes de Markov(∗)

Un autre cas spécial de graphe valué donne la notion de chaı̂ne de Markov .


Dans ce cas, le poids d’un arc (x, y) est une probabilité pxy (c.-à-d. :
pxy ∈ [0, 1]), avec la condition que
X
pxy = 1, (5.36)
y∈S

pour chaque sommet x de G. On convient ici que pxy = 0, si (x, y) n’est


pas un arc du graphe. La somme (5.36) n’a donc vraiment lieu que sur
les sommets y pour lesquels il y a une arc de x à y, donc sur les voisins de
x. L’intention est ici de décrire un processus aléatoire de cheminement
Andrei Markov
dans un graphe.
(1856–1922)
Étant donné qu’on se situe au sommet x à un certain moment, pxy donne
la probabilité d’aller au sommet y au moment suivant. La condition (5.36) est donc naturelle,
puisqu’elle assure qu’en chaque sommet on a une distribution de probabilité sur le choix du voisin
où se déplacer à partir du sommet.
Pour simplifier la discussion, supposons encore une fois que [n] est l’ensemble des sommets du
graphe. On s’intéresse à la probabilité de se retrouver en un certain sommet j à l’instant k, sachant
qu’à chaque instant on passe d’un sommet à un sommet voisin selon la probabilité spécifié par la
chaı̂ne de Markov. Bien entendu, cela dépend du point de départ. Pour calculer le tout, on passe
par la matrice de transition n × n
T := (pij )1≤i,j≤n ,
Par exemple, on a la chaı̂ne de Markov suivante, en compagnie de sa matrice de transition
1/2
x x
 
2@@ 3 0 1/2 1/2
1/2@ 1/2 T := 1/2 0 1/2.
@x
1/2 1/2 0
1
On vérifie par calcul que
 k  
0 1/2 1/2 1/3 1/3 1/3
1/2 0 1/2 ' 1/3 1/3 1/3,
1/2 1/2 0 1/3 1/3 1/3
pour k assez grand. En fait, l’approximation est déjà assez bonne avec k = 10.
L’étude des chaı̂nes de Markov est un sujet vaste, avec beaucoup d’applications. Pour se familiariser,
on peut consulter le site :
126 CHAPITRE 5. GRAPHES ORIENTÉS

Chaı̂nes de Markov

5.12 Ordres(∗)

La notion de graphe acyclique est intimement liée à la notion d’ordre. Mettre en ordre les éléments
d’un ensemble est non seulement naturel, mais cela est parfois essentiel pour pouvoir analyser
et comprendre un problème. De plus, lorsqu’on cherche à compter les éléments d’un ensemble de
structures, le fait de savoir les énumérer (les présenter successivement) dans un certain ordre facilite
grandement le travail. Bref, la notion d’ordre est essentielle pour toutes sortes de raisons 11 .
Rappelons qu’une relation d’ordre (on dit aussi un ordre)  ≺  sur un ensemble S, est n’importe
quelle relation qui est à la fois antiréflexive, antisymétrique et transitive. Si le couple (x, y) fait partie
de la relation d’ordre, on écrit x ≺ y, et on dit que x est plus petit à y. En formule,  ≺  est un
ordre sur S si et seulement si, pour tout x, y et z dans S, on a
(a) x 6≺ x,
(b) si x ≺ y alors y 6≺ x,
(c) si x ≺ y et y ≺ z, alors x ≺ z.
Pour chaque relation d’ordre, le couple (S, ≺) est un graphe acyclique. On écrit x  y pour signifier
que x est plus petit que y (x ≺ y), ou x = y. Un exemple typique d’ensemble ordonné est obtenu en
considérant la relation d’inclusion sur l’ensemble P[S], des parties de S. La Figure 5.7 présente 12
l’ensemble ordonné (P[{a, b, c}], ⊂).
Attention, la définition d’ensemble ordonné ne signifie pas que {a, b, c}
l’on puisse comparer tous les éléments de l’ensemble, et cette @
notion mathématique ne coı̈ncide donc pas avec la notion utilisée @
 dans la vie courante . Cette dernière correspond plutôt au {a, b} {a, c} {b, c}
concept d’ordre total au sens ci-dessous. @ @
@ @
Un ordre total (ou linéaire)  < , est un ordre sur S pour lequel {a} {b} {c}
tous les éléments de S sont comparables deux à deux, c.-à-d. : @
pour chaque x et y distincts dans S, on a soit x < y ou y < x. @
Une telle relation correspond à une orientation acyclique des arcs ∅
du graphe complet sur les éléments de S. Ainsi, la Figure 5.8 Figure 5.7 – Treillis des sous-
présente tous les ordres totaux sur l’ensemble A = {a, b, c}. Les ensembles de {a, b, c}
ordres possibles sur {a, b, c} incluent non seulement ces 6 ordres
totaux, mais aussi les 13 autres de la Figure 5.9, pour un total de 19. Il n’y a pas encore de formule
connue pour le nombre On , d’ordres sur un ensemble à n éléments. On connaı̂t au moins les valeurs
11. Pensez au côté peu pratique d’un dictionnaire dans lequel les mots seraient disposés au hasard.
12. Sous la forme du diagramme de Hasse de l’ordre, au sens défini un peu plus loin.
5.12. ORDRES(∗) 127

tc tb tc ta tb ta

tb tc ta tc ta tb
6 6 6 6 6 6
6 6 6 6 6 6
ta ta tb tb tc tc
6 6 6 6 6 6

Figure 5.8 – Les 6 ordres totaux sur {a, b, c}.

tb ta tc ta tc tb
tc tc tb tb tc tc
ta tb ta tc tb tc
6 6 6 6 6 6

tc tb tc ta tb ta ta tb tc
A  A  A  A A A
 AK  AK  AK
At At At c tc Atb tc Ata tb Ata
K 
A  K 
A  AK 
a b

ta tb tc

Figure 5.9 – Les 13 autres ordres sur {a, b, c}.

suivantes :

n 0 1 2 3 4 5 6 7 8 9 ...
On 1 1 3 19 219 4231 130023 6129859 431723379 44511042511 . . .

Apparemment, la plus grande valeur connue est pour n = 16, et c’est :

241939392597201176602897820148085023.

Diagrammes de Hasse

Pour des éléments distincts x et y d’un ensemble ordonné (S, ≺), on dit que y couvre x, s’il n’y a
aucun élément de S se situant entre x et y. On écrit alors x →≺ y (ou plus simplement x → y).
Toute l’information sur la relation d’ordre peut-être entièrement récupérée (voir Section 5.4) à
partir de la relation de couverture. La relation de couverture est antitransitive, c.-à-d. :

x→y et y→z implique y 6→ z.


128 CHAPITRE 5. GRAPHES ORIENTÉS

Le graphe orienté associé à la relation de couverture est le dia-


gramme de Hasse de l’ordre. On le représente habituellement par
un graphe simple dessiné de façon telle que toutes les arêtes soient
orientées du bas vers le haut. On récupère la relation d’ordre à par-
tir de son diagramme de Hasse, simplement en calculant les chemins
allant du bas vers le haut dans le diagramme de Hasse. On a donc
x ≺ y, si et seulement s’il y a un chemin

x0 → x1 → x1 → · · · → xn ,

dans le diagramme de Hasse, avec x = x0 et y = xn . Helmut Hasse


Ainsi, on a le diagramme de Hasse de la Figure 5.10, qui décrit une (1898–1979)
relation de couverture sur l’ensemble

{(123, 213), (123, 132), (213, 231), (132, 312), (231, 321), (312, 321))},

sur l’ensemble {123, 132, 213, 231, 312, 321}. Lorsque la relation d’ordre est totale, le diagramme de

321
v
@
@
231 v @v312

213 v v132
@
@
@v
123
Figure 5.10 – Un diagramme de Hasse

Hasse correspondant est une chaı̂ne.


5.13. JEUX IMPARTIAUX 129

5.13 Jeux impartiaux

Un jeu impartial , à deux joueurs sur un graphe acyclique G = (S, A), se déroule de la façon suivante.
Au départ, un jeton se situe sur un sommet x0 . À tour de rôle, chaque joueur déplace le jeton du
sommet où il se trouve vers un sommet voisin (donc le long d’un arc (x, y)). La partie s’achève
lorsqu’un joueur ne peut pas déplacer le jeton, c’est donc dire que le jeton se trouve alors sur un
puits. Ce joueur est le perdant. Le fait que le graphe soit acyclique assure que la partie se termine
forcément après un nombre fini d’étapes. L’histoire d’une partie se résume donc à un chemin

γ = (x0 , x1 , x2 , . . . xn ),

avec xn un puits. Si n est impair, alors le second joueur est perdant. Sinon, c’est le premier qui
est perdant. Parmi les jeux bien connus qu’on peut envisager de ce point de vue, on retrouve par
exemple le tic-tac-toe, et le jeu de Nim (dont on reparlera ci-dessous).
Pour un sommet de départ x0 donné, on cherche à
savoir s’il y a une stratégie gagnante pour le premier
joueur. On dit alors que x0 est une position gagnante
pour le premier joueur. Avec ce point de vue, on in-
troduit la terminologie suivante. On dit que x0 est une
N -position, si le premier joueur peut faire en sorte de
gagner, quels que soient les choix de mouvements de son
adversaire. Sinon, le sommet x0 est une P -position.
On détermine itérativement les N -positions (et les P -
positions), comme suit. À chaque étape du processus,
si tous les voisins d’un sommet y sont des N -positions,
alors on déclare que y est une P -position. En parti-
culier, on amorce le processus en remarquant que les
Figure 5.11 – Noyau de Grundy
puits sont forcément des P -positions, puisqu’ils n’ont
aucun voisin. S’il existe un voisin de y qui est une P -position, alors on déclare plutôt que y est
une N -position. Pour chaque sommet du graphe on détermine ainsi s’il est une N -position, ou une
P -position, après un nombre fini d’étapes de calcul. À la Figure 5.11, on a marqué en rouge les
P -positions, et en bleu les N -positions d’un graphe acyclique.
Pour un jeu démarrant en une N -position, la stratégie gagnante du premier joueur consiste à tou-
jours déplacer le jeton vers une des P -position voisine. Le second joueur doit alors obligatoirement
déplacer le jeton vers une N -position, ce qui permet au premier joueur d’appliquer de nouveau sa
stratégie. Après un nombre fini d’étapes, le premier joueur peut déplacer le jeton vers un puits et
ainsi gagner la partie. Pour un jeu démarrant en une P -position, le premier joueur doit déplacer le
point en une N -position, et c’est alors le second joueur qui a une stratégie gagnante.
130 CHAPITRE 5. GRAPHES ORIENTÉS

Une approche plus calculatoire passe par la fonction de Sprague-Grundy 13 (ou plus simplement
fonction de Grundy) G : S → N, du graphe acyclique G = (S, A). On la définit simplement en
posant récursivement
G(x) := min(N \ {G(y) | (x, y) ∈ A}). (5.37)
Autrement dit, G(x) est le plus petit entier qui n’a pas été utilisé comme valeur de G pour un voisin
de x. En particulier,
G(x) := 0 si VG (x) = ∅, (5.38)
c’est-à-dire lorsque x est un puits. Le fait que le graphe G soit acyclique assure que (5.37) est une
bonne définition. On montre par récurrence que

Proposition 5.11. Pour un graphe acyclique G, un sommet x est une P -position de G, si et


seulement si G(x) = 0.

Le noyau de Grundy d’un graphe acyclique G est l’ensemble

ΓG := {x ∈ S | G(x) = 0 }. (5.39)

C’est donc l’ensemble des P -positions dans G.

Jeu de Nim

Dans le jeu de Nim 14 , deux joueurs enlèvent à tour de rôle un nombre quelconque (mais plus grand
que 1) de  jetons  de l’un de n tas distincts. Le gagnant est celui qui enlève le (ou les) dernier
jeton. À chaque étape on a donc une configuration

x := (x1 , x2 , x3 , . . . , xn ),

avec les 0 ≤ xi ≤ ki , où ki est le nombre de jetons dans le tas i au départ. Un mouvement consiste
à soustraire au moins 1 à exactement l’un de ces xi , mais on peut soustraire aussi n’importe qu’elle
valeurs ≤ xi . Le perdant est celui qui se retrouve devant la configuration xi = 0, pour tout i.
La fonction de Sprague-Grundy du jeu de Nim a été décrite par Bouton 15 en 1901 (voir [8]). Pour
la calculer, on écrit chaque nombre xi en binaire et on calcule la fonction de Grundy, au moyen de
la somme digitale  ⊕ , en posant

G(x) := x1 ⊕ x2 ⊕ . . . ⊕ xn . (5.40)

13. Voir [14] et [28].


14. Le nom est apparemment dû à Bouton.
15. Charles Leonard Bouton de l’Université de Harvard, (1869-1922).
5.13. JEUX IMPARTIAUX 131

Rappelons que la somme digitale, pour deux entiers écrits en binaires

x = (αk · · · α2 α1 α0 )2
= α0 + α1 2 + α2 4 + . . . + αk 2k ,
y = (βk · · · β2 β1 β0 )2
= β0 + β1 2 + β2 4 + . . . + βk 2k ,

est définie comme


x ⊕ y := (γk · · · γ2 γ1 γ0 )2 , (5.41)
avec γi := (αi + βi mod 2). Ainsi,

13 ⊕ 7 = 11012 ⊕ 1112
= 102
= 2

Cette somme est associative, commutative, avec 0 comme neutre. De plus, comme n ⊕ n = 0, on a
un inverse. Il s’ensuit que
x⊕z =y⊕z ssi x = y. (5.42)
On a une stratégie gagnante pour le premier joueur si, au départ, les tas sont tels que

k1 ⊕ k2 ⊕ . . . ⊕ kn 6= 0. (5.43)

Partant d’un configuration x := (x1 , x2 , x3 , . . . , xn ), un joueur fait passer de xi à yi < xi le


nombre de jetons dans le tas i (en enlevant xi − yi jetons), pour obtenir la nouvelle configuration

y := (y1 , y2 , y3 , . . . , yn ),

avec bien sûr yj = xj , pour j 6= i. Le changement correspondant dans la valeur de la fonction de


Grundy est donc de passer de
G(x) = x1 ⊕ x2 ⊕ . . . ⊕ xn ,

G(y) = G(x) ⊕ xi ⊕ yi . (5.44)
Comme les P -positions sont les configurations pour lesquelles on a

x1 ⊕ x2 ⊕ . . . ⊕ xn = 0, (5.45)

la stratégie gagnante consiste simplement à trouver i et yi pour que G(x) ⊕ xi ⊕ yi = 0.


132 CHAPITRE 5. GRAPHES ORIENTÉS

5.14 Exercices

5.1. Montrer l’égalité 5.2 en comptant les arcs de G selon la source, puis selon le but.

5.2. Compter le nombre de chemins de longueur k, allant de 1 à n dans le graphe orienté sur [n],
dont l’ensemble d’arcs est
a) {(i, j) | 1 ≤ i ≤ n, et 1 ≤ j ≤ n}.
b) {(i, j) | 1 ≤ i ≤ j ≤ n}.
c) {(i, j) | j − i ≤ 2}.

5.3. Montrer que le nombre de cycles de longueur k, dans un graphe orienté G, est égal à la trace
de la matrice AkG . Rappelons que la trace d’une matrice est la somme des éléments de sa diagonale
principale.

5.4. Montrer que tout chemin dans un graphe acyclique est de longueur inférieure ou égale au
diamètre du graphe. En déduire que la matrice d’adjacence d’un graphe acyclique est nilpotente,
c’est-è dire qu’une de ses puissances est nulle.

5.5. Montrer qu’un graphe orienté G = (S, A) est fortement connexe si et seulement si sa fermeture
transitive donne le graphe complet, c’est-à-dire que G∗ = (S, S × S).

5.6. Montrer qu’un graphe orienté est acyclique si et seulement si la matrice (Id− χG ) est inversible.
Suggestion : Montrer que pour un graphe acyclique, les coefficients de la matrice (Id − χG )−1 (qui
existe) correspondent aux nombres de chemins reliant les sommets dans le graphe. En particulier,
il y a un nombre fini de tels chemins.

5.7. Montrer directement qu’un arbre sur n sommet admet 2n−1 orientations acycliques.

5.8. Montrer que toute endofonction admet au moins un élément récurrent.

5.9. Soit A la matrice d’adjacence booléenne d’un graphe acyclique. Montrer que la matrice
booléenne
A∗ := Id + A + A2 + A3 + . . .,
est antisymétrique, ce qui revient à dire que pour i 6= j on a A∗ (i, j) = 1 si et seulement si
A∗ (j, i) = 0. On rappelle que dans ce contexte 1 + 1 = 1.

Programmation mathématique

5.10. Pour deux graphes orientés donnés G1 = (S1 , A1 ) et G2 = (S2 , A2 ), écrire une procédure qui
engendre tous les ismorphismes de G1 vers G2 .
5.14. EXERCICES 133

5.11. Pour un graphe orienté donné G = (S, A) et x, y dans S, écrire une procédure récursive qui
engendre tous les chemins de x vers y dans G. Suggestion : exploiter la composition de chemins.

5.12. Construire une procédure qui, pour un ensemble fini A donné, engendre
c) toutes les endofonctions sur A.
d) aléatoirement (avec distribution uniforme) ces mêmes structures.

5.13. Concevoir une procédure qui, étant donnée une endofonction f : S → S, calcule sa décompo-
sition en composantes connexes.

5.14. Étant donné un flot non complet dans un réseau, concevoir un algorithme qui recherche un
chemin non saturé, allant de la source au puits. Pour ce faire, il suffit de trouver un chemin de la
source au puits dans le graphe orienté obtenu en ne conservant que les arcs du réseau qui ne sont
pas saturés.
134 CHAPITRE 5. GRAPHES ORIENTÉS
Chapitre 6

Mots, langages, et automates

6.1 Introduction.

L’étude mathématique des  langages  et des  mots  revêt


une importance autant pratique que théorique. De ce point
de vue, un mot n’est qu’une suite de caractères, et un lan-
gage n’est qu’un ensemble de mots. La signification ne joue
aucun rôle ici. D’une part, les applications sont multiples, par
exemple en informatique pour décrire la syntaxe des langages
de programmation, ou encore en génomique pour l’étude du
séquençage de l’ADN, qui se présente comme un long mot :
· · · acagatacaatgatagagattgagagcgaatag · · ·
avec les lettres a (Adénine), c (Cytosine), g (Guanine) et t M. P. Schutzenberger
(Thymine) codant les nucléobases dont l’ADN est constitué. (1920–1996)
Une autre application classique concerne le traçage d’une droite sur un écran qui, lorsqu’on la
regarde de très près, ressemble aux pixels grisés de l’illustration ci-dessous.

Cette droite peut se coder alors comme xxyxxyxxxyxxyxx, et il en ressort qu’on peut efficacement
manipuler des droites, par le biais de mots.

135
136 CHAPITRE 6. MOTS, LANGAGES, ET AUTOMATES

Du point de vue plus théorique, on a la hiérarchie de Chomsky 1 -Schützenberger 2 , dans laquelle


les langages (comme sous-ensembles abstraits de mots) sont classifiés selon la nature plus ou moins
complexe des outils de calcul nécessaires à leur manipulation. Cela va de l’ordinateur au simple
automate.

6.2 Mots

Pour introduire la notion de mot, on commence par choisir un alphabet A, qui est simplement un
ensemble fini (quelconque) de lettres. En pratique, il est bien plus agréable de choisir A de façon
à ce que ses éléments se prêtent bien aux constructions suivantes, mais cela n’est qu’une question
de goût. Tout ensemble fini peut servir d’alphabet. Par exemple, on pourra choisir A comme étant
l’un des ensembles suivants

{a, b, c, d, . . . , z}, {0, 1}, {a, c, g, t},


{•, •, •}, ou {♣, ♦, ♥, ♠}.

Un mot de longueur n sur l’alphabet A est simplement une suite quelconque de n lettres

w = w1 w2 w3 . . . wn , avec wi ∈ A, (6.1)

qui sont écrites successivement, sans virgules séparatrices. Autrement dit, au détail près de la
présentation, ce sont les éléments de An . Le mot vide est noté 1 (ou encore ε, par exemple dans le
cas où 1 est une lettre de l’alphabet). Insistons encore sur le fait qu’il n’y a ici aucune prétention de
vouloir attribuer une signification à un mot. En particulier, on n’a aucun besoin d’un dictionnaire.
Par exemple, sur l’alphabet A = {a, c, g, t}, on a le mot de longueur 218

ctaaggcccaaatctcagccatgcatcggggagtacaatccgtatggccaacaactggcg
cgtacgtaaagtctcctttctcgatggtccataccttagatgcgttagcattaatcaggc
aacggctctctagatagagccctcaaccggagtttgaagcatggcttctaactttactca
gttcgttctcgtcgacaatggcggaactggcgacgtg

qui décrit une portion de protéine d’un virus. Comme autres exemples, pour l’alphabet A = {a, b, c},
on a les mots (respectivement de longueur 0, 1 et 2) des ensembles

A0 = {1}, A1 = {a, b, c}, et


2
A = {aa, ab, ac, ba, bb, bc, ca, cb, cc}.
1. Noam Chomsky, MIT.
2. M.P. Schutzenberger est l’ancêtre mathématique de plusieurs chercheurs du Lacim à l’UQAM.
6.2. MOTS 137

On dénote A∗ l’ensemble de tous les mots, c.-à-d. :



X
A∗ = An . (6.2)
n=0

Avec A = {0, 1}, on a donc


A∗ = {ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, 101, 110, 111, . . . }
Bien entendu, la longueur |w| d’un mot w est le nombre de lettres qu’il contient, et les mots de
longueur 1 s’identifient aux lettres. On dit qu’il y a occurrence de la lettre x en position i dans
w, si wi = x. Pour w un mot sur l’alphabet A, et x une lettre de A, on désigne |w|x le nombre
d’occurrences de x dans w. Clairement, pour un alphabet de k lettres, on a k n mots de longueur n.
L’opération de concaténation (dénotée multiplicativement), entre deux mots u = u1 u2 u3 . . . un et
v = v1 v2 v3 . . . vk , donne le mot
u · v = u1 u2 u3 . . . un v1 v2 v3 . . . vk , (6.3)
dont la longueur est la somme des longueurs de u et de v. On a en fait la bijection

An × Ak −→ An+k , (6.4)
dont l’inverse correspond à  couper  un mot w = u · v, de longueur n + k, en son unique préfixe
u de longueur n, suivi de son unique suffixe v de longueur k. Tous les préfixes possibles du mot
abbabaab (sur l’alphabet A) sont
{abbabaab, abbabaa, abbaba, abbab, abba, abb, ab, a, 1},
tandis que les suffixes du même mot sont
{1, b, ab, aab, baab, abaab, babaab, bbabaab, abbabaab},
puisqu’on a les décompositions suivantes
{abbabaab·1, abbabaa·b, abbaba·ab, abbab·aab, abba·baab, abb·abaab, ab·babaab, a·bbabaab, 1·abbabaab}
La concaténation est associative, et admet le mot vide comme élément neutre. Munissant A∗ de
cette opération de concaténation, on obtient le monoı̈de 3 des mots sur A.
Avec ce point de vue algébrique, il devient naturel de considérer la puissance k-ième d’un mot w,
défini récursivement comme : 
w · wk−1 si k > 0
k
w := (6.5)
1 si k = 0.
On a donc (ba)4 = babababa.
3. Un ensemble muni d’une opération associative avec un élément neutre est appelé monoı̈de.
138 CHAPITRE 6. MOTS, LANGAGES, ET AUTOMATES

6.3 Langages

Pour nous, un langage n’est qu’un sous-ensemble de mots possibles. Autrement dit, c’est un sous-
ensemble quelconque de A∗ :
L ⊆ A∗ . (6.6)
On ne s’interroge donc pas sur le fait que des mots puissent avoir un  sens  dans ce langage, mais
on s’intéresse plutôt à la façon dont les mots d’un langage sont construits. L’accent est mis sur le
calcul des langages, l’analyse de la structure des mots qui le compose, ou encore sur leur construc-
tion. D’autre part, on s’intéressera aussi à la classification de la  complexité  algorithmique de
langages.
Pour un alphabet donné, disons A = {a, b}, on a des langages finis comme

∅, {a, b}, ou encore {w |w|a = k et |w|b = n − k},

et des langages infinis comme

{an bn | n ∈ N}, ou encore {1, a, aa, aaa, . . . }.

On convient d’écrire Lk pour le langage ne contenant que les mots de longueur k dans L, c.-à-d. :

Lk := { w ∈ L | |w| = k}. (6.7)

Les opérations d’union, de produit, et d’étoile permettent de construire de nouveaux langages à


partir de langages donnés. Évidemment, nous n’avons pas à redéfinir l’union de langages. Le produit
L · L0 donne le langage contenant tous les concaténés de mots dans L avec des mots de L0 . On a
donc
L · L0 := {u · v | u ∈ L et v ∈ L0 }. (6.8)
C’est un produit associatif. Attention cependant, il a quelques surprises. Ainsi, on a

A∗ · A ∗ = A∗ .

Pour obtenir des mots dans l’étoile L∗ , on concatène un nombre quelconque de mots de L. C’est
donc dire qu’on a

[

L := Lk , (6.9)
k=0

avec L0 := {1}, et
Lk := L · Lk−1 , (6.10)
si k > 0. Pour illustrer l’opération d’étoile, considérons le langage L = {ab, ba}. On a alors

L∗ = {1, ab, ba, abab, abba, baab, baba, . . . }.


6.3. LANGAGES 139

En passant, on remarque qu’il y a compatibilité entre cette définition et nos usages précédents,
puisque l’ensemble A est lui-même un langage (dont les mots sont les lettres de l’alphabet).
Rappelons qu’on utilise le symbole de somme, entre ensembles, pour désigner le fait qu’on a une
union disjointe. On a alors les identités (voir Exercice 6.1

X
L = Lk , (6.11)
k=0
 

X k
[
L · L0 =  Lj · L0k−j . (6.12)
k=0 j=0

On dit qu’un produit de langage est non-ambigu si et seulement si chaque mot w ∈ L · L0 se


décompose de façon unique comme produit d’un mot u dans L avec un mot v dans L0 , c.-à-d. :
pour tout u, u0 dans L, et v, v 0 dans L0 , on a

u · v = u0 · v 0 , ssi (u = u0 et v = v 0 ). (6.13)

Il est habituel (mais potentiellement moins rigoureux, voir Exercice 6.2) de simplifier la notation
en écrivant simplement w pour le langage L = {w}, qui ne contient que le mot w. Avec cette
convention 4 , on obtient une notation additive pour les langages, qui se présentent maintenant sous
la forme de la somme (formelle) des mots qu’ils contiennent :
X
L= w. (6.14)
w∈L

Ainsi, on a les 3 écritures équivalentes

(a + b)3 = aaa + aab + aba + abb + baa + bab + bba + bbb


= {aaa, aab, aba, abb, baa, bab, bba, bbb}.

En guise d’autre illustration, le langage sur {a, b}, constitué de tous les mots qui contiennent
exactement une occurrence de deux a consécutifs, admet la description

L = (ab + b)∗ a a (ba + b)∗ . (6.15)

4. Très utilisée dans les milieux de l’informatique théorique.


140 CHAPITRE 6. MOTS, LANGAGES, ET AUTOMATES

6.4 Grammaires

Nous allons maintenant voir comment décrire récursivement des langages par le biais  règles de
grammaire  écrites au moyen des opérations introduites ci-haut. Ces règles de grammaires décrivent
comment construire récursivement les mots des langages considérés. Commençons par illustrer
l’approche par un exemple. Le langage des mots de Dyck sur l’alphabet {a, b}, est caractérisé par
les règles de grammaire

D → 1 (6.16)
D → a · D · b · D. (6.17)

On interprète ces règles comme signifiant qu’un mot de Dyck est : soit le mot vide 1, soit un mot
de la forme
a · u · b · v,
où u et v sont eux-mêmes des mots de Dyck (évidemment plus courts). En considérant toutes les
possibilités de satisfaire à ces règles, on trouve que le langage de Dyck est l’ensemble des mots :

{1, ab, abab, aabb, ababab, abaabb, aabbab, aababb, aaabbb, . . . }

Plus généralement, une grammaire (algébrique, ou hors contexte 5 ) est un ensemble fini Γ de règles
de grammaires, qui sont simplement des expressions de la forme

Z → ω, (6.18)

avec ω un mot sur un alphabet B en deux composantes V + A, où Z ∈ V. Les lettres de la partie
V sont des lettres axillaires, appelées variables (souvent en majuscules). Les lettres de la partie A
(souvent des minuscules), sont appelées symboles terminaux . L’intention est de décrire un langage
sur l’alphabet A, comme dans l’exemple ci-haut, où V = {D}, et A = {a, b}. Dans ce cas, il y a
donc une seule variable D et deux symboles terminaux a, b.
Le mécanisme par lequel on obtient un langage à partir d’une grammaire, est par une dérivation
grammaticale, c’est-à-dire une suite

w0 =⇒ w1 =⇒ w2 =⇒ · · · =⇒ wn ,

de mots wi sur l’alphabet B = V + A, où chaque wi =⇒ wi+1 est étape est de la forme

wi = u · Z · v =⇒ u · ω · v = wi+1 ,

avec Z → ω une des règles de la grammaire Γ. Autrement dit, on a obtenu wi+1 en remplaçant Z
par ω dans wi . On dit alors qu’on a dérivé wn à partir de w0 .
5. Il existe une notion plus générale de grammaires dites contextuelles que nous ne présenterons pas ici.
6.5. AUTOMATES DÉTERMINISTES 141

Pour X l’une des variables de la grammaire Γ, les mots du langage L = LΓ,X sont tous les mots de
u ∈ A∗ qu’on peut dériver de X. On dit donc que L est le langage dérivé de X selon la grammaire
Γ. Un exemple illustre bien comment on procède. Considérons la grammaire Γ constituée des règles

B → b B b,
B → A,
A → a A,
A → 1,

où les variables sont A et B, et l’alphabet des lettres du langage est {a, b}. On s’intéresse au langage
dérivé de B. Par exemple, on a

B =⇒ b B b =⇒ bb B bb =⇒ bb A bb =⇒ bba A bb =⇒ bba 1 bb = bbabb.

Le mot bbabb fait donc partie du langage. En fait, on trouve que

L = {bn ak bn | n ≥ 1, et k ≥ 0},
= {bb, bab, baab, . . . bbbb, bbabb, bbaabb, . . . }.

On peut  lire  les règles de la grammaire Γ comme suit :


(1) chaque application de la première règle introduit un b de part et d’autre du centre du mot ;
(2) la seconde règle exige que le centre du mot soit rempli par des a ;
(3) la troisième règle permet d’insérer autant de a qu’on désire au centre du mot ;
(4) la dernière règle permet d’arrêter le processus.

6.5 Automates déterministes

Une autre façon de spécifier un langage est par le biais d’un  automate , c.-à-d. : un modèle abs-
trait de machine de calcul. L’histoire des modèles mathématiques de machines de calculs est longue
et pleine de rebondissements. Elle culmine (pour l’instant) avec l’introduction des ordinateurs mo-
dernes. Les automates considérés ici sont des machines beaucoup plus limitées dans leur capacité
de calculs. Il y en a plusieurs variantes, mais nous ne considérerons que le cas des automates dits
déterministes.
Soit A un alphabet, et E un ensemble fini dont les éléments seront appelés états. Un automate
déterministe α est simplement une fonction

α : A → End[E],
142 CHAPITRE 6. MOTS, LANGAGES, ET AUTOMATES

qui associe à chaque lettre x de A une endofonction αx : E → E. Lorsqu’on les représente en


termes de graphes sagittaux, on place la lettre x sur chaque arc de la fonction associée. Ainsi, pour
A = {a, b} et E = {•, •}, l’automate
αa = {(•, •), (•, •)}, et αb = {(•, •), (•, •)},
se représente comme indiqué à la Figure 6.1. C’est un multigraphe orienté, dont les arcs sont

b
a a
b

Figure 6.1 – Un automate.

étiquetés par les lettres de l’alphabet A. On dit multigraphe, parce qu’il y a potentiellement plusieurs
arcs allant d’un sommet x à un sommet y. Techniquement, un tel multigraphe (qui n’est pas
nécessairement un automate déterministe) est simplement un sous-ensemble du produit cartésien
A × E × E. On interprète alors le triplet (x, e, f ) comme étant un arc allant de e à f , portant
l’étiquette a.
Il est naturel de désigner par x la fonction αx . On fait  fonctionner  un automate au moyen des
mots sur l’alphabet A. En effet, on considère un mot comme fonction composée à partir des fonctions
associées à chacune de ses lettres. L’habitude dans ce domaine est de composer de gauche à droite,
plutôt que de droite à gauche comme on a l’habitude de le faire pour des fonctions. Ainsi, pour un
automate fixé, un mot w = w1 w2 · · · wn devient synonyme de la fonction w = wn ◦ · · · ◦ w2 ◦ w1 ,
selon la convention usuelle de composition de fonction. On évite d’avoir à continuellement tout
retourner, en convenant dorénavant de désigner par e ·α w, ou plus simplement par e · w, l’effet (via
l’automate) du mot w sur un état e dans E. On a alors, pour chaque w ∈ A∗ et e ∈ E :
a) e · 1 = e,
(6.19)
b) e · (u v) = (e · u) · v.
L’interprétation imagée du calcul e · w est la suivante. Partant de l’état e, on suit le chemin, dans
le multigraphe orienté, qui correspond au mot w. Plus précisément, pour chaque lettre x, il y a un
seul arc du multigraphe (l’automate) de la forme (x, e, f ). L’effet de x sur e est d’aller à f , c.-à-d. :
e · x = f . Le processus se déroule ensuite récursivement, en exploitant le fait que
e · (x u) = (e · x) · u = f · u.
Le chemin associé à e · w, pour w = w1 w2 · · · wn , est donc
(e0 , e1 , . . . , en ), avec e = e0 , e · w = en ,
6.6. EXERCICES 143

et ei = ei−1 · wi , pour i allant de 1 à n. Le but en du chemin est donc la valeur de e · w.


Par exemple, avec l’automate de la Figure 6.1, on obtient le résultat suivant 6

• · aabaab = • · abaab
= • · baab
= • · aab
= • · ab
= •·b
= •

Le lien entre la notion d’automate et celle de langage s’établit de la façon suivante. Soit α : A → E
un automate donné, et e ∈ E un état fixé que l’on va appeler initial . On choisit aussi un sous-
ensemble F de E, et on dit que les éléments de F sont des états finaux . Un langage L, sur l’alphabet
A, est reconnu par l’automate α : A → E, avec le choix de e comme état initial et des états finaux
F , si et seulement si on a
w∈L ⇐⇒ e ·α w ∈ F . (6.20)

S’il existe un automate (avec choix d’état initial et d’états finaux) qui reconnaı̂t un langage L, on
dit que le langage est reconnaissable. Un célèbre théorème lie cette notion à celle des langages qu’on
peut décrire avec les opérations introduites ci-haut. En voici l’énoncé, sans démonstration :

Théorème 6.1 (Kleene 7 , 1954). Un langage est reconnaissable si et seulement s’il peut être en-
gendré, à partir des lettres de l’alphabet, à l’aide des trois opérations union, produit et étoile.

6.6 Exercices

6.1. Montrer les identités (6.11) et (6.12).

6.2. (∗) Pour rendre rigoureux la notation additive des langages, on considère l’anneau des séries
QhhAii en les variables non commutatives correspondant aux éléments de A, c.-à-d. : x y 6= y x,
pour x et y dans A. Par définition, les éléments de cet anneau sont les sommes formelles
X
cw w, avec cw ∈ Q, (6.21)
w∈A∗

avec coefficients rationnels.


6. Il est facile du suivre les étapes en déplaçant son doigt sur le dessin.
7. Stephen C. Kleene (1909–1994)
144 CHAPITRE 6. MOTS, LANGAGES, ET AUTOMATES

a) Montrer qu’en posant


 X   X  X
cw w + dw w := (cw + dw ) w,
w∈A∗ w∈A∗ w∈A∗
 X   X  X  X 
cw w · dw w := cu dv w
w∈A∗ w∈A∗ w∈A∗ u·v=w

on obtient un anneau (non commutatif).


b) Montrer qu’on a un unique homorphisme d’anneau Ψ : QhhAii → Q[[z]], vers l’anneau des
séries formelles en la variable z, pour lequel Ψ(x) = z pour chaque variable x dans A, et que
Ψ(L) = L(z), pour tout langage L.

6.3. Montrer qu’il y a bijection entre les mots du langage (a + b)n , et les sous-ensembles de [n].

6.4. Montrer que les mots de Dyck correspondent aux parenthèsages  équilibrés , pour lesquels
à chaque parenthèse ouvrante  ( , il correspond une parenthèse fermante  )  bien placée. Par
exemple, les 5 parenthèsages

( )( )( ), ( )(( )), (( ))( ), (( )( )), et ((( ))).

correspondent aux 5 mots de Dyck : ababab, abaabb, aabbab, aababb, et aaabbb. Plus précisément,
un parenthésage est un mot sur l’alphabet constitué des deux lettres  (  et  ) . Pour chaque
i entre 1 et n, on calcule la différence

di := (nombre de parenthèses ouvrantes avant la position i)


−(nombre de parenthèses fermantes avant la position i).

Le parenthèsage est dit équilibré si et seulement si on a di ≥ 0 pour tout i, et si dn = 0.

6.5. Construire un automate qui reconnaı̂t le langage de l’exemple (6.15).

Programmation mathématique

6.6. Construire une procédure qui, avec comme données un automate, un état et un mot, calcule
le résultat obtenu en appliquant la fonction associée à ce mot à l’état donné.

6.7. Construire une procédure qui, avec comme données un automate, un état initial et des états
finaux fixés, calcule tous les mots de longueur n du langage reconnu par cet automate, avec cet état
initial et ces états finaux.
Chapitre 7

Algèbre(∗)

7.1 Introduction

Nous n’allons qu’esquisser ici le vaste domaine de l’utilisation d’algorithmes dans un contexte
algébrique.

7.2 Algorithme de Gauss-Jordan

Le problème de résoudre un système d’équations


linéaires (à coefficients rationnels, réels, com-
plexes, etc.)

a11 x1 + a12 x2 + . . . + a1n xn = b1 ,


a21 x1 + a22 x2 + . . . + a2n xn = b2 ,
.. (7.1)
.
ak1 x1 + ak2 x2 + . . . + akn xn = bk .

en les variables x1 , x2 , . . . , xn , est l’un des Carl Friedrich Gauss


problèmes les plus fréquemment rencontrés, au- (1777 – 1855)
tant en mathématiques que dans des domaines appliqués très divers de la Physique, la Chimie,
l’Informatique, la Recherche Opérationnelle, le Génie, etc. Il est donc naturel que ce soit l’un des
principaux sujets d’étude d’un premier cours d’algèbre linéaire.
L’algorithme d’élimination de Gauss-Jordan donne une façon efficace de procéder. Il consiste à
transformer le système (7.1) en un système équivalent (qui a les mêmes solutions) et qui est  stan-
dardisé . Cette forme standard finale est unique, et permet de  lire  directement les solutions du

145
146 CHAPITRE 7. ALGÈBRE(∗)

système. Nous allons seulement rappeler le résultat global, puisque les détails ont été (ou seront)
vus dans un autre cours.
On commence par coder le système (7.1) de façon matricielle, comme
 
a11 a12 . . . a1n b1
a21 a22 . . . a2n b2 
(7.2)
 
 .. .. . . .. .. 
 . . . . . 
ak1 ak2 . . . akn bk .

Cette matrice est transformée en une  matrice échelon réduite  par une succession d’opérations
de lignes, qui consiste à
(1) multiplier (ou diviser) une ligne par un scalaire 1 non nul.
(2) échanger deux lignes,
(3) ajouter à une ligne le multiple d’une autre.
Rappelons qu’une matrice est échelon réduite si
(1) la première valeur non nulle de chaque ligne est un 1. On dit que c’est le pivot de cette ligne.
(2) sur chaque colonne correspondant à un pivot de ligne, il y a une seule valeur non nulle. C’est
le 1 correspondant au pivot.
À chaque matrice (7.2), on peut associer une unique matrice échelon réduite obtenue par une suite
d’opération de ligne. L’algorithme de Gauss-Jordan organise se calcule de façon systématique.

7.3 Algorithme d’Euclide pour polynômes

Un plus grand commun diviseur d(x) de polynômes 2 f (x) et g(x) est caractérisé (à un multiple
constant non nul près) par le fait que
(1) d(x) divise f (x) et g(x), et
(2) Si c(x) divide f (x) et g(x), alors c(x) divise d(x).
Tout comme pour les entiers, on a l’algorithme d’Euclide pour le calcul d’un PGCD de polynômes.
Il est basé sur le fait que d(x) est un PGCD pour f (x) et g(x), si et seulement c’est un PGCD pour
g(x) et r(x), avec r(x) donné par (C.5). Illustrons par un exemple, pour bien constater qu’on a le
même processus que dans le cas des entiers. Les étapes du calcul du PGCD des polynômes x54 − 1

1. Un nombre rationnel, réel, ou complexe, selon le contexte.


2. Voir l’appendice C.1 pour plus de détails sur les polynômes.
7.4. BASES DE GRÖBNER 147

et x30 − 1 sont

x54 − 1 = x24 · (x30 − 1) + (x24 − 1), et donc h x30 − 1, x54 − 1 i = h x24 − 1, x30 − 1 i,
x30 − 1 = x6 · (x24 − 1) + (x6 − 1), = h x6 − 1, x24 − 1 i,
x24 − 1 = (x18 + x12 + x6 + 1) · (x6 − 1) + 0, = h 0, x6 − 1 i,
= x6 − 1.

Le calcul du PGCD d(x), de f (x) et de sa dérivée f 0 (x), donne des informations intéressantes. En
particulier, si a est une racine de d(x), alors

f (x) = (x − a)2 q(x), pour un certain q(x).

Une formulation élégante de ces notions passe par le concept d’idéal d’un anneau (voir appen-
dice C.2).

7.4 Bases de Gröbner

En fait, l’algorithme de Gauss-Jordan, et l’algorithme d’Euclide


pour des polynômes, sont deux cas spéciaux d’un même algo-
rithme, dû à Buchberger, qui permet de transformer sous forme
standardisée un système d’équations polynomiales. C’est Buch-
berger qui, en 1965, a proposé le nom de  base de Gröbner ,
en l’honneur de son directeur de thèse, mais en fait cette no-
tion a été introduite bien plus tôt par Gordan. Non seulement
la notion de base de Gröbner joue un rôle crucial dans les as-
pects calculatoires de la géométrie algébrique, mais elle a aussi
de nombreuses applications pratiques en théorie des graphes,
calcul formel, statistique, robotique, cryptographie, etc. Paul Albert Gordan
(1837 – 1912)
L’idée générale est la suivante. Afin de simplifier un système
d’équations (polynomiales)

f1 = 0, f2 = 0, f3 = 0, . . . , fn = 0, (7.3)

on  combine  judicieusement les équations de (7.3) pour produire de nouvelles identités (plus
simples). À cette fin, on exploite le fait que
Si fi = 0 et fj = 0 alors fi + g fj = 0.
La discussion de l’algorithme comme tel est un peu trop longue pour ces notes, mais voici un
148 CHAPITRE 7. ALGÈBRE(∗)

exemple de ce qu’il donne. Pour le système d’équations

x + y + z = 1,
x2 + y 2 + z 2 = 2, (7.4)
x3 + y 3 + z 3 = 3,

l’algorithme de Buchberger (avec les options correctement choisies) donne le système équivalent

x + y + z = 1,
2 z2 + 2 zy + 2 y2 − 2 z − 2 y = 1, (7.5)
6 z 3 − 6 z 2 − 3 z = 1.

On résout facilement ces équations en partant de la dernière.


Voici un exemple plus complexe lié à la théorie des graphes. Pour un graphe G = ([n], A), on cherche
à calculer si ce graphe admet une k-coloration. Pour ce faire, on considère n variables x1 , x2 , . . . , xn ,
et les équations suivantes. Il y a une équation pour chaque sommet i, et une équation pour chaque
arête {i, j} (avec i < j), qui sont :

xki = 1, et xk−1
i + xik−2 xj + . . . + xi xjk−2 + xk−1
j = 0. (7.6)

Le résultat est que g est k-colorable, si et seulement si le système (7.6) admet au moins une solution.
En fait chaque solution donne une coloration. On calcule une base de Gröbner de (7.6), et alors on
a les k-coloration de G. Soulignons que, lorsque l’équation xi − xj se déduit des équations données,
alors les sommets i et j ont forcément la même couleur.
L’exemple suivant est dû à Hillar et Windfeldt (2006). Lors- 1 2
qu’on cherche, avec l’approche ci-haut, les 3-colorations du
graphe de la Figure 7.1, on trouve (avec les bonnes options) 5 6
la base de Gröbner constituée des polynômes
12 7
(a) x2 − x11 , x3 − x12 , x4 − x12 , x6 − x11 , x7 − x12 , et
x9 − x11 , 11 8
(b) x1 + x11 + x12 , x5 + x11 + x12 , x8 + x11 + x12 ,
10 9
et x10 + x11 + x12 ,
(c) x211 + x11 x12 + x212 , et x312 − 1. 4 3
On observe facilement que les équations x1 − x10 , x5 − x10 ,
x8 − x10 , se déduisent des équations en (b). Avec les Figure 7.1 – Une 3-coloration.
équations en (a), on conclut donc que les sommets
{3, 4, 7, 12}, doivent avoir la même couleur, de même que {6, 9, 11} et les sommets {1, 5, 8, 10}.
Les équations en (c) signifient qu’on peut choisir arbitrairement la couleur du sommet 12, parmi les
3 couleurs ; et qu’ensuite on peut donner n’importe quelle des 2 couleurs restantes à 11. Le nombre
de 3-colorations du graphe est donc 6. L’une d’entre elles correspond celle de la Figure 7.1.
7.5. PERMUTATIONS 149

7.5 Permutations

Rappelons qu’une permutation de A est simplement une bijection de A vers A, et qu’on dénote SA
l’ensemble des permutations de A, c’est-à-dire

SA := {σ : A −→ A | σ est une bijection}.

Une permutation σ de A (de cardinal n) est donc un ensemble de n couples :

σ = {(x, σ(x)) | x ∈ A}.

Nous allons écrire Sn plutôt que S[n] . Le cardinal de Sn est n!.


On peut identifier les permutations de [n] aux façons de  réordonner  les éléments de [n]. Ainsi,
en écrivant plus simplement σi pour σ(i), on a

σ = σ1 σ2 · · · σn .

Par exemple, les 24 permutations de S4 sont :

S4 = {1234, 1243, 1324, 1342, 1423, 1432, 2134, 2143, 2314, 2341, 2413, 2431,
3124, 3142, 3214, 3241, 3412, 3421, 4123, 4132, 4213, 4231, 4312, 4321}.

Partages

Un partage d’un entier n > 0 est une liste décroissante d’entiers positifs (> 0) dont la somme donne
n. Ainsi, (7, 7, 4, 4, 4, 2, 1, 1) (aussi dénoté 77444211) est un partage de

30 = 7 + 7 + 4 + 4 + 4 + 2 + 1 + 1.

Par convention, l’entier 0 admet le partage vide qu’on dénote 0. Un partage

µ = (µ1 , µ2 , . . . , µk ), ou plus simplement µ = µ 1 µ 2 . . . µk ,

de n > 0, est donc tel que


1. µ1 ≥ µ2 ≥ . . . ≥ µk > 0,
2. n = µ1 + µ2 + . . . + µk .
On dénote µ ` n le fait que µ soit un partage de n. Les entiers µi , 1 ≤ i ≤ k, sont les parts de µ,
et k est la longueur (dénotée `(µ)) du partage µ.
150 CHAPITRE 7. ALGÈBRE(∗)

On désigne par Λ[n] l’ensemble des partages de n, et on a

Λ[0] = {0}
Λ[1] = {1}
Λ[2] = {2, 11}
Λ[3] = {3, 21, 111}
Λ[4] = {4, 31, 22, 211, 1111}
Λ[5] = {5, 41, 32, 311, 221, 2111, 11111}

7.6 Diagrammes de Ferrers

On représente souvent un partage par son diagramme de Ferrers 3 ,


c’est-à-dire un sous-ensemble de N × N en forme d’ escalier ,
comme suit :
6

Autrement dit, si (i, j) ∈ D alors chaque case (x, y), avec x ≤ i et


y ≤ j, est aussi dans D. Une ligne d’un diagramme de Ferrers est
l’ensemble des cases qui ont même seconde coordonnée.
N. M. Ferrers
Tout naturellement, la longueur d’une ligne est le nombre de cases (1829–1903)
de celle-ci. La liste des longueurs des lignes d’un diagramme de
Ferrers, ordonnée du bas vers le haut, est clairement décroissante. C’est donc un partage. On établit
ainsi une correspondance entre partages et diagrammes de Ferrers. Le diagramme de la Figure
ci-haut correspond au partage 5421 de l’entier 12. Plus généralement, au partage µ = µ1 · · · µk
correspond le diagramme de Ferrers (aussi dénoté µ)

µ := {(x, y) ∈ N × N | 0 ≤ y ≤ k − 1, et 0 ≤ x ≤ µy − 1}. (7.7)

Bien entendu, une colonne du diagramme de Ferrers µ est l’ensemble des cases qui ont même
première coordonnée, et sa hauteur est le nombre de ces cases.

3. Nommés ainsi en l’honneur de Norman Macleod Ferrers (1829-1903).


7.7. ALGORITHME RSK 151

Tableaux de Young

Pour un partage µ de n, on dit avoir un tableau de Young 4 τ , de forme λ(τ ) = µ, si on a une


fonction bijective
τ : µ −→ [n],
telle que
τ (i, j) < τ (i0 , j 0 ) si (i, j) < (i0 , j 0 ). (7.8)
On dénote Young[µ] l’ensemble des tableaux de Young de forme µ.
On représente souvent un tel tableau en remplissant chaque case c de µ avec le valeur τ (c). À la
Figure 7.2, on présente les 16 tableaux de Young de forme 3 2 1.

3 3 4 4 4 4 5 5
2 5 2 6 2 5 2 6 3 5 3 6 2 4 2 6
1 4 6 1 4 5 1 3 6 1 3 5 1 2 6 1 2 5 1 3 6 1 3 4
5 5 5 6 6 6 6 6
3 4 3 6 4 6 2 4 2 5 3 4 3 5 4 5
1 2 6 1 2 4 1 2 3 1 3 5 1 3 4 1 2 5 1 2 4 1 2 3

Figure 7.2 – Tous les tableaux de Young de forme 321.

7.7 Algorithme de Robinson-Schensted-Knuth(∗)

L’algorithme de Robinson-Schensted-Knuth (RSK) associe bijectivement


à chaque permutation σ un couple de tableaux

(P (σ), Q(σ)) = (P σ , Qσ ),

qui sont respectivement appelés P -tableau et Q-tableau de σ. Si la per-


mutation σ (décrite sous forme de mot) prend la forme

σ = σ1 σ2 · · · σn ,

ces tableaux sont obtenus en  insérant  successivement les valeurs σi et


i, respectivement dans le P -tableau et dans le Q-tableau. On commence
G. de B. Robinson
avec deux tableaux vides. L’insertion suit un processus différent pour
(1906 – 1992)
4. Alfred Young (1873-1940).
152 CHAPITRE 7. ALGÈBRE(∗)

chacun des deux tableaux. Ce sont les valeurs σi qui sont insérées dans le P -tableau, tandis que ce
sont les positions i qui s’insèrent dans le Q-tableau.
D’une façon grossière, on peut dire que l’insertion dans le P -tableau consiste en une cascade de
remplacement de valeurs, culminant par l’ajout d’une nouvelle case à l’une des lignes ; et l’insertion
dans le Q-tableau enregistre les étapes de croissance du P -tableau.
Il est courant de commencer la présentation de l’algorithme par un exemple, plutôt que de décrire
formellement le processus d’entrée de jeu. Ainsi donc, pour la permutation
σ = 5 4 8 2 3 6 1 7,
on a les étapes successives :

σ 7→ (P σ , Qσ ) σ 7→ (P σ , Qσ )
(a) 5 · · · 7→ 5 1 5 3
4 8 2 5
5 2
(f) 548236 ··· 7→ 2 3 6 1 3 6
(b) 5 4 · · · 7→ 4 1
5 7
5 2
4 3
(c) 548 ··· 7→ 4 8 1 3
2 8 2 5
5 4 (g) 5482361 ··· 7→ 1 3 6 1 3 6
4 2
5 7
(d) 5 4 8 2 · · · 7→ 2 8 1 3
4 3
5 3 2 8 2 5
4 8 2 5 (h) 54823617 7→ 1 3 6 7 1 3 6 8
(e) 54823 ··· 7→ 2 3 1 3

Plus spécifiquement maintenant, pour tout mot σ = σ1 σ2 · · · σn−1 σn d’entiers distincts (σi ∈ N),
la construction procède récursivement comme suit.
1. Si σ est le mot vide, alors (P σ , Qσ ) = (0, 0)
2. Sinon, σ est de la forme σ = τ a, pour τ = σ1 σ2 · · · σn−1 , un mot de longueur n − 1, et
a ∈ N. On suppose avoir déjà construit (P τ , Qτ ), et on modifie ces deux tableaux de la façon
suivante.
(a) La valeur a remplace la plus petite valeur (qui est éjectée) de la première ligne de P τ qui
est plus grande que a, s’il y en a une. La valeur éjectée est récursivement insérée dans le
tableau formé des lignes 2, 3, . . . de P τ , et ainsi de suite. Si a est plus grand que toute
les valeurs de la première ligne, alors on ajoute a dans une nouvelle case à la fin de cette
ligne. Le résultat P σ est donc un tableau standard qui diffère de P τ , dans sa forme, par
une case.
7.7. ALGORITHME RSK 153

(b) On modifie le tableau Qτ en lui ajoutant une case en même position que celle par laquelle
P σ diffère de P τ , et donne la valeur n à case.
Une étape du processus d’insertion est illustrée à la figure 7.3. On insère 6 dans le premier tableau.
Cette insertion éjecte 8 de la première ligne, et on doit l’insérer dans la seconde, etc. Les éléments
qui sont déplacés par l’insertion sont dans les cases en vert dans le second tableau. La case qui

12 12
7 7 9
3 9 11 3 8 11
1 2 5 8 10 ←− 6 = 1 2 5 6 10

Figure 7.3 – Paire de tableaux standards.

contient 9 est la nouvelle case.

Propriétés de l’algorithme RSK

En plus de jouer un rôle fondamental pour la théorie de la représentation du groupe symétrique,


l’algorithme de Robinson-Schensted-Knuth a plusieurs propriétés remarquables. Nous n’allons en
présenter que quelques-unes (sans démonstration). L’une des propriétés les plus étonnantes est
certainement le fait que l’algorithme associe à la permutation σ −1 (l’inverse de σ) le couple de
tableaux (Q(σ), P (σ)), autrement dit

P (σ −1 ) = Q(σ), et Q(σ −1 ) = P (σ). (7.9)

Pour une permutation σ = σ1 σ2 · · · σn , une sous-suite croissante de σ est

σi1 < σi2 < . . . < σik

avec i1 < i2 < . . . < ik . Par exemple, 2 5 7 9 est une sous-suite croissante de longueur 4 de

σ = 2 8 6 5 3 1 4 7 9.

Cette dernière permutation admet aussi la sous-suite 2 3 4 7 9 de longueur 5. En fait, 5 est la longueur
maximale d’une sous-suite croissante de σ.
Soit σ permutation de [n]. Alors, la longueur maximale d’une sous-suite croissante de σ est égale
à la longueur de la première ligne du tableau P (σ), obtenu par l’algorithme RSK. Cette propriété
est utilisée pour l’étude de certains algorithmes, plus particulièrement dans le domaine de la bioin-
formatique en relation avec le séquençage de gènes.
154 CHAPITRE 7. ALGÈBRE(∗)

7.8 Le problème du mot pour un groupe

Une présentation d’un groupe G est la donnée d’un ensemble


S = {s1 , s2 , s3 , . . . , sn },
de générateurs, avec un ensemble de relations entre ces générateurs. On désigne par S ± l’ensemble
S ± := {x | x ∈ S, où x−1 ∈ S}.
Chaque relation est de la forme
x1 x2 · · · xk = 1,
avec les xj dans S ± . Les éléments du groupe sont les produits finis quelconques d’éléments de S ± ,
modulo toutes les conséquences des relations.
Un exemple typique est :
S = {s1 , s2 },
avec comme relations
s21 = 1, s22 = 1,
(7.10)
(s1 s2 )3 = 1.
Dans ce groupe on a s−1 −1
1 = s1 , et s2 = s2 . Il s’ensuit que tous les autres éléments sont des produits
finis de la forme
s1 s2 s1 s2 · · · , où s2 , s1 s2 s1 · · ·
Mais on a aussi s1 s2 s1 = s2 s1 s2 . On conclut que le groupe contient très exactement les 6 éléments
de l’ensemble
{1, s1 , s2 , s1 s2 , s2 s1 , s1 s2 s1 }.
En général, le problème est de savoir dans quels cas il y a égalité
?
y1 y2 · · · yr = z1 z2 · · · zs , avec yi , zj ∈ S ± ,
modulo les relations.
De façon équivalente, on cherche à savoir quand on a
?
y1 y2 · · · yr zs−1 · · · z2−1 z1−1 = 1, (7.11)
modulo les relations.On dit du membre de gauche, de cette
dernière égalité, que c’est un mot. Le problème du mot
consiste à savoir répondre à la question 7.11 pour tout mot.
En 1920, Tarski à démontré qu’en général le problème du mot
est indécidable. Dans certains cas, quand les relations sont
d’une bonne forme, on connaı̂t cependant comment résoudre
algorithmiquement le problème du mot.
Alfred Tarski
(1901 – 1983)
7.9. EXERCICES 155

7.9 Exercices

7.1. Montrer que, pour toute permutation σ et τ , on a


a) Le nombre de permutations θ, telles que θσθ−1 = τ , est égal au nombre de permutations
ρ telles que ρσρ−1 = σ. Suggestion : Construire une bijection entre les deux ensembles en
exploitant le fait que, lorsque θσθ−1 = ψσψ −1 , alors ρ = ψ −1 θ est tel que ρσρ−1 = σ.
b) Montrer que lorsque la forme de σ est λ(σ) = µ = 1d1 2d2 · · · ndn le nombre de permutations
ρ telles que ρσρ−1 = σ est donné par la formule

zµ := 1d1 d1 ! 2d2 d2 ! · · · ndn dn !. (7.12)

Bien entendu, on doit lire cette dernière expression en interprétant la notation exponentielle
de la façon usuelle pour les entiers.
7.2. Combien y a-t-il de partages de n en parts au plus égales à 2 ?
7.3. On peut ordonner l’ensemble de tous les diagrammes de Young par inclusion (en tant que
sous-ensembles de N × N). On obtient ce qu’on appelle le treillis de Young, dont voici une petite
partie du début de son diagramme de Hasse
.. .
. . .. . . . ..
.. . . . .
. ..

I
@
@  @
I
@ 
@ @

@
I
@ 
@


0

Montrer qu’il y a bijection entre tableaux de Young de forme µ (un partage), et chemins allant de
0 à µ dans ce treillis, et en déduire qu’on a la récurrence
X
fµ = fν , (7.13)
ν→µ

où ν → µ dénote la relation de couverture de l’ordre de Young, et fµ est le nombre de tableaux de


Young de forme µ.
7.4. Pour les partages d’un même entier n, on a l’ordre (partiel) de dominance, pour lequel on a
ν  µ si
ν1 ≤ µ1 ,
156 CHAPITRE 7. ALGÈBRE(∗)

ν1 + ν2 ≤ µ1 + µ2 ,
..
.
ν1 + ν2 + · · · + νk ≤ µ1 + µ2 + · · · + µk ,
où µi = 0 si i > `(µ), avec une convention similaire pour ν. Le diagramme de Hasse de cet ordre
sur l’ensemble des partages de 3 est : Trouver le diagramme de Hasse de cet ordre sur l’ensemble

% & % &
→ → → →

& % & %

Figure 7.4 – L’ordre de dominance pour n = 6

des partages de 7. Attention, ce n’est pas un ordre total.


7.5. L’ordre (total) lexicographique, sur les partages de n, est celui pour lequel ν < µ, si la première
différence non nulle, µi − νi , est positive. Pour n = 4, on a donc

1111 < 211 < 22 < 31 < 4

Montrer que l’ordre lexicographique est une extension linéaire de l’ordre de dominance. C’est-à-dire
que l’ordre lexicographique est un ordre total tel que

νµ implique ν ≤ µ.

Programmation mathématique

7.6. Concevoir des procédures qui, pour une permutation σ de [n] donnée sous forme de mot,
a) calcule la décomposition cyclique de σ.
b) trouve une représentation de σ comme produit de transpositions adjacentes.
c) trouve toutes les représentations (de longueur minimale) de σ comme produit de transposi-
tions adjacentes.
7.7. Écrire une procédure qui trouve tous les partages de n en parts plus petites ou égales à k.
7.9. EXERCICES 157

7.8. Concevoir une procédure qui trouve tous les tableaux de Young de forme donnée.

7.9. Concevoir des procédures qui réalisent l’algorithme RSK, c.-à-d. : calculent le couple (P , Q) à
partir de σ. Tester l’énoncé (7.9).
158 CHAPITRE 7. ALGÈBRE(∗)
Annexe A

Un soupçon de logique

Pour développer des preuves, il est nécessaire de connaı̂tre les manipulations logiques de base. Nous
n’allons ici n’en rappeler que quelques principes. Informellement, un énoncé (mathématiques) est
une phrase qui affirme un certain fait (mathématique). L’important est de pouvoir déterminer si
l’énoncé est  vrai  ou  faux . Une preuve est constituée d’un enchaı̂nement de déductions
logiques, à partir de faits connus (ou d’axiomes), avec comme conclusion le fait que l’énoncé (qu’on
cherchait à prouver) est vrai. La forme d’une preuve dépend fortement de la forme de l’énoncé à
prouver. On décrit ces formes possibles ci-dessous.
À partir d’énoncés connus A et B, on peut former de nouveaux énoncés au moyen d’opérations
logiques. On a les énoncés :
1. (A et B), qui est vrai si et seulement si A et B le sont tous les deux,
2. (A ou B), qui est vrai si et seulement si A est vrai ou B est vrai,
3. (¬A), qui est vrai si et seulement si A est faux,
4. (A ⇒ B), qui n’est faux que lorsque A est vrai et B est faux,
5. (A ⇔ B), qui est vrai exactement quand A et B sont tous les deux vrai, ou tous les deux
faux.
Dans la description de chacune des opérations, on décrit quelle est la façon de procéder pour
prouver l’énoncé composé, à partir de ses composantes. L’opération d’équivalence  ⇔  permet
de comparer la véracité d’énoncés logique. Ainsi, l’énoncé (A ⇔ B) se formule aussi
A si et seulement si B,
ou même (A ssi B). Ce sont diverses façons d’exprimer le fait que A soit vrai est équivalent au fait
que B le soit. L’opération d’implication  ⇒  correspond à la déduction logique. Ainsi, l’énoncé
(A ⇒ B) se formule aussi
si A alors B.

159
160 ANNEXE A. UN SOUPÇON DE LOGIQUE

Ce sont diverses façons d’exprimer le fait que B soit vrai se déduit du fait que A l’est. Autrement
dit, une preuve de (A ⇒ B) pourra se dérouler comme suit. On suppose que A est vrai, et on
montre qu’un enchaı̂nement logique de déductions prouve que B l’est alors forcément.
Dans une série de manipulations logiques, il est agréable de savoir quand on peut remplacer une
affirmation par une autre qui lui est logiquement équivalente (en espérant qu’elle soit plus facile
à montrer). Les règles du calcul des propositions expliquent quand il est possible de remplacer un
énoncé par un énoncé qui lui est logiquement équivalent. On a par exemple :
1. ¬(A et B) si et seulement si (¬A ou ¬B),
2. ¬(A ou B) si et seulement si (¬A et ¬B),
3. (A ⇒ B) si et seulement si (¬B ⇒ ¬A),
4. (A ⇒ B) si et seulement si (¬A et B),
5. (A ⇔ B) si et seulement si (A ⇒ B) et (B ⇒ A)
Chacun de ces cas représente une stratégie potentielle de preuve, si l’énoncé est de la bonne forme.
Cette liste est incomplète, mais elle comprend les principales stratégies usuelles.
Certains énoncés font intervenir une variable, et sont vrais pour certaines valeurs de cette variable.
On écrit P (x) pour ce genre d’énoncés, avec x la variable, et on dit qu’on a un prédicat. Infor-
mellement, c’est une phrase avec x comme sujet. Typiquement, on pense à P comment étant une
propriété que x peut avoir (ou pas). Par exemple, on a
— P (x) = (x est un nombre pair), ou
— P (x) = (x est égal à 1),
— etc.
Pour chaque a, valeur possible 1 de x, on a un énoncé P (a) qui est vrai si et seulement si a
 possède  la propriété P . À partir de prédicats donnés, on peut former de nouveaux prédicats au

moyen des opérations logiques : (P (x) et Q(x)), (P (x) ou Q(x)), (¬P (x)), etc. Bien entendu, on a
des prédicats à plusieurs variables, prenant la forme P (x, y) par exemple.
Au moyen d’un prédicat, on peut former les énoncés logiques
1. (∀x P (x)), qui est vrai si et seulement si P (a) est vrai pour toutes la valeur possible de x,
2. (∃x P (x)), qui est vrai si et seulement si il existe a, une valeur possible de x, pour laquelle
P (a) est vrai.
On a les équivalences logiques
1. ¬(∀x P (x)) si et seulement si (∃x ¬P (x)),
2. ¬(∃x P (x)) si et seulement si (∀x ¬P (x)).

1. Dans un ensemble A donné.


Annexe B

Axiomatique de la théorie des


ensembles

La présentation ci-dessous ne vise qu’à donner une idée de ce à quoi peut ressembler une théorie
axiomatique des ensembles. Pour en savoir plus, il faut suivre un cours sur le sujet, ou consulter
un livre plus spécialisé, comme

J.-L.Krivine, Théorie axiomatique des ensembles, Presses Universitaires de France, 1969.

Il existe plusieurs systèmes axiomatiques formels pour la théorie des ensembles. L’un des plus connus
est le système ZFC de Zermelo-Fraenkel (avec l’axiome du choix). L’axiomatique ZFC se décrie
dans le contexte du calcul des prédicats avec relation d’égalité. Toute la théorie étant formulée
en terme d’ensembles, on doit se rappeler que les éléments d’ensembles sont aussi des ensembles.
Tout est, en quelque sorte, construit à partir de l’ensemble vide. Ainsi on aura les ensembles tous
distincts
∅, {∅}, {{∅}}, ...
{∅, {∅}}, {{∅, {∅}}}, {{{∅, {∅}}}}, ...
(B.1)
{∅, {∅}, {{∅}}}, {{∅, {∅}, {{∅}}}}, {{{∅, {∅}, {{∅}}}}}, . . .
.. .. .. ..
. . . .

La relation d’appartenance x ∈ A et la notion d’ensemble ne sont définies que par le fait qu’elle
satisfont les axiomes suivants. La relation d’inclusion A ⊆ B est définie par

(A ⊆ B) ssi ∀x (x ∈ A ⇒ x ∈ B).

161
162 ANNEXE B. AXIOMATIQUE DE LA THÉORIE DES ENSEMBLES

1) Axiome d’extensionalité. Deux ensembles sont égaux, si et seulement s’ils ont les mêmes
éléments. En formule,
∀A ∀B [∀x (x ∈ A ⇔ x ∈ B) ⇒ (A = B)]. (B.2)

2) Axiome de la paire. Pour tous ensembles A et B, on peut construire un ensemble C dont les
seuls éléments sont A et B. Autrement dit, on permet ici de construire

C := {A, B}.

En formule,
∀A ∀B ∃C[∀x (x ∈ C) ⇔ (x = A ou x = B)]. (B.3)

3) Axiome de la réunion. Pour tout ensemble A, on peut construire un ensemble B dont les
seuls éléments sont tous ceux qui sont éléments des éléments de A. Autrement dit, on permet ici la
construction de l’ensemble [
B := x.
x∈A

En formule,
∀A ∀B ∃C[∀x (x ∈ C) ⇔ (x = A ou x = B)]. (B.4)

4) Axiome de l’ensemble des parties. Pour tout ensemble A, on peut construire l’ensemble B
des sous-ensembles de A. Autrement dit, on permet ici la construction de l’ensemble

B := {x | x ⊆ A}.

En formule,
∀A ∃B ∀x(x ∈ B) ⇔ (x ⊆ A). (B.5)

5) Axiome de l’infini. Cet axiome permet de construire (au moins un) ensemble infini. C’est
l’ensemble

A := { ∅,
{∅},
{∅, {∅}},
{∅, {∅}, {∅, {∅}}},
{∅, {∅}, {∅, {∅}}, {∅, {∅}, {∅, {∅}}}}}, . . .}.

Cet axiome permet aussi (avec les précédents) de construire l’ensemble N des entiers positifs. En
formule,
∃A (∅ ∈ A) et (x ∪ {x} ∈ A). (B.6)
163

6) Shéma d’axiomes de compréhension. Pour tout ensemble A, on peut construire le sous-


ensemble B des éléments de A qui satisfont une propriété P (exprimée dans le langage de la théorie
des ensembles). Autrement dit, on permet ici la construction de

B := {x ∈ A | P (x)}.

En formule,
∀y1 · · · ∀yn ∀A ∃B ∀x[(x ∈ B) ⇔ (x ∈ A et P (x, y1 , . . . , yn )). (B.7)
Les yi sont ici simplement des paramètres auxiliaires dont on pourrait avoir besoin pour formuler
plus facilement la propriété P . On dit qu’on a un  schéma  d’axiomes, parce qu’il y a un axiome
pour chaque choix de P .
7) Shéma d’axiomes de remplacement. Pour tout ensemble A et toute relation fonctionnelle
F , on a un ensemble
B := {y | x ∈ A et F (x, y)}.
Pour exprimer ceci en formule (simplifiée 1 ), rappelons d’abord que F est une relation fonctionnelle,
on écrit Fonct(F ), si et seulement si

Fonct(F ) ssi ∀x ∀y1 ∀y2 [(F (x, y1 ) et F (x, y2 )) ⇒ (y1 = y2 )].

Alors l’axiome se présente comme

Fonct(F ) ⇒ ∀A ∃B ∀y [y ∈ B ⇔ ∃x (x ∈ A et F (x, y))].

8) Axiomes de fondation. Pour tout ensemble A non vide, il existe un ensemble B, appartenant
à A, qui n’a aucun élément en commun avec A, c’est-à-dire que

A ∩ B = ∅.

En formule,
∀A[(A 6= ∅) et ∃B (B ∈ A et A ∩ B = ∅)]. (B.8)

9) Axiomes du choix. Pour tout ensemble A, d’ensembles non vides, le produit cartésien des
éléments de A est non vide. En formule,
Y
[∀x ∈ A (x 6= ∅)] ⇒ x 6= ∅. (B.9)
x∈A

1. La formulation plus juste fait apparaı̂tre des paramètres dans F comme dans l’axiome précédent.
164 ANNEXE B. AXIOMATIQUE DE LA THÉORIE DES ENSEMBLES
Annexe C

Notions d’algèbre

Ici, on rappelle certaines notions d’algèbre qui sont utiles pour notre approche algorithmique des
mathématiques.

C.1 Polynômes

On dit qu’on a un polynôme f de degré deg(f ) = n, en la variable x, si

f (x) = an xn + an−1 xn−1 + . . . + a1 x + a0 , (C.1)

avec an 6= 0. Les ai sont les coefficients de f . Deux polynômes

f (x) = an xn + an−1 xn−1 + . . . + a1 x + a0 ,


(C.2)
g(x) = bk xk + bk−1 xk−1 + . . . + b1 x + b0 ,

sont égaux si et seulement s’ils ont même degré et même coefficients. C’est donc dire qu’on a

n = k, et ai = bi , pour 0 ≤ i ≤ n.

On dénote respectivement par Q[x], R[x], et C[x] l’ensemble des polynômes pour lesquels les co-
efficients sont supposés appartenir respectivement à Q, R ou C. Pour simplifier la discussion, on
dénote K l’un de ces divers contextes.
La somme et le produit de polynômes f et g dans K[x] est un polynôme dans K[x], et on a

deg(f + g) ≤ max(deg(f ), deg(g)), (C.3)


deg(f · g) ≤ deg(f ) + deg(g). (C.4)

165
166 ANNEXE C. NOTIONS D’ALGÈBRE

On a de plus la division euclidienne

f (x) = q(x) · g(x) + r(x), avec 0 ≤ deg(r) < deg(g). (C.5)

pour d’uniques polynômes q(x) et r(x) dans K[x]. Ces polynômes se calculent comme suit, par
récurrence sur le degré. Si deg(f ) < deg(g), alors q(x) := 0 et r(x) := f (x). Sinon, avec les conven-
tions en (C.2) on a n ≥ k, et il y a un unique polynôme F (x) tel que
an n−k
f (x) = x g(x) + F (x).
bk

Il est tout simplement obtenu par la soustraction f (x) − (an /bk ) xn−k g(x). Par récurrence, on peut
faire la division euclidienne de F (x) par g(x), puisque deg(F ) < deg(f ) :

F (x) = Q(x) · g(x) + R(x), avec 0 ≤ deg(R) < deg(Q), (C.6)

et alors les polynômes cherchés sont q(x) := (an /bk ) xn−k + Q(x), et r(x) := R(x). On dit que g(x)
divise f (x), si le reste de la division euclidienne de f est g est nul.
On dit aussi que a ∈ K est une racine de f ∈ K[x] si

f (a) = 0. (C.7)

Si a est une racine de f , alors f (x) = q(x) (x − a) pour un certain polynôme q(x). En effet, on le
vérifie en procédant à la division euclidienne de f (x) par x − a, pour obtenir

f (x) = q(x) (x − a) + r, avec deg(r) = 0.

On conclu que r est une constante. En évaluant chaque membre de cette dernière égalité en a, on
constate que r doit en fait être égal à 0. Un argument semblable montre qu’on a

f (x) = (x − a1 ) (x − a2 ) · · · (x − ak ) q(x), pour un certain q(x),

si les ai sont des racines distinctes de f (x).

C.2 Groupe et anneaux

Un groupe est un ensemble G muni d’une opération associative, avec élément neutre, ainsi qu’un
inverse pour chaque élément de G. On adopte fréquemment une notation multiplicative g · h pour
cette opération, avec 1 désignant l’élément neutre. L’inverse de g est alors g −1 . Cependant, si
l’opération est aussi commutative, on utilise parfois une notation additive g+h, avec 0 pour l’élément
neutre. et −g pour l’inverse de g.
C.2. GROUPE ET ANNEAUX 167

L’ordre d’un groupe G est simplement un autre nom pour le nombre d’éléments de G. Un sous-
groupe de G est un sous-ensemble H de G, qui contient l’identité, l’inverse de chacun de ses éléments,
et qui est fermé par produit, c.-à-d. : si h1 et h2 sont dans H alors h1 · h2 est aussi dans H. Si G
est fini, alors l’ordre d’un sous-groupe de G divise l’ordre de G.
On a les groupes
(1) L’ensemble Z des entiers, avec l’addition.
(2) L’ensemble Q+ , des nombres rationnels non nuls, avec la multiplication.
(3) Les permutations d’un ensemble avec la composition.
(4) L’ensemble des automorphisme d’un graphe avec la composition.
(5) L’ensemble des matrices n × n de déterminant non nul, avec la multiplication.
(6) Dans Zn , l’ensemble des entiers relativement premier à n avec la multiplication.

C.2.1 Anneaux et idéaux

Un anneau est un ensemble R muni de deux opérations (souvent dénotées respectivement additive-
ment et multiplicativement). On demande que (R, +) forme un groupe, que la multiplication soit
associative avec un élément neutre (souvent désigné par 1), et enfin que la multiplication soit distri-
butive sur l’addition (autant à gauche qu’à droite). L’anneau est dit commutatif si la multiplication
est commutative.
On a les anneaux
(1) L’ensemble Z des entiers, avec l’addition et la multiplication.
(2) L’ensemble Zn des entiers modulo n, avec l’addition et la multiplication.
(3) L’ensemble K[x] des polynômes, avec l’addition et la multiplication.
(4) L’ensemble des matrices n × n (à coefficient dans un anneau R), avec l’addition :
M + P, avec (M + P )ij := Mij + Pij ,
(où l’addition dans le membre de droite est celle de R) ; et la multiplication :
n
X
M · P, avec (M · P )ij := Mik · Pkj ,
k=1

(où les opérations dans le membre de droite sont celles de R).


(5) L’ensemble des fonctions f : A → R (pour R un anneau), avec l’addition :
f + g : A → R, définie par (f + g)(x) := f (x) + g(x),
et la multiplication :
f · g : A → R, définie par (f · g)(x) := f (x) · g(x).
168 ANNEXE C. NOTIONS D’ALGÈBRE

Un sous-ensemble I, d’un anneau R est un idéal , si et seulement si


(i) 0 ∈ I,
(ii) si f et g sont dans I, alors f + g est dans I,
(iii) si f ∈ I et r ∈ R , alors r · f ∈ I.
Pour f1 , f2 , . . ., fn des éléments de R, on dénote h f1 , f2 , . . . , fn i le plus petit idéal de R qui
contienne les fi . Intuitivement, on peut penser qu’on a un système d’équations

f1 = 0, f2 = 0, . . . , fn = 0, (C.8)

et alors g est éléments de l’idéal I si et seulement si on peut déduire l’équation g = 0 des équations (C.8).
En particulier, pour tout d dans R, on a

h d i = {r · d | r ∈ R}.

C’est l’ensemble des multiples de d.

C.2.2 Anneau Euclidien

Soit R un anneau pour lequel la seule façon d’avoir f · g = 0 est lorsque f = 0 ou g = 0. On dit
que R est un anneau euclidien, si on a une fonction ∆ : R → N, pour laquelle on a une division
euclidienne. C’est-à-dire que, quelque soit a et b dans R, il existe q et r tels que

a = q · b + r, avec r = 0, où ∆(r) < ∆(b).

Dans un anneau euclidien, on a une notion de plus grand commun diviseur . Dans le cas de l’anneau
Z, la fonction ∆ est la valeur absolue. Dans le cas de K[x], c’est le degré des polynômes qui joue ce
rôle. On dit que d est un glus grand diviseur pour les éléments f1 , f2 , . . ., fk , si on a

(d) = h f1 , f2 , . . . , fk i.

Le théorème est que dans un anneau euclidien, il existe toujours un tel d. Dans la mesure où sa
division euclidienne est effective (se calcule), on peut appliquer l’algorithme d’Euclide au calcul du
PGCD dans un anneau euclidien.
Annexe D

Calcul formel

D.1 Introduction

Les systèmes de calcul formel permettent de manipuler concrètement des objets mathématiques
abstraits de façon rigoureuse. Cela va des nombres entiers, rationnels, réels ou complexes (et des
calculs sur ceux-ci) ; à des manipulations d’opérateurs sur des espaces de fonctions ; en passant par
un vaste spectre de notions mathématiques de l’algèbre, du calcul, de l’analyse complexe, de la
théorie des nombres, etc. Tout système de calcul formel (Sage, Maple, etc.) permet, entre autres,
de manipuler des ensembles, des fonctions, des listes, et diverses constructions les concernant.

D.1.1 Maple

Dans ce système de calcul formel, une session de travail est un processus interactif qui consiste à
donner au système une instruction de calcul et on obtient alors comme résultat la valeur du calcul
demandé (apparaissant en bleu). Le système affiche automatiquement le symbole  >  chaque fois
qu’il est prêt à effectuer une prochaine instruction. Le  ;  signifie la fin de l’instruction donnée,
et la touche  return  (ou  enter ) déclenche le calcul. Ainsi, on peut demander de calculer
> gcd(x36 − 1, x24 − 1) ;
x12 − 1

Ici, la fonction Maple  gcd  trouve que x12 −1 est un 1 plus grand commun diviseur des polynômes
x36 − 1 et x24 − 1.
En plus d’effectuer des calculs explicites, il est possible de donner des noms à certains objets au
moyen l’assignation  := . On peut donc poser
1. Puisque définit à un multiple scalaire prêt.

169
170 ANNEXE D. CALCUL FORMEL

> x := 100 ;
x := 100

Dorénavant, x aura la valeur 100, et l’expression 2x prendra donc la valeur :


> 2x ;
1267650600228229401496703205376

Il faut bien distinguer cette assignation de la relation mathématique usuelle  =  d’égalité.


Aux fins d’une utilisation vraiment efficace des systèmes de calculs formels, la capacité qui est de
loin la plus importante est la possibilité de définir de nouvelles fonctions (ou procédures) de calcul, à
partir de celles déjà connues. On a ainsi un riche environnement de programmation spécialisée pour
les mathématiques. C’est nouvelles fonctions peuvent se définir de nombreuses façons, mais celle
qui est la plus naturelle est probablement via la récursivité. Ainsi on peut introduire la fonction :
> F := n− >
if n ≤ 1 then 1
else F (n − 1) + F (n − 2)
fi :
Dorénavant,  F  est la fonction d’une variable qui calcule (récursivement) les nombres de Fibo-
nacci. On aura donc :
> F (20);
10946

Les changements de lignes et les espaces supplémentaires n’ont ici aucun effet sur le calcul. Ils ne
servent qu’à disposer la description de la fonction  F  de manière plus agréable. Normalement, le
résultat d’une telle instruction est d’afficher le texte de la fonction ainsi définie. Le fait d’utiliser le
 : , plutôt que le  ;  comme indication de fin de l’instruction, évite cet affichage assez inutile.

Théorie des ensembles en Maple

Ainsi, on peut donner le nom A à l’ensemble {a, b, c} en posant


> A := {a, b, a, c, b, b} ;
A := {a, b, c}

Observons ici (comme le veut la théorie) que la répétition d’un élément n’a aucun effet. Bien
entendu, on a aussi les opérations usuelles sur les ensembles
> {a, b, c} intersect {b, c, d} ;
{b, c}
D.1. INTRODUCTION 171

> {a, b, c} union {b, c, d} ;


{a, b, c, d}
> {a, b, c} minus {b, c, d} ;
{a}

En passant, rien n’empêche d’utiliser abstraitement ces opérations sur des ensembles B et C non
spécifiées. Ainsi, on obtient
> (B union D) intersect (C union D) ;

(B ∪ D) ∩ (C ∪ D)

> B minus B ;

On peut tester l’égalité d’ensembles, et l’appartenance à un ensemble, en exploitant la fonction


 evalb  qui calcule la valeur logique d’une expression. Ainsi, on a

> evalb({a, b, c} = {b, c, d}) ;


false
> evalb({a, b, c} = {b, c, a}) ;
true
> b in {b, c, a} ;
b ∈ {a, b, c}
> evalb(b in {b, c, a}) ;
true

La fonction  nops  est très générale. Elle permet de compter le nombre d’opérandes dans une
expression. En particulier elle donne le nombre d’éléments d’un ensemble. Cependant, pour faciliter
la compréhension, il est possible de lui donner un synonyme en posant :
> card := nops :
Par la même occasion, on se permet de mettre en place les autres synonymes :
> ‘&+‘ := ‘union‘ :
> ‘&-‘ := ‘minus‘ :
L’utilisation du caractère  & , dans  &+ , est nécessaire en Maple lorsqu’on désire considérer
de nouveaux opérateurs binaires avec une notation  infixe . C’est aussi une particularité de la
syntaxe de Maple qui forcent l’utilisation des  ‘  au moment de l’établissement de ces synonymes.
172 ANNEXE D. CALCUL FORMEL

Pour décrire un ensemble de la forme {g(x) | x ∈ A}, on peut utiliser la fonction Maple  seq  qui
permet de construire des séquences de valeurs g(x) pour x variant dans A. Puisque l’ensemble A a
déjà été défini (mais pas g), on obtient :
> {seq(g(x), x in A)}) ;
{g(a), g(b), g(c)}

ou encore, avec la fonction de Fibonacci F :


> {seq(F (x), x in {1, 2, 3, 4, 5, 6, 7, 8, 9})}) ;

{1, 2, 3, 5, 8, 13, 21, 34, 55}

Autres opérations. On peut définir d’autres opérations usuelles sur les ensembles comme ci-
dessous. Si A = {x} + B, le calcul de l’ensemble P[A] des parties de A est basé sur la récurrence :

P[A] = P[B] + {C + {x} | C ∈ P[B]}. (D.1)

Avec une syntaxe légèrement différente de celle déjà utilisée, on exploite cette récurrence pour
obtenir la nouvelle fonction
> P := proc(A) local x, B :
if A = {} then {{}}
else x := op(1, A) : (x est le premier élément dans A)
B := A & − {x} :
P (B) &+ {seq( C &+ {x}, C in P (B)}
fi
end :
Après avoir considéré le cas spécial A = ∅, on choisit x comme étant le premier élément de A, et la
cinquième ligne reproduit (presque fidèlement) le membre de droite de (D.1). On obtient ainsi une
fonction calculant l’ensemble P (A) des parties de A :
> P ({a, b, c}) ;
{∅, {a} , {b} , {c} , {a, b} , {a, c} , {b, c} , {a, b, c}}

Avant de construire le produit cartésien comme opération binaire, on rappelle qu’en Maple un
couple, normalement dénoté (x, y) dans des contextes mathématiques, est plutôt dénoté [x, y]. Ceci
est dû au fait que les parenthèses usuelles sont réservées à d’autres fins syntaxiques. On pose donc
> ‘&X‘ := proc(A, B) local x, y :
{seq(seq([x, y] , x in A), y in B)}
end :
D.1. INTRODUCTION 173

Alors, on obtient
> {a, b, c} &X {a, b} ;
{[1, a], [1, b], [2, a], [2, b], [3, a], [3, b]}

et aussi
> {a, b, c} &X {} ;

comme il se doit. On peut maintenant obtenir la fonction qui calcule l’ensemble des relations entre
A et B, simplement en posant :
> Relations := (A, B)− > P (A &X B) :
et donc on peut ensuite calculer que
> Relations({a, b}, {x, y}) ;

∅, {[a, x]} , {[a, y]} , {[b, x]} , {[b, y]} , {[a, x], [a, y]} , {[a, x], [b, x]} , {[a, x], [b, y]} , {[a, y], [b, x]} ,
{[a, y], [b, y]} , {[b, x], [b, y]} , {[a, x], [a, y], [b, x]} , {[a, x], [a, y], [b, y]} , {[a, x], [b, x], [b, y]} ,
{[a, y], [b, x], [b, y]} , {[a, x], [a, y], [b, x], [b, y]}

Pour calculer récursivement l’ensemble des fonctions entre A et B, il suffit de poser


> Fonct := (A, B)− >
if A = {} then {{}}
else x := A[1] :
{seq(seq(f &+ {x, y} , y in B), f in Fonct(A &− {x}, B))}
fi :
et alors
> Fonct({a, b}, {0, 1}) ;
{{[a, 0], [b, 0]} , {[a, 0], [b, 1]} , {[a, 1], [b, 0]} , {[a, 1], [b, 1]}}

Une construction similaire permet d’obtenir l’ensemble des mots de longueur k, sur un alphabet A,
au moyen de la fonction Maple  cat  qui concatène deux mots.
> Mots := (A, k)− >
if k = 1 then A
else {seq(seq(cat(w, x) , x in A), w in Mots(A, k − 1))}
fi :
> Mots({a, b, c}, 3) ; 
aaa, aab, aac, aba, abb, abc, aca, acb, acc,
baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc,
caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc
174 ANNEXE D. CALCUL FORMEL

D.1.2 Sage

Théorie des ensembles en Sage


Annexe E

Notations

 ou ≤ : une relation d’ordre, Section 5.12.


|A| : le cardinal d’un ensemble A, Section 2.2.
|w| et |w|x : la longueur du mot w, le nombre d’occurrences de la lettre x dans le mot w,
Section 6.2.
[n] : l’ensemble usuel de cardinal n, Section 2.2.
Q
i∈I Ai et A × B : produits cartésiens d’ensembles, Chapitre 2.
P
i∈I Ai et A + B : unions disjointes d’ensembles, Chapitre 2.
An et A∗ : les mots de longueur n sur A, le monoı̈de des mots sur A, (6.2).
Bij[A, B] : l’ensemble des fonctions bijectives de A vers B, (2.22).
C : permutations cycliques sur A. Sections 7.5.
δ(`) : déployé d’un ordre total, (4.10).
ε ou 1 : le mot vide, Section 6.2.
f C
: la fonction f restreinte au sous-ensemble C, (2.16).
f k : k-ième itéré pour la composition de f , Section 1.5.
fµ : nombre tableaux de Young de forme µ, Chapitre 7.
Fn : les nombres de Fibonacci (5.34).
Fonct[A, B] : l’ensemble des fonctions de A vers B, Chapitre 2.
g ◦ f : composé de fonctions g et de f , (1.6).
γ1 · γ2 : composé de chemins, Section 5.4.

175
176 ANNEXE E. NOTATIONS

Gro : graphes orientés, Section 5.2.


Gra : graphes simples, Section 3.2.
Γ`g (x, y) : l’ensemble des chemins de longueur ` allant de x à y dans le graphe g, Section 5.4.
IdA : la fonction identité sur A, Chapitre 2.
Inj[A, B] : l’ensemble des fonctions injectives de A vers B, (2.26).
λ ` n : λ partage de n, Section 7.5.
L + L0 : union de langages, Section 6.3.
L · L0 : produit de langages, Section 6.3.
L∗ : étoile de langages, Section 6.3.
Λ[n] : ensemble des partages de n, Section 7.5.
π(α) : projection d’un arbre binaire croissant, (4.10).
P (σ) : P -tableau de σ selon la correspondance RSK, Section 7.7.
P : l’ensemble des parties, (2.3).
P k : parties à k-éléments, 2.3).
Q(σ) : Q-tableau de σ selon la correspondance RSK, Section 7.7.
Sn : l’ensemble des permutations (2.22).
Sta[n] : ensemble des fonctions de stationnement (4.13).
Surj[A, B] : l’ensemble des fonctions surjectives de A vers B, (2.28).
u · v : concaténation des mots u et v, Section 6.2.
wk : puissance k-ième d’un mot w, (6.5).
x → y ou x → y : x est couvert par y (ou y couvre x) dans l’ordre , Section 5.12.
x ∨ y et x ∧ y : supremum et infimum de x et y, Section 5.12.
χB : la fonction caractéristique d’un sous-ensemble B, (2.17).
Young[µ] : ensemble des tableaux de Young de forme µ, Chapitre 7.
Bibliographie

[1] E.A. Bender and S.G. Williamson, Foundations of Applied Combinatorics, Addison-
Wesley, 1991.
[2] C. Berge, Principes de Combinatoire, Dunod, 1968.
[3] F. Bergeron, Algebraic Combinatorics and Coinvariant Spaces, CMS Treatise in Mathema-
tics, CMS et A.K. Peters, 2009.
[4] F. Bergeron, G. Labelle & P. Leroux, Espèces de structures et combinatoire des struc-
tures aborescentes, Publications du LACIM 19, UQAM, Montréal, 1994.
[5] F. Bergeron, G. Labelle & P. Leroux, Combinatorial Species and Tree-Like Structures,
Encyclopedia of Mathematics and its Applications 67, Cambridge University Press, 1998.
• Texte d’introduction aux espèces (en anglais)
• Site Wikipedia sur le espèces
[6] F. Bergeron and S. Plouffe, Computing the Generating Function of a Series Given its
First Few Terms, Experimental Mathematics 1, 1992, 307–312.
[7] M. Bona, A Walk Through Combinatorics : An Introduction to Enumeration and Graph
Theory, World Scientific, 2006.
[8] C.L. Bouton, Nim, a game with a complete mathematical theory, Ann. Math. Princeton,
Series 2, 3, 1902, 35–39.
[9] A. Cayley, A theorem on trees, Quart. J. Pure Appl. Math. 23 (1889).
[10] S. Eilenberg, Automata, Languages and Machines, Academic Press Vol. A, 1974 ; et Vol.
B, 1976.
[11] Ph. Flajolet et R. Sedgewick, Analytic Combinatorics, Cambridge University Press,
2009. Aussi disponible gratuitement sur le site :
http://algo.inria.fr/flajolet/Publications/book.pdf
[12] M. Fleury, Deux problemes de geometrie de situation, Journal de mathématiques élémentaires
(1883), 257–261.

177
178 BIBLIOGRAPHIE

[13] R.L. Graham, D.E. Knuth, and O. Patashnik, Concrete Mathematics, Addison-Wesley,
1989.
[14] P.M. Grundy, Mathematics and Games, Eureka, 2, 1939, 6–8. Réédité, 27, 1964, 9–11.
[15] F. Harary, Graph Theory, Addison-Wesley, 1972.
[16] F. Harary and E. Palmer, Graphical Enumeration, Academic Press, 1973.
[17] A. Joyal, Une théorie combinatoire des séries formelles, Advances in Mathematics 42 (1981),
1–82.
[18] Donald Knuth, The Art of Computer Programming, Addison-Wesley, 3-ième édition, 1997.
Page web de Don Knuth
[19] G. Konheim et B. Weiss, An occupancy discipline and applications, SIAM J. Applied Math.
14 (1966), 1266–1274.
[20] J. Labelle, Théorie des graphes, Modulo éditeur, Montréal, 1981.
[21] M. Lothaire, Combinatorics on Words, Encyclopedia of Mathematics Vol. 17, Addison-
Wesley, 1983.
Site Wikipedia sur la combinatoire des mots
[22] J.W. Moon, Counting Labelled Trees, Canadian Mathematical Monographs 1, CMS, 1970.
[23] M. Petkovsek, H. Wilf, et D.Zeilberger, A=B, A.K. Peters, 1996. Aussi disponible
gratuitement sur le site :
http://www.math.upenn.edu/∼wilf/Downld.html
[24] G. Pólya and R.C. Read, Combinatorial Enumeration of Groups, Graphs and Chemical
Compounds, Springer-Verlag, 1987.
[25] R. Pyke, The supremum and infimum of the Poisson process, Ann. Math. Statistics 30 (1959),
568–576.
[26] C. Schensted, Longest increasing and decreasing subsequences, Canad. J. Math. 13 (1961),
179–191.
[27] N. Sloane et S. Plouffe, Encyclopedia of Integer Sequences, Academic Press, 1995.
http://oeis.org/classic/Seis.html
[28] R. P. Sprague Über mathematische Kampfspiele Tôhoku Mathematical Journal, 41, 1906,
438–444.
[29] R.P. Stanley, Acyclic orientations of graphs, Discrete Math., 5 (1973), 171–178.
Index

anneau carte, 81
idéal, 168 duale, 83
tropical, 119 isthme, 82
antisymétrique, 132 coefficient
arête binomial, 18
incidente, 67 complément, 45
arborescence, 95 cube, 65
branche, 96
largeur, 96 décidable, 56
profondeur, 96 degré
arbre entrant, 107
binaire, 97 sortant, 107
croissant, 98 suite, 77
binaire croissant diagramme
déployé, 99 colonne, 150
lecture infixe, 99 Ferrers, 150
projection, 99 hauteur, 150
branche ligne, 150
droite, 97 diagramme de Hasse, 128
gauche, 97 différence, 45
enraciné, 95 divise, 1
feuille, 93 dominance, 155
forme, 97 Dyck, mot de, 140
noeud, 93
ordonné, 100 élément
racine, 95 récurrent, 110
automate, 141 endofonction, 110
état, 141 Ensemble
Mandelbrot, 34
bijection, 50 ensemble
des parties, 43
cardinal, 42 paire, 44

179
180 INDEX

ensemble vide, 42 arête


entiers extrémité, 63
modulo n, 19 arêtes, 63
état arbre, 72
final, 143 feuille, 72
initial, 143 biparti complet, 65
boucle, 69
face, 81 chaı̂ne, 79
fermeture transitive, 119 chemin, 69
Ferrers but, 69
diagramme, 150 composé, 70
fonction, 9 composables, 70
but, 9 eulérien, 74
caractéristique, 49 longueur, 69
composé, 10 pas, 69
de préférence, 101 retourné, 70
de stationnement, 102 source, 69
identité, 10 coloration, 85
injective, 51 complet, 65
inverse, 50 composante connexe, 71
inverse à droite, 53 connexe, 71
inverse à gauche, 52 centre, 73
restriction, 49 diamètre, 73
source, 9 distance, 73
surjective, 53 excentricité, 73
fonction ϕ d’Euler, 21 rayon, 73
forêt, 103 cycle, 66, 71
fraction continue, 25 eulérien, 74
convergent, 38 discret, 65
développement, 26 forêt, 72
hamiltonien, 71
grammaire, 140 isomorphisme, 77
dérivation, 140 k-coloriable, 85
règle, 140 mineur, 80
graphe fermeture, 80
cycle nombre
hamiltonien, 71 chromatique, 85
acyclique orientation, 110
puits, 113 orientation acyclique, 114
source, 113 planaire, 81
INDEX 181

polynôme chromatique, 85 intersection, 1, 44


regulier, 67
sagittal, 110 jeu
fonction
simple, 63
Sprague-Grundy, 130
sommet, 63
Grundy
degré, 67
noyau, 130
isolé, 67
impartial, 129
voisin, 67
N -position, 129
voisinage, 67
P -position, 129
sommets adjacent, 63
somme digitale, 130
sous-graphe, 68
induit, 68 langage, 138
valué, 117 étoile, 138
graphe acyclique lettre, 136
rang, 113 occurrence, 137
rang d’un sommet, 114 mot, 136
graphe orienté, 107 concaténation, 137
acyclique, 113 longueur, 137
arc, 107 monoı̈de de, 137
boucle, 107 puissance de, 137
but, 107 vide, 136
chaı̂ne, 112 notation additive, 139
complémentaire, 108 produit, 138
connexe, 112 non-ambigue, 139
fortement, 112 reconnaissable, 143
inverse, 108 reconnu, 143
isomorphisme, 109 longueur d’une ligne, 150
source, 107 matrice
group de permutation, 51
sous-groupe, 167 de valuation, 120
groupe échelon réduite, 146
générateurs, 154 pivot, 146
mot, 154 matrice d’adjacence, 78
présentation, 154 matrice des coûts, 120
problème du mot, 154 matrice symétrique, 78
relations, 154 monôme, 15
mot
Hanoı̈ de Dyck, 140
problème des tours de, 13 préfixe, 137
182 INDEX

suffixe, 137 coefficient, 165


multi-graphe, 142 degré, 15
multigraphe, 76 racine, 166
arête polynômes
multiplicité, 79 produit, 15
somme, 15
Newton
problème
binôme, 18
des tours de Hanoı̈, 13
nombre
produit
Fibonacci, 124
cartésien, 46
nombre d’or, 29
puissance, 20
ordre, 126 cartésienne, 47
chaı̂ne, 128
couvre, 127 réseau, 121
dominance, 155 arc
lexicographique, 156 saturé, 121
linéaire, 126 capacité, 121
total, 126 flot, 121
complet, 122
parcours
nul, 122
infixe, 98
puits, 121
postfixe, 98
préfixe, 98 séparateur, 121
parenthésage, 144 source, 121
équilibré, 144 valeur, 121
partage, 149 relation, 47
colonne, 150 antisymétrique, 48
d’un entier, 149 antitransitive, 127
ligne, 150 d’ordre, 126
longueur, 149 de couverture, 127
part, 149 d’équivalence, 48
vide, 149 égalité, 48
partie, 43 fonctionelle, 9
permutation, 51, 149 matrice, 49
Petersen, 65 réflexive, 47
plan symétrique, 48
point, 88 transitive, 48
plan combinatoire, 88 RSK
plongement, 81 P -tableau, 151
polynôme, 15 Q-tableau, 151
INDEX 183

sous-ensemble, 43
sous-suite
croissante, 153

tableau
forme, 151
tours de Hanoı̈, problème des, 13
trace, 132
treillis
de Young, 155

union, 44
disjointe, 45, 59

Vous aimerez peut-être aussi