Graphes, parcours, plus courts chemins & ordonnancement
Idée. La recherche opérationnelle (RO) modélise et résout des problèmes de décision : trouver le plus court trajet, le réseau de câblage le moins coûteux, l'ordonnancement le plus rapide d'un chantier. Son langage de base est la théorie des graphes ; ses outils sont des algorithmes dont on connaît la correction et le coût.
A. Graphes : vocabulaire & représentation
Un graphe
- Degré d'un sommet (non orienté) : nombre d'arêtes qui l'atteignent. Lemme des poignées de main :
(chaque arête compte pour). Conséquence : le nombre de sommets de degré impair est toujours pair. - Représentations : la matrice d'adjacence
( si ) — pratique pour les calculs matriciels, coûteuse en mémoire ( ) ; les listes d'adjacence — compactes pour un graphe creux.
Exemple. Graphe à sommets
, arêtes . Degrés , somme .
B. Parcours & connexité
- Parcours en largeur (BFS) : explore par couches au moyen d'une file ; donne le plus court chemin en nombre d'arêtes.
- Parcours en profondeur (DFS) : plonge le plus loin possible au moyen d'une pile (ou la récursion) ; sert à détecter les cycles, calculer un tri topologique, les composantes.
- Connexité : un graphe est connexe si tout sommet est atteignable depuis tout autre. Sinon il se décompose en composantes connexes.
- Graphe eulérien (Euler, ponts de Königsberg, 1736) : un chemin eulérien (passant une et une seule fois par chaque arête) existe ssi le graphe connexe a
ou sommets de degré impair ; un circuit eulérien (fermé) ssi sommet impair. - Graphe biparti : sommets séparables en deux groupes sans arête interne. Théorème : biparti
-coloriable aucun cycle de longueur impaire.
C. Graphes orientés acycliques (DAG) & tri topologique
Un DAG est un graphe orienté sans circuit. On peut alors ranger ses sommets en une liste où chaque arc
D. Plus courts chemins
Sur un graphe pondéré, trouver le chemin de poids minimal entre deux sommets :
| Algorithme | Poids | Complexité | Usage |
|---|---|---|---|
| Dijkstra | source unique, poids positifs | ||
| Bellman-Ford | quelconques | poids négatifs, détecte un cycle négatif | |
| Floyd-Warshall | quelconques | toutes les paires |
- Dijkstra est glouton : il fixe à chaque étape le sommet non traité de plus petite distance provisoire, puis relâche ses arcs. L'hypothèse
est essentielle (un sommet fixé ne peut plus être amélioré). - Bellman-Ford relâche toutes les arêtes
fois ; une amélioration au -ième tour signale un cycle de poids négatif (où la notion de plus court chemin n'a plus de sens). - On reconstruit le chemin via le tableau des prédécesseurs.
Exemple (Dijkstra). Arcs
, , , , , . Distances depuis : ; chemin optimal vers : (coût ).
E. Arbres couvrants & ordonnancement
- Arbre couvrant : sous-graphe connexe, sans cycle, touchant tous les sommets. Il a exactement
arêtes. - Arbre couvrant minimal (ACM) : celui de poids total minimal. Deux algorithmes gloutons optimaux :
- Kruskal : trier les arêtes par poids croissant, ajouter chaque arête qui ne crée pas de cycle (test par union-find).
- Prim : faire croître l'arbre depuis un sommet en ajoutant l'arête sortante la moins chère.
- Ordonnancement (PERT/CPM) : les tâches forment un DAG pondéré par les durées. La date de fin du projet est la longueur du plus long chemin ; les tâches de ce chemin (de marge nulle) forment le chemin critique. La marge d'une tâche
date au plus tard date au plus tôt : seule une tâche critique, raccourcie, raccourcit le projet.
Exemple (PERT). Tâches
de durées , dépendances , , , : durée du projet , chemin critique ( ), marges .