ASD3-Chap4Graphes
ASD3-Chap4Graphes
ASD3-Chap4Graphes
1. DEFINITION x3 x2
1.1 Graphes orientés x1
Définitions : x4 x5
- Un graphe 𝑮 est un couple (𝑿, 𝑼) où :
𝑋 est un ensemble {𝑥 , … , 𝑥 } de nœuds ou sommets.
𝑈 = {𝑢 , 𝑢 , … , 𝑢 } est une famille de couples ordonnées de sommets appelées arcs.
- Un graphe est dit valué s’il une application 𝐶 : 𝑈 → 𝑅, associant à chaque arc 𝑢 un réel 𝑐 .
- Une boucle est un arc reliant un nœud à lui-même.
- Chaque arc 𝑢 = (𝑥, 𝑦) a deux extrémités appelées initiale (𝑥) et terminale (𝑦). 𝑢 est dit incident
intérieurement à 𝑥 et incident extérieurement à 𝑦.
- Dans un arc de la forme (𝑥, 𝑦), 𝑥 est appelé prédécesseur de 𝑦 et 𝑦 est dit successeur de 𝑥.
𝑥 et 𝑦 sont appelés sommets voisins (ou adjacents).
- L’ensemble des successeurs de 𝑥 est noté 𝛤(𝑥) et celui de ses prédécesseurs est noté 𝛤 (𝑥).
- Le nombre de successeurs de 𝑥 est appelé demi degré extérieur et est noté 𝑑 (𝑥) = |𝛤(𝑥)|.
Le demi degré intérieur de 𝑥 est défini comme étant 𝑑 (𝑥) = |𝛤 (𝑥)|. Le degré de 𝑥 est défini
comme suit : 𝑑 (𝑥) = 𝑑 (𝑥) + 𝑑 (𝑥).
- La densité d’un graphe est définie par le rapport 𝒎/𝒏² c'est-à-dire le nombre actuel d’arcs de 𝐺 divisé
par le nombre maximum d’arcs que peut avoir 𝐺. La plupart des graphes rencontrés en pratique ne sont
pas très dense (à faible densité). Ils sont appelés creux (en Anglais sparse).
1.3 Parcours
- On appelle chemin 𝜇 de longueur 𝑝 toute suite de 𝑝 arcs (𝑢 , … , 𝑢 ) telle que l’extrémité initiale de 𝑢
est égale à l’extrémité terminale de 𝑢 ∀ 𝑖 > 1, et l’extrémité terminale de 𝑢 est égale à l’extrémité
initiale de 𝑢 ∀ 𝑖 < 𝑝.
- On appelle circuit tout chemin fermé, c'est-à-dire un chemin tel que 𝑢 = 𝑢 .
- Un arc est un chemin de longueur 1 et une boucle est un circuit de longueur 1 aussi.
- Si le graphe est non orienté, on parle de chaine au lieu de chemin, et de cycle au lieu de circuit.
- Un parcours est un élément de l’ensemble des chemins, circuits, chaînes et cycles.
Exemple : Le graphe donné en exemple à la section 1.1. est représenté par la matrice d’adjacence M :
𝑥 𝑥 𝑥 𝑥 𝑥
𝑥 0 0 0 0 0
𝑥 1 0 1 0 0
𝑥 0 0 1 1 0
𝑥 0 0 1 0 1
𝑥 0 0 0 0 0
1 2 3 4 5 6
1 1 3 5 7 7 Tete
1 3 3 4 3 5 Succ
1 2 3 4 5 6
b. Listes Chaînées
Le même principe peut être appliqué en utilisant des listes chaînées comme suit :
Tete
1 null
2 1 3 null
3 3 4 null
4 3 5 null
5 null
Là aussi, il y a lieu d’ajouter pour chaque bloc une case supplémentaire dans le cas de graphe valué pour
stocker le poids de l’arc.
c. Exemple
Soit un graphe G orienté, dont les sommets sont (s1, s2, s3, s4, s5, s6) représenté par la matrice d’adjacence
suivante. Donner les ordres de parcours en largeur BFS et en profondeur DFS, à partir du sommet s1.
0 1 1 0 0 1
⎡1 1 0 1 1 0⎤
⎢ ⎥
1 0 0 1 1 0⎥
𝐴=⎢
⎢0 1 1 1 0 1⎥
⎢0 1 1 0 0 1⎥
⎣0 0 0 1 1 1⎦
BFS :
s5
s6 s4 s5
File
s3 s6 s4 s5 File
s1 s2 s3 s6 s4 s5 Vide
Sommets Marqués s1 s2,s3,s6 s4,s5
Ordre de défilement : s1,s2,s3,s6,s4,s5
DFS :
s6
s5 s5 s5
Pile s3 s3 s3 s3 s3
s4 s4 s4 s4 s4 s4 s4
s2 s2 s2 s2 s2 s2 s2 s2 s2 Pile
s1 s1 s1 s1 s1 s1 s1 s1 s1 s1 s1 Vide
Sommets Marqués s1 s2 s4 s3 s5 s6
Ordre de dépilement : s6,s5,s3,s4,s2,s1
Il existe une famille d’algorithmes qui calculent V[x] d’une manière définitive pour chaque sommet 𝑥. Ces
algorithmes sont appelés à fixation d’étiquettes et le plus répandu de cette classe est l’algorithme de
Dijkstra. D’autres algorithmes affinent jusqu'à la dernière itération l’étiquette de chaque sommet x. Cette
classe est appelée à correction d’étiquettes. Il y a lieu de distinguer les cas suivants :
- Cas 𝑊 constante. Le problème se réduit à celui de la recherche des chemins contenant le plus petit
nombre d’arcs qui peut être résolu par une exploration en largeur.
- Cas 𝑊 ≥ 0. Le problème peut être résolu par l’algorithme de Dijkstra qui est du type à fixation
d’étiquettes et dont la complexité est 𝑂(𝑛²). Il existe une implémentation en structure de tas dont la
complexité est 𝑂(𝑛 𝑙𝑜𝑔 𝑛) .
Algorithme de Dijkstra
s : sommet de départ
Initialiser le tableau V à +∞ //Valeur des plus court chemins
Initialiser le tableau P à 0 //Détail des chemins (Path)
V[s]=O
P[s]=s
Répéter
// Chercher sommet non fixé de V minimal
Vmin=+
Pour i=1 à n faire
Si (i non fixé et V[i]<Vmin) alors x=i; Vmin=V[i] fsi
Finpour
Si Vmin<+
Fixer x
// Mise à jour des successeurs
Pour chaque successeur y de x faire
Si V[x]+W[x][y] < V[y]
V[y] = V[x]+W[x][y];
P[y] = x
Fsi
Finpour
Fsi
Jusqu’à Vmin=+
Exemple : Soit G = (X,U,C) un graphe orienté valué représenté par la figure suivante. Dérouler l’algorithme
de Dijkstra en prenant comme sommet de départ 1.
Tableau V
Sommets
1 2 3 4 5 6
Marqués
0 ∞ ∞ ∞ ∞ ∞ 1
4 1 2 ∞ ∞ 3
4 2 5 7 4
4 5 7 2
5 7 5
6 6
Résultat
0 4 1 2 5 6
Final
Tableau P
1 2 3 4 5 6
1 0 0 0 0 0
1 1 1 3 3
5