Académique Documents
Professionnel Documents
Culture Documents
Algorithme de Bellman-Ford
INIT(G, s)
for chaque sommet v ∈ V
do d[v ] ← ∞
π[v ] ← NIL
d[s] = 0
RELAX(u, v, W)
If d[v ] > d[u] + w(u, v )
then d[v ] ← d[u] + w(u, v )
π[v ] ← u
L’algorithme de Bellman-Ford
BELLMAN-FORD(G, W, s)
INIT(G, s)
for i ← 1 à |V | − 1
do for pour chaque arête (u, v ) ∈ E
do RELAX(u, v, W)
for chaque arête (u, v ) ∈ E
do if d[v ] > d[u] + W(u, v )
then return FALSE
return TRUE
Exercice
Introduction
Un tas est un arbre binaire dont les clés des noeuds satisfont la
propriété suivante :
La clé de chaque noeud est supérieure ou égale à la clé de chacun de
ses noeuds enfants.
Inégalité triangulaire
Borne supérieure
Pas de chemin
Convergence
Relaxation de chemin
Sous-graphe de prédécesseurs
Les files et les piles sont des ensembles dynamiques dans lesquels
l’élément retiré d’un ensemble par l’opération de suppression est
pré-spécifié.
Dans une pile, l’élément supprimé de l’ensemble est celui qui a été le
plus récemment inséré : la pile implémente une politique de Last-in,
First-out ou LIFO.
De façon similaire, dans une file, l’élément supprimé est toujours celui
qui a été dans l’ensemble dynamique le plus longtemps. Une file
implémente une politique de First-in, First-out ou FIFO. Il existe
différentes façons d’implémenter des files et des piles dans un
ordinateur.
Les piles
L’opération d’insertion dans une pile est souvent appelée PUSH tandis
que l’opération de suppression qui ne prend pas d’élément comme
argument est souvent appelée POP.
Une pile contenant au plus n éléments peut être implémenté avec un
tableau S[]. Le tableau possède un attribut top[S] qui indexe l’élément
le plus récemment inséré. La pile consiste en un tableau S[1..top[S]]
dans lequel S[1] l’élément du fond de la pile et top[S] se trouve à la
tête de la pile.
Quand top[S] = 0, la pile ne contient pas d’éléments. Elle est vide.
PUSH(S,x)
top[S] := top[S] + 1
S[top[S]] := x
POP(S)
If STACK-EMPTY(s)
then error ”underflow”
else top[S] := top[S] − 1
return S[top[S] + 1]
Semestre 1, Année académique 2023
Ayoub Insa Correa (Université de Thies) 26 / 84
Les algorithmes de base d’exploration de graphes Les Piles et Files
Exemple
Exercice 3.1
Les files
L’opération d’insertion dans une file est appelée ENQUEUE tandis que
l’opération de suppression est appelée DEQUEUE (qui comme dans
l’opération sur les pile POP ne prend pas d’élément comme argument).
Sa propriété FIFO fait qu’une file agit comme une queue dans laquelle
le premier arrivé est le premier servi. Une façon d’implémenter une file
est de le faire avec un tableau contenant au plus n - 1 éléments
Q[1..n].
Une file a un attribut head qui indexe ou pointe sur la tête de file.
L’attribut tail indexe le prochain emplacement dans lequel le nouveau
élément arrivé sera inséré dans la file.
Les éléments de la file sont disposés de façon circulaire
head[Q], head[Q + 1]..tail[Q].
Quand head[Q] = tail[Q], la file est vide. Initialement, nous avons
head[Q] = tail[Q] = 1. Quand head[Q] = tail[Q] + 1, la file pleine.
ENQUEUE(Q,x)
tail[Q] := x
If tail[Q] = length[Q]
then tail[Q] := 1
else tail[Q] := tail[Q] + 1
DEQUEUE (Q)
x := Q[head[Q]]
if head[Q] = length[Q]
then head[Q] := 1
else head[Q] := head[Q] + 1
return x
Exemple
Exercice 3.2
Exercice 3.3
Listes chainées
▶ Simple ;
▶ Doublement chainée ;
▶ Circulaire doublement chainée.
▶ Recherche ;
▶ Insertion ;
▶ Suppression.
Hypothèses et précisions
For each u ∈ V − s
do color [u] := BLANC
d[u] := ∞
π(u) := NIL
color [s] := GRIS
d[s] := 0
π(s) := NIL
Q := ∅
ENQUEUE(Q, s)
While Q ̸= ∅
do u := DEQUEUE(Q)
For each v ∈ Adj[u]
do if color [v ] := BLANC
then color [v ] := GRIS
d[v ] := d[u] + 1
π(v ) := u
ENQUEUE(Q,v)
color [u] := NOIR Semestre 1, Année académique 2023
Ayoub Insa Correa (Université de Thies) 39 / 84
Les algorithmes de base d’exploration de graphes L’algorithme de recherche en largeur Breadth-First-Search -BFS-
V1 V3 V5 V7
V4 V6
V2
1 3 5 7
2 4 6
Description du DFS
Outre la création d’une forêt, la DFS met deux étiquettes temps (time
stamps) sur chaque sommet v. La première étiquette d[v ] enregistre le
moment où v est découvert pour la première fois (et colorié en gris)
tandis que la seconde étiquette f [u] enregistre le moment où
l’exploration finit de scruter la liste d’adjacence de v (et noircit v).
Ces étiquettes temps sont des nombres entiers compris entre 1 et |V |
puisqu’elles sont créées pour chacun des |V | sommets. Elles sont
utilisées dans beaucoup d’algorithmes de graphes et sont souvent
utiles dans le raisonnement sur le comportement du DFS.
Pour chaque sommet u, d[u] < f [u].
Un sommet est BLANC avant le temps d[u], GRIS entre d[u] et f [u] et
NOIR après f [u].
DFS(G) :
for each u ∈ V
do color [u] := BLANC
π(u) := NIL
time := 0
for each u ∈ V
do if color [u] := BLANC
then DFS-VISIT(u)
DFS-VISIT(u) :
La lettre F sur une arête indique c’est une arête avant (forward edge).
La lettre B sur une arête indique c’est une arête arrière (back edge).
La lettre C sur une arête indique c’est une arête croisée (cross edge).
Semestre 1, Année académique 2023
Ayoub Insa Correa (Université de Thies) 53 / 84
L’algorithme de recherche en profondeur Depth-First-Search
Les algorithmes de base d’exploration de graphes -DFS-
Remarques
Le tri topologique
Cette partie porte sur une application de l’algo DFS aux graphes
orientés acycliques.
Un tri topologique sur un graphe orienté acyclique G = (V , E) est un
rangement linéaire de tous ses sommets de telle sorte que si G
contient un arc (u, v ) alors u apparait avant v dans le rangement. Si le
graphe n’est pas acyclique, alors aucun rangement linéaire n’est
possible.
Un tri topologique d’un graphe peut être vu comme un rangement de
ses sommets le long d’une droite horizontale de telle sorte que les
arcs vont de la gauche vers la droite.
COMP-FORTEMENT-CONNEXES(G)
Étape 1 : Appeler DFS(G) pour calculer les temps de complétion f [u]
pour chaque sommet.
Étape 2 : Calculer GT .
Étape 3 : Appeler DFS(GT ), mais dans la boucle principale de DFS
considérer les sommets dans l’ordre décroissant des f [u] comme
calculé en Ligne 1.
Étape 4 : Retourner les sommets de chaque arbre de la forêt formée
dans Ligne 3 comme une composante fortement connexe séparée.
Remarques :
La forêt calculée dans la Ligne 3 de l’algo
COMP-FORTEMENT-CONNEXES(G) est montrée dans l’exemple
précédent avec les arcs d’arbre ombragés. Chaque composante
fortement connexe correspond à un arbre du DFS. Les sommets b, c,
g et h, qui sont fortement ombragés sont les racines des arbres
produits par le DFS (GT ).
début
m(s) = 0
Q=s
Tant que Q ̸= ∅ et m(t) non défini faire
debut
Soit v un élément de Q
retirer v de Q
pour tout v ′ ∈ S(v ) alors
debut
si m(v ′ ) indéfini alors m(v ′ ) = v
si v ′ = t alors CHEMIN(v ′ )
sinon introduire v ′ dans Q
fin
fin
écrire "pas de chemin de s à t dans G"
Fin tant que
fin
Semestre 1, Année académique 2023
Ayoub Insa Correa (Université de Thies) 67 / 84
Les algorithmes de base d’exploration de graphes Applications de l’algo de DFS
Procédure CHEMIN(v)
Exercice 1 (TD)
Exercice 2 (TD)
Convention de notation
Tableau (Array)
Enregistrement (Record)
1 4
2 3