Ce tutoriel va vous expliquer ce qu'est un graphe, et à quoi il sert. Il détaillera les algorithmes de graphe les plus courants, en indiquant leur complexité en temps et en mémoire, avec peut-être des schémas si vous êtes sages.
Chaque algorithme sera accompagné d'un pseudo-code pour laisser au programmeur l'opportunité de le coder dans son langage favori. Le cours est ouvert aux contributions : vous pouvez m'envoyer une implémentation de l'algorithme dans le langage de votre choix et je l'y ajouterais.
Il sera appuyé d'exemples concrets pour que l'intérêt de chaque algorithme apparaisse dans une situation courante. L'objectif est d'apprendre à reconnaître des problèmes de graphe, ou à modéliser un problème sous forme de graphe, pour le résoudre avec des outils éprouvés et efficaces.
Ce document n'a pas pour ambition de faire une démonstration formelle de la complexité ou de la validité des algorithmes. Il n'a aucune vocation académique. Les concepts seront présentés de façon intuitive et didactique pour permettre à tous de les appréhender et de les appliquer aisément. Il se veut être une "boîte à outils" aussi bien qu'un moyen de découvrir ce domaine de l'algorithmique. Le formalisme et la rigueur ont été sacrifiés sur l'autel de la simplicité, mais pas l'exactitude ni la précision.
Pour suivre ce tutoriel vous devez
- Savoir programmer (variables, boucles, tableaux, fonctions)
- Avoir des notions de base en algorithmique : récursivité, structures de données courantes, tris…
- Comprendre ce qu'est la complexité (facultatif mais utile)
Bases de la théorie des graphes
Ce tutoriel n'est pas terminé !
D'autres chapitres viendront :
III] Problèmes usuels de graphes
- Circuit Eulérien
- Nœuds essentiels
- Arêtes essentielles
- Algorithmes dynamiques pour les DAG (Directed Acyclic Graph)
IV] Pathfinding
- BFS (on en reparle)
- Ford-Bellman
- Dijkstra
- Floyd-Warshall
- A* et autres heuristiques du même type
Restez au courant si ça vous intéresse.