Apprentissage interactif de la théorie des graphes
Apprentissage interactif de la théorie des graphes
Guest User
Using app without sign in
Calculateur de flot maximum
Trouve le flot maximum de la source au puits
Sélectionnez un algorithme et générez les étapes pour commencer la visualisation
Le problème du flot maximum demande combien de matière peut être poussée d'une source vers un puits à travers un réseau où chaque arête a une capacité. C'est l'un des modèles les plus polyvalents de l'optimisation combinatoire, et par le théorème flot-max coupe-min sa valeur égale la capacité de la plus petite coupe séparant source et puits.
La méthode de Ford-Fulkerson trouve de façon répétée un chemin augmentant de la source au puits dans le graphe résiduel, une structure comptable qui enregistre la capacité restante et permet de défaire du flot. Pousser du flot le long des chemins augmentants jusqu'à épuisement produit un flot maximum. Le raffinement d'Edmonds-Karp augmente toujours le long d'un plus court chemin trouvé par BFS, garantissant O(V E au carré) ; l'algorithme de Dinic l'améliore encore avec des graphes de niveaux et des flots bloquants.
Le flot maximum modélise le débit des pipelines et du trafic, le couplage biparti pour l'affectation de tâches, la planification des équipages aériens, la segmentation d'images en vision par ordinateur, l'élimination au baseball et la sélection de projets. C'est le sujet avancé standard des graphes en programmation compétitive et en entretiens senior.
Tous les algorithmes de flot maximal de cette famille sont la même boucle: trouver un chemin de la source au puits disposant de capacité libre, y pousser tout ce qu'il permet, recommencer. Ils ne diffèrent que par la manière de choisir ce chemin.
FlotMaximal(graphe, s, t):
flot = 0
construire le graphe residuel: cap(u,v) avant, 0 arriere
tant qu il existe un chemin augmentant P de s a t
dans le graphe residuel:
goulot = capacite residuelle minimale le long de P
pour chaque arete (u, v) de P:
residuel[u][v] -= goulot
residuel[v][u] += goulot // arete d annulation
flot += goulot
renvoyer flot
// Ford-Fulkerson: trouve P par DFS (chemin quelconque)
// Edmonds-Karp: trouve P par BFS (plus court chemin)L'arête résiduelle arrière est la partie qui semble erronée et se révèle indispensable. Elle permet à un chemin augmentant ultérieur d'annuler du flot poussé plus tôt, si bien que l'algorithme se dégage d'un mauvais choix initial sans jamais revenir en arrière explicitement. Sans ces arêtes d'annulation, la boucle gloutonne se bloque sur un flot sous-optimal.
Exécute Edmonds-Karp sur l'exemple classique où un premier choix glouton doit être défait par la suite.
Graphe d'exemple: Capacités orientées: S vers A (10), S vers B (10), A vers B (2), A vers T (4), B vers T (9).
Le flot maximal vaut 13, et la coupe minimale est la paire d'arêtes A-T et B-T de capacité totale 13. Que les deux nombres coïncident n'est pas un hasard: c'est le théorème flot-max coupe-min.
Temps: O(V·E^2) avec Edmonds-Karp · Espace: O(V + E)
Ford-Fulkerson avec un choix de chemin arbitraire s'exécute en O(E fois le flot maximal), car chaque augmentation ajoute au moins une unité tandis que la recherche de chemin coûte O(E). C'est pseudo-polynomial et véritablement mauvais: avec des capacités de l'ordre du milliard, cela peut demander un milliard d'augmentations, et avec des capacités irrationnelles cela peut ne jamais terminer. Edmonds-Karp corrige ce défaut en choisissant toujours le plus court chemin augmentant par BFS. La distance de la source au puits ne décroît jamais, et chaque arête ne peut être le goulot que V/2 fois au plus, ce qui borne le nombre d'augmentations à O(VE) et le total à O(V fois E au carré). Dinic regroupe les augmentations en phases à l'aide d'un graphe de niveaux et améliore cela en O(V au carré fois E), ou O(E fois racine de V) sur les graphes à capacités unitaires.
Le choix dépend surtout de l'ordre de grandeur des capacités et de la taille du graphe.
| Alternative | À préférer quand | Coût |
|---|---|---|
| Edmonds-Karp | Le choix par défaut. La sélection du chemin par BFS rend la borne indépendante des valeurs de capacité. | O(V·E^2) |
| Dinic | Graphes plus grands. Les graphes de niveaux et les flots bloquants le rendent nettement plus rapide en pratique. | O(V^2·E) |
| Push-relabel | Très grands graphes denses où le meilleur comportement asymptotique compte. | O(V^3) |
| Hopcroft-Karp | Le problème est en réalité un couplage biparti, cas particulier du flot maximal à capacités unitaires. | O(E·sqrt(V)) |
| Coupe minimale | Tu veux les arêtes goulots plutôt que le débit. Même calcul, lecture différente. | identique au flot maximal |
Lire l'article complet: Network Flow: Max-Flow and Min-Cut
Algorithmes associés: Coupe Minimum, Vérification Bipartite, Recherche en Largeur (BFS)