Référence Rapide

Aide-mémoire des Algorithmes de Graphes : Complexité, Usages et Choix

Une page à parcourir avant un entretien ou en codant. Chaque algorithme de graphe important, sa complexité en temps et en espace, à quoi il est le mieux adapté, et un guide de décision pour choisir le bon quand le chrono tourne.

11 Min de lecture Mis à jour : Juillet 2026 Tous Niveaux
Mohammed Islam Hadjoudj
Mohammed Islam Hadjoudj
Expert Operations Research Engineer
Parcours BFS DFS Plus Courts Chemins Dijkstra Bellman-Ford Floyd-Warshall A* Arbres couvrants Kruskal Prim Ordonnancement Tri topologique Détection de cycles Connexité Union-Find Tarjan / Kosaraju (SCC) Flot de Réseau Ford-Fulkerson Edmonds-Karp
Les six familles d'algorithmes de graphes. Presque tout problème de graphe entre dans l'une d'elles.

Cet aide-mémoire est conçu pour deux moments : la dernière heure avant un entretien technique, et le milieu d'une session de code quand vous connaissez la forme du problème mais qu'il vous faut l'outil exact. Il est volontairement compact. Pour toute l'histoire derrière chaque algorithme, suivez les liens vers les articles approfondis, et si vous voulez un parcours structuré à travers tout cela, commencez par la feuille de route de la théorie des graphes.

Tout au long, V est le nombre de sommets (nœuds) et E le nombre d'arêtes.

Le Grand Tableau de Complexité

La chose la plus utile à connaître par cœur. Les complexités supposent l'implémentation efficace standard (tas binaire pour Dijkstra et Prim, compression de chemin et union par rang pour union-find).

AlgorithmeIdéal pourTempsEspace
BFSPlus court chemin dans les graphes non pondérés, parcours par niveauxO(V + E)O(V)
DFSConnexité, cycles, exploration de la structureO(V + E)O(V)
DijkstraPlus court chemin, poids non négatifsO((V + E) log V)O(V)
Bellman-FordPlus court chemin avec poids négatifsO(V · E)O(V)
Floyd-WarshallPlus courts chemins entre toutes les paires, petits graphes densesO(V³)O(V²)
A*Plus court chemin heuristique (cartes, jeux)O(E) typiqueO(V)
KruskalArbre couvrant minimal, graphes creuxO(E log E)O(V)
PrimArbre couvrant minimal, graphes densesO((V + E) log V)O(V)
Topological SortOrdonner un DAG par dépendancesO(V + E)O(V)
Union-FindConnexité dynamique, regroupementO(α(V)) par op.O(V)
Tarjan / KosarajuComposantes fortement connexesO(V + E)O(V)
Edmonds-KarpFlot maximum, coupe minimumO(V · E²)O(V + E)
Besoin du vrai code ? Ce tableau liste 12 essentiels en un coup d'œil. Le Manuel des algorithmes contient les 55, chacun avec le pseudocode et sa complexité détaillée étape par étape.

Note sur A* : son temps d'exécution dépend entièrement de l'heuristique. Avec une heuristique parfaite, il va presque tout droit au but ; avec une inutile, il se dégrade en Dijkstra. Le α d'union-find est la fonction d'Ackermann inverse, en pratique une petite constante pour toute entrée que vous verrez jamais. Pour le raisonnement derrière chaque ligne, voir le guide de la complexité des algorithmes de graphes.

Représentations de Graphes

Avant tout algorithme, vous choisissez comment stocker le graphe. Cette seule décision influe sur chaque complexité ci-dessus.

ReprésentationEspaceConsultation d'arêteIdéal pour
Liste d'adjacenceO(V + E)O(degree)Graphes creux, le choix par défaut
Matrice d'adjacenceO(V²)O(1)Graphes denses, consultations en temps constant

Règle empirique : prenez la liste d'adjacence sauf si le graphe est dense ou que vous avez besoin de tests d'arêtes en temps constant. Une grille 2D est un graphe implicite où chaque cellule est un nœud relié à ses voisines, si bien que vous n'avez souvent besoin d'aucune représentation explicite.

Parcours : BFS et DFS

Les deux algorithmes sur lesquels tout le reste repose. Apprenez la comparaison complète dans BFS vs DFS.

Plus Courts Chemins

La famille la plus courante en entretien et en pratique. Le bon choix est dicté par les poids des arêtes. L'approfondissement complet est dans comprendre les algorithmes de plus courts chemins.

SituationUtiliserPourquoi
Arêtes non pondéréesBFSLa première arrivée est le plus court chemin
Poids non négatifsDijkstraGlouton avec un tas-min, toujours correct ici
Poids négatifsBellman-FordRelâche les arêtes V-1 fois, détecte les cycles négatifs
Toutes les paires d'un coupFloyd-WarshallTrois boucles imbriquées, code minuscule, parfait sur les petits graphes
Vous avez une heuristiqueA*Dijkstra guidé vers le but, voir A*
Le piège classique : n'exécutez jamais Dijkstra sur un graphe à arêtes négatives. Il fixe un nœud comme définitif trop tôt et peut renvoyer une réponse fausse. Prenez plutôt Bellman-Ford.

Arbres Couvrants Minimaux

Reliez chaque sommet au coût total d'arêtes le plus faible. Les deux algorithmes sont corrects ; choisissez selon la densité du graphe. Déroulés complets dans arbres couvrants minimaux.

Ordonnancement et Connexité

Les trois reviennent constamment en entretien. Voir les schémas résolus dans les algorithmes de graphes essentiels pour les entretiens de code.

Flot de Réseau

Modélisez le débit, le couplage et les goulots d'étranglement. Le résultat élégant ici est que le flot maximum égale la coupe minimum. Traitement complet dans le flot de réseau et le théorème flot-max coupe-min.

Quel Algorithme Utiliser ?

La façon la plus rapide d'utiliser cet aide-mémoire : lisez la colonne de gauche, sautez à droite.

Si vous devez…Prenez
Visiter ou explorer chaque nœudBFS ou DFS
Trouver le plus court chemin dans un graphe non pondéréBFS
Trouver le plus court chemin avec poids non négatifsDijkstra
Gérer des poids d'arêtes négatifsBellman-Ford
Obtenir les plus courts chemins entre toutes les pairesFloyd-Warshall
Trouver un chemin rapide avec une heuristique (cartes, jeux)A*
Tout relier au coût minimumKruskal ou Prim
Ordonner des tâches selon leurs dépendancesTri topologique
Vérifier si deux nœuds sont connectés, ou regrouper des élémentsUnion-Find
Trouver des grappes dans un graphe orientéTarjan ou Kosaraju (SCC)
Maximiser le débit ou trouver un goulot d'étranglementEdmonds-Karp (flot max)

Transformez le tableau en intuition

Un aide-mémoire vous dit quel algorithme ; le voir tourner vous dit pourquoi. Parcourez l'un d'eux pas à pas sur un graphe en direct.

Ouvrir le visualiseur d'algorithmes

Foire Aux Questions

Quelle est la complexité temporelle de l'algorithme de Dijkstra ?

Avec un tas binaire (file de priorité), l'algorithme de Dijkstra s'exécute en temps O((V + E) log V) et en espace O(V). Avec un simple tableau au lieu d'un tas, il est en O(V au carré), ce qui peut être plus rapide sur les graphes denses.

Quel algorithme de graphe utiliser pour les plus courts chemins ?

Cela dépend du graphe. Utilisez BFS pour les graphes non pondérés, Dijkstra pour les poids non négatifs, Bellman-Ford en présence de poids négatifs, Floyd-Warshall pour les plus courts chemins entre toutes les paires, et A* quand vous avez une bonne heuristique (cartes et jeux).

Faut-il utiliser une liste d'adjacence ou une matrice d'adjacence ?

Utilisez une liste d'adjacence pour les graphes creux : elle utilise O(V + E) espace et c'est le choix par défaut pour la plupart des problèmes. Utilisez une matrice d'adjacence pour les graphes denses ou quand vous avez besoin de consultations d'arêtes en O(1), au prix de O(V au carré) espace.

Quels algorithmes de graphes faut-il mémoriser pour les entretiens de code ?

Les cinq essentiels sont BFS, DFS, l'algorithme de Dijkstra, le tri topologique et union-find. Ensemble, ils couvrent la grande majorité des questions de graphes posées en entretien technique.

Ressources d'Apprentissage Supplémentaires

Mettez Ceci en Favori, Puis Approfondissez

Un aide-mémoire vous débloque vite. La vraie aisance vient de voir ces algorithmes tourner. Choisissez-en un et appuyez sur lecture.

Entraînez-vous avec le visualiseur d'algorithmes