Académique Documents
Professionnel Documents
Culture Documents
Graphe: est la donnée d'un ensemble de nœuds appelés sommets et d'un ensemble
de lignes appelées arêtes qui relient certains sommets entre eux.
● On appelle degré entrant d’un sommet x et on note d-(x) le nombre d’arcs dont
l’extrémité est x, c’est à dire le nombre de prédécesseurs de x :
d-(x) = |G-1 (x)|
● On appelle degré sortant d’un sommet x et on note d + (x) le nombre d’arcs
dont l’origine est x, c’est à dire le nombre de successeurs de x :
d + (x) = |G(x)|
● On appelle degré total d’un sommet x et on note d(x) le nombre d’arcs dont x
est l’origine ou l’extrémité (en comptant deux fois les boucles) :
d(x) = d - (x) + d + (x)
● Si G est un graphe non orienté, on définit de la même façon le degré d(x)
d’un sommet x comme le nombre d’arêtes ayant x pour extrémité (en
comptant deux fois les boucles).
1
Exemple:
2
Sous-graphe induit par
S’ = {1, 3, 4}
Graphe valué: Un graphe (orienté ou non) G = (S, A) est valué si il est muni d’une
application
v:A→R
(x, y) → v(x, y)
qui sera appelée valuation. On peut étendre la valuation en une fonction
S × S → R ∪ {+∞} en posant v(x, y) = +∞ si (x, y) n’appartient pas à A.
3
Exemple:
2. Types de graphes
D’une manière générale, on distingue deux grands types de graphes:
● Les graphes orientés G=(S,A)
○ S étant l’ensemble de tous les sommets du graphe
○ A l’ensemble des arcs (Un arc est la donnée d’un couple (x,y) de sommets de
G ayant une origine et une extrémité et étant matérialisée par une flèche allant
de l’origine vers l’extrémité).
Exemple:
4
Exemple: Reprenons l’exemple précédent en construisant le graphe non orienté
correspondant
a. Représentation sagittale
C’est la représentation d’un graphe sous forme de dessin. C’est la plus intuitive.
5
b. Dictionnaire d’un graphe
Encore appelée liste d’adjacence, elle est très utile lorsqu’on souhaite représenter un
graphe en machine sous forme de structure de données. Elle consiste à donner l’ensemble des
sommets du graphe, et pour chaque sommet la liste de ses successeurs.
Exemple : En utilisant l’exemple précédent, on a :
𝑆 = {1, 2, 3, 4}
𝐺(1) = { 2}, 𝐺(2) = {1, 4}, 𝐺(3) = {3, 4} , 𝐺(4) = { }
c. Matrice d’adjacence
6
II. Connexité d’un graphe
a) Chemin
Soit G = (S, A) un graphe orienté. Un chemin C est une suite (x0, x1, . . ., xn-1, xn) de sommets
de G tel que deux sommets consécutifs quelconques xi et xi+1 sont reliés par un arc de G :
∀ i, 0 ≤ i ≤ n - 2, (xi, xi+1) ∈ A Les sommets x0 et xn sont respectivement l’origine
et l’extrémité du chemin C. Le chemin C est formé de n + 1 sommets et de n arcs mis bout à
bout, sa longueur est n. Un chemin peut comporter un seul sommet et être de longueur 0.
Exemple :
(3, 1, 5) est un chemin, (1, 3, 4) n’est pas un chemin, (2) est un chemin, (4, 1, 2, 5) n’est pas un
chemin, (2, 1, 5, 2, 1, 3, 1, 3) est un chemin, (4, 4, 4, 4, 4, 4) est un chemin.
b) Circuit
On appelle circuit un chemin de longueur non nulle et dont l’origine et l’extrémité sont
identiques. Un chemin est dit :
• simple si il ne passe pas deux fois par le même arc
• élémentaire s' il ne passe pas deux fois par le même sommet (à l’exception de l’origine
et l’extrémité pour un circuit).
Remarque : élémentaire ⇒ simple
Ce graphe a quatre composantes connexes : {}, {2, 6}, {3, 5, 7}, et {4}.
Un graphe orienté est fortement connexe si pour tout couple de sommets x, y il existe un
chemin reliant x à y.
Remarque : la définition implique que si x et y sont deux sommets d’un graphe fortement
connexe, alors il existe un chemin de x à y et un chemin de y à x.
Exemples :
Théorème
Un graphe orienté fortement connexe est connexe.
Théorème
7
Un graphe est fortement connexe si et seulement si pour tout couple de sommets x, y il existe
un circuit passant par x et y.
Une composante fortement connexe C d’un graphe G = (S, A) est un sous
ensemble maximal de sommets tels que deux quelconques d’entre eux
soient reliés par un chemin : si x ∈ C, alors ∀ y ∈ C, il existe un
circuit passant par x et y, ∀ z ∈ S \ C, il n’existe pas de circuit
passant par x et z.
Les composantes fortement connexes d’un graphe G = (S, A) forment une partition de S.
Un graphe est fortement connexe si et seulement si il a une seule composante fortement
connexe.
Le sous-graphe induit par une composante fortement connexe C est fortement connexe.
La composante fortement connexe C contenant un sommet x est :
{y ∈ S | il existe un chemin reliant x à y et un chemin reliant y à x}
Exemple
Soit G un graphe non orienté. Une chaîne (respectivement un cycle) eulérienne est une chaîne
(resp. un cycle) qui passe une et une seule fois par toutes les arêtes de G. On définit les mêmes
notions pour un graphe orienté G : un chemin ou un circuit eulérien est un chemin ou un circuit
passant une et une seule fois par tous les arcs de G.
Ce graphe admet un cycle eulérien.
Conditions nécessaires et suffisantes
Les conditions précédentes sont en fait suffisantes.
Théorème
Un graphe G =(S, A) admet un cycle (cas non orienté) ou un circuit (cas orienté) eulérien si et
seulement si les deux conditions suivantes sont vérifiées :
• le graphe G est connexe
• ∀ x ∈ S, d(x) est pair (cas non orienté), ∀ x ∈ S, d+(x) = d-
(x) (cas orienté)
Théorème
Un graphe G =(S, A) admet une chaîne (cas non orienté) ou un chemin (cas orienté) eulérien(ne)
si et seulement si les deux conditions suivantes sont vérifiées :
• graphe G est connexe
• Pour tous les sommets x sauf éventuellement deux, d(x) est pair (cas non orienté),
pour tous les sommets x sauf éventuellement deux, d+(x) = d-(x), les deux derniers vérifiant
d+(x) = d-(x) ± 1 (cas orienté)
8
e) Cycles hamiltoniens
Soit G un graphe non orienté. Un cycle (respectivement une chaîne) hamiltonien est un cycle
(resp. une chaîne) qui passe une et une seule fois par tous les sommets de G. On définit les
mêmes notions pour un graphe orienté G : un circuit ou un chemin hamiltonien est un circuit
ou un chemin passant une et une seule fois par tous les sommets de G.
Conditions nécessaires et suffisantes
Question : comment déterminer si un graphe admet des cycles (circuits) hamiltoniens ?
Contrairement au cas des cycles eulériens, il n’existe pas de réponses
simples : ce problème est algorithmiquement difficile.
f) Graphes valués
Un graphe (orienté ou non) G = (S, A) est valué si il est muni d’une application
v:A→R
(x, y) → v(x, y) qui sera appelée valuation. On peut étendre la valuation en une fonction
S × S → R ∪ {+∞} en posant v(x, y) = +∞ si (x, y) n’appartient pas A.
h) Théorème de Hamilton
A. Définition
● Un chemin est une suite de sommets consécutifs. On peut encore le définir comme une suite
d’arcs aux sommets consécutifs.
● La valuation d’un chemin est la somme des valuations des arcs du chemin.
● Le plus court chemin entre 2 sommets est le chemin qui possède la plus petite valuation.
● Dans un graphe, on peut avoir plusieurs chemins entre 02 sommets donnés. Un problème auquel
on est très souvent confronté est la recherche du plus court chemin:
○ La recherche du plus petit itinéraire dans une carte
○ La recherche du plan le moins coûteux.
● Il existe plusieurs algorithmes de recherche du plus court chemin parmi lesquels:
○ L’algorithme de Dijkstra
○ L’algorithme de Bellman-Ford
9
B. L’algorithme de Bellman-Ford
C’est un algorithme qui permet de résoudre le problème du plus court chemin dans un graphe à
origine unique avec des arcs pouvant avoir des valuations négatives. Cette algorithme permet de
déterminer le plus court chemin vers tous les autres nœuds, de plus
S’il existe un circuit absorbant entre 2 nœuds, alors il n’existe pas de chemin minimal entre ces 2
nœuds.
L’algorithme de Bellman-Ford a 2 variantes: algorithme de Bellman-Ford et algorithme de Bellman-
Ford améliorer.
- Algorithme de Bellman-Ford:
l’algorithme de Bellman-Ford consiste à déterminer itérer sur l’ensemble des nœuds
du graphes en mettant à jour les distances de ces nœuds, du nœud de départ et ceci tant
qu'aucun nœud n’a été mis à jour.
Algorithme
Initialisation:
d(x0) = 0
P(x0) = null
Pour s dans S faire
d(s) = +∞
P(s) = null
fin = faux
tantque fin = faux faire
fin = vrai
Pour x dans S faire
Pour y dans G(x) faire
si d(x) + v(x, y) < d(y) alors
d(y) = d(x) + v(x, y)
P(x) = y
fin = faux
finsi
finpour
finpour
fintantque
10
Algorithme
Initialisation:
d(x0) = 0
P(x0) = null
Pour s dans S faire
d(s) = +∞
P(s) = null
L = {x0}
tantque L non vide faire
choisis x dans L
L = L\{x}
Pour y dans G(x) faire
si d(x) + v(x, y) < d(y) alors
d(y) = d(x) + v(x, y)
P(x) = y
L = L ∪{y}
finsi
finpour
fintantque
Exemple
11
C. L’algorithme de Dijkstra
1. Principe
L’algorithme de Dijkstra est un algorithme plus efficace que l’algorithme de Bellman-Ford,
mais dont l’hypothèse de départ est que toutes les valuations des arcs sont positives.
Principe:
● On construit petit à petit, à partir de {𝑥0 } un ensemble 𝑀 de sommets marqués. Pour
tout sommet marqué 𝑠, l’estimation 𝑑(𝑠) = 𝑑(𝑥0 , 𝑠).
● A chaque étape, on sélectionne un sommet non marqué 𝑥 dont la distance estimée 𝑑(𝑥)
est la plus petite parmi tous les sommets non marqués.
● On marque alors 𝑥 (on ajoute 𝑥 à 𝑀), puis on met à jour à partir de 𝑥 les distances
estimées des successeurs non marqués de 𝑥.
● On recommence, jusqu’à épuisement des sommets non marqués .
2. Algorithme
12
3. Exemple
13
IV. Arbres
● Forêt est un graphe non orienté sans cycle (chacune de ses composantes connexes est un arbre).
NB: Ici, on ne privilégie aucun sommet en particulier. Les arbres classiquement étudiés en
algorithmique sont des arbres enracinés, que l’on verra plus loin.
● Un arbre enraciné est un graphe non orienté connexe sans cycle ayant un unique sommet
sans prédécesseur (la racine),tous ses autres sommets ont exactement un prédécesseur. Il est
souvent muni d’une orientation naturelle : on oriente chaque arête de telle sorte qu’il existe
un chemin de la racine à tout autre sommet.
➔ Exemple 1:
14
➔ Exemple 2:
NB: Si toutes les arêtes ont des valuations positives, son poids est le plus petit possible parmi tous les
sous-graphes connexes couvrants de G.
15
2. Algorithme de Recherche des arbre couvrant de poids minimum
a. Description du problème :
On considère un graphe connexe non-orienté et pondéré : chaque arête possède un poids qui est un nombre
qui représente le coût de cette arête. Dans un tel graphe, un arbre couvrant est un sous-graphe connexe sans
cycle qui contient tous les sommets du graphe. Le poids d'un tel arbre est la somme des poids des arêtes qui
le compose. Un arbre couvrant minimum est un arbre couvrant dont le poids est inférieur ou égal à celui de
tous les autres arbres couvrants du graphe. L'objectif de l'algorithme de Kruskal est de calculer un tel arbre
couvrant minimum.
Ce problème a de nombreuses applications, par exemple simplifier un câblage ou supprimer les liaisons
maritimes les moins rentables en préservant l'accessibilité aux différents ports.
3. Algorithme de PRIME
a. Historique :
L'algorithme a été développé en 1930 par le mathématicien tchèque Vojtech Jarnik, puis a été redécouvert
et publié par Robert C. Prim2 et Edsger W. Dijkstra en 1959. Ainsi, il est parfois appelé DJP algorithm,
Jarník's algorithm, Prim–Jarník algorithm, ou Prim–Dijkstra algorithm.
b. Principe :
On construit un sous-graphe en ajoutant arêtes et sommets les un après les autres. A chaque étape, on
cherche l’arête sortante de plus petite valuation. Une arête est sortante si elle joint un sommet du sous-
graphe à un sommet qui n’est pas dans le sous-graphe. On ajoute alors l’arête et le sommet qu’elle joint
au sous-graphe. On termine dès que l’on a sélectionné n − 1 arêtes.
c. Algorithme :
1: Initialisation
2: A = ensemble des arêtes du graphe G.
3: F = 0 (ensemble des arêtes de l’arbre couvrant)
4: M = {xo} (on marque un sommet quelconque de G).
16
➔ Commentaires sur l’algorithme :
● A chaque étape de l’algorithme, on obtient un sous-graphe partiel qui est
un arbre, et qui grossit jusqu’à devenir couvrant.
● Si le graphe G est bien connexe, le choix du sommet initial n’est pas important : tous les
sommets finissent par être visités par l’algorithme.
● Si le graphe G n’est pas connexe, l’algorithme donne un arbre couvrant de poids minimum sur
la composante connexe de G contenant le sommet initial.
Exemple: Considérons le graphe ci dessous et construisont le arbre couvrant de poid minimal en utilisatn
l’algorithme de Prime
1) 2)
3) 4)
5) 6)
17
7) 8)
9) 10)
11) 12)
13) 14)
18
15) 16)
17)
4. Algorithme de KRUSKAL
a. Historique :
En informatique, l'algorithme de Kruskal est un algorithme de recherche d'arbre recouvrant de poids
minimum (ARPM) ou arbre couvrant minimum (ACM) dans un graphe connexe non-orienté et pondéré. Il
a été conçu en 1956 par Joseph Kruskal.
b. Principe :
On construit un sous-graphe en ajoutant des arêtes une par une. A chaque étape, on cherche l’arête de
plus petite valuation parmi celles que l’on n’a pas déjà explorées. Si elle ne crée pas un cycle, on l’ajoute
au sous-graphe, sinon on la laisse de côté. On termine dès que l’on a sélectionné n – 1 arêtes, ou qu’il
ne reste plus d’arêtes ne créant pas de cycles.
c. Algorithme :
19
Algorithme 1 : Algorithme de KRUSKAL
Entrées: (S, A) ensemble des sommets et arêtes du graphe
Sorties: Arbre couvrant de poid minimum
1: Initialisation
2: A = ensemble des arêtes du graphe G.
3: F = 0 (ensemble des arêtes de l’arbre couvrant)
9: return F
20
● on considère les arrêts de poids minimal
● On choisit un arrêt aléatoirement de façon à ne pas former un cycle qu’on met en rouge.
On utilise tous les arrêts ayant le poids minimal puis on choisit de nouveau le poids
minimal et on recommence le processus.
21
...
22
V. Heuristique
1. Définitions
Une heuristique h est une fonction d’estimation du coût restant entre entre un nœud quelconque d’un
graphe et le but(le nœud à atteindre).
Un algorithme admissible est un algorithme qui garantit toujours de trouver le chemin le plus court
pour atteindre un but. Lorsqu’elle utilise une heuristique qui la rend admissible, l’heuristique elle-même
est qualifiée d’heuristique admissible.
2. Algorithme Best-First
a) Algorithme
L’algorithme est le suivant :
b) Exemple :
23
Initialisation : OUVERT {A,B}, FERME {S}
1- OUVERT {A}, FERME {S,B}
2- OUVERT {E,F,A}, FERME {S,B}
3- OUVERT {E,A}, FERME {S,B,F}
4- OUVERT {I,G,E,A}, FERME{S,B,F}
5- OUVERT {I,E,A}, FERME{S,B,F,G}
Le chemin optimal pour arriver au point G est donc : SBFG
24
3. Algorithme de recherche Greedy Best first
L’algorithme Greedy Best-first (meilleur d’abord glouton) est un cas particulier de l’algorithme
Best-First où la fonction d’évaluation est choisie comme étant la fonction heuristique : f(n) = h(n). Par
conséquent, BFS gourmand essaie d'étendre le nœud qui est considéré comme le plus proche de
l'objectif, sans prendre en compte les connaissances précédemment collectées (c'est-à-dire g(n)).
a) Principe
Le principe est le même que celui de Best-First search à la différence qu’à chaque étape, on choisit le
nœud pour lequel la fonction heuristique est minimale.
b) Exemple :
4. (g, 0, f), (b, 5, a), (d, 2, a) (a, 9, void), (c, 2, a), (f, 3, c)
5. return (g, f, c, a)
25
c) Caractéristiques
L’algorithme greedy best-first search a les caractéristiques suivantes:
● Complétude : non complet
● Optimal : non optimal
● Complexité en temps : O(b^m)
● Complexité en espace : O(b^m)
4. Algorithme A et A*
a) Présentation
Dans cette partie nous présenterons l’algorithme de parcours général d’un graphe
b) Principe
Alors l'algorithme “greedy search” avec la fonction f(n) est appelé algorithme A*
26
c) Exemple: Recherche d’un chemin entre deux villes (Algorithme A*)
★ no ville de départ
★ n6 destination
★ h distance à vol d'oiseau
★ c distance réelle entre deux villes
Contenu de Open à chaque itération (état, f, parent): Contenu de closed à chaque itération
3. (n2, 6, n0); (n3,7,n0); (n5, 12, n1); 3. (n0, 9, null); (n1, 5, n0)
Solution: n0,n3,n4,n6
27
c) caractéristiques
● Si h(n) = 0 pour tout n, alors A∗ est équivalent à l'algorithme de Dijkstra de calcul du plus
court chemin
● Théorème : A ∗ est optimale
● Complétude : Oui, sauf s’il y a une infinit´e de nœuds tels que f ≤ f (G)
● Temps : exponentielle selon la longueur de la solution
● Espace : exponentielle (garde tous les nœuds en m´emoire) Habituellement, on manque
d’espace bien avant de manquer de temps
● Optimale : Oui
Bibliographie
[1]« 17_TES_lecon_grapheproba.pdf ». Consulté le: oct. 29, 2021. [En ligne].
Disponible sur:
https://lewebpedagogique.com/valiblog2/files/2018/01/17_TES_lecon_grapheproba.p
df
[2]« Formation ISN - Qu’est-ce qu’un graphe ? » http://math.univ-
lyon1.fr/irem/Formation_ISN/formation_parcours_graphes/graphe/1_notion_graphe.ht
ml (consulté le oct. 29, 2021).
[3] Best first search algorithm in AI
https://www.mygreatlearning.com/blog/best-first-search-bfs/
28