📘 Fiche de cours
L'essentiel du cours
Un graphe $G = (V, E)$ est défini par un ensemble de sommets $V$ et un ensemble d'arêtes $E$.
- Représentation :
- Matrice d'adjacence $M$ : $M[i][j] = 1$ s'il existe une arête entre $i$ et $j$, 0 sinon. Complexité spatiale $O(|V|^2)$.
- Liste d'adjacence : Dictionnaire ou liste de listes où chaque sommet pointe vers ses voisins. Complexité spatiale $O(|V| + |E|)$.
- Parcours :
- BFS (Breadth-First Search) : Utilise une file (FIFO). Idéal pour trouver le plus court chemin dans un graphe non pondéré.
- DFS (Depth-First Search) : Utilise une pile (LIFO) ou la récursion. Idéal pour détecter des cycles ou explorer toutes les composantes.
Méthodes à maîtriser
- Passer de la représentation matricielle à la liste d'adjacence et inversement.
- Écrire l'algorithme BFS avec une file
collections.deque. - Écrire l'algorithme DFS de manière récursive.
- Calculer la complexité temporelle : $O(|V| + |E|)$ pour les deux parcours.
Exemples corrigés
- BFS : Pour un graphe donné, marquer le sommet de départ comme visité, l'enfiler. Tant que la file n'est pas vide, défiler, traiter, et enfiler les voisins non visités.
- DFS : Pour un sommet $u$, marquer $u$ comme visité, puis pour chaque voisin $v$ non visité, appeler récursivement
DFS(v).
Erreurs fréquentes
- Oublier de marquer un sommet comme "visité", ce qui provoque une boucle infinie.
- Confondre la complexité de la matrice ($O(|V|^2)$) avec celle de la liste d'adjacence ($O(|V|+|E|)$).
- Utiliser une liste simple au lieu d'une
dequepour le BFS (perte de performance en $O(n)$ pourpop(0)).