Flot maximal
Un système dans lequel un matériau s'écoule, tel l'eau ou l'électricité, peut être modélisé à l'aide d'un graphe. Une question naturelle se pose : quelle est la capacité maximale de ce système ? Ce problème est connu sous le nom de flot maximal et admet plusieurs solutions algorithmiques efficaces. Nous en présenterons ici quelques-unes.
Définitions
Un réseau est un 5-uplet noté où
- est un graphe simple orienté où est supposé être
- associe à chaque arc sa capacité, c'est-à-dire un réel positif ou nul noté
- est un sommet appelé la source
- est un sommet distinct de appelé le puits
Un flot de est une fonction qui associe à chaque arc un réel appelé le flot net de à , et tel que :
- contrainte de capacité : pour tout arc , on a
- symétrie : pour tout arc , on a :
- conservation du flot : tout sommet vérifie :
La valeur du flot , notée , est la quantité .
Le problème du flot maximal consiste à calculer, pour tout réseau, un flot de valeur maximale. Dans la suite de ce chapitre, nous noterons flot net positif d'un sommet la somme des flots nets positifs sortant de , c'est-à-dire plus formellement . Afin d'établir la correction des algorithmes résolvant le problème du flot maximal, nous établissons ci-dessous un lemme portant sur le flot entre deux ensembles de sommets et . Cette quantité définie pour tout couple d'ensembles de sommets et est notée et est égale à :
Propriétés
Réseau résiduel
La propriété qui suit implique que tout flot de valeur non nulle est, s'il n'est pas maximal, un début de réponse. En effet, nous pouvons définir à partir de ce flot défini sur un réseau un nouveau réseau "plus simple" pour lequel tout flot maximal permettra de définir le flot maximal sur .
Définition
La capacité résiduelle d'un réseau induit par un flot est la fonction notée qui associe à tout arc le réel positif ou nul . Le réseau résiduel d'un réseau induit par un flot est le réseau .
Chemin améliorant
Définir un flot peut se réaliser simplement en choisissant dans le réseau un chemin de à et en prenant pour valeur la capacité minimale des arcs de ce chemin.
Définition
Soit un réseau et un chemin élémentaire dans de à . La capacité de est le minimum des capacités des arcs que possède et est notée . Le flot induit par est la fonction notée qui associe à tout arc la quantité définie par :
- si appartient à ;
- si appartient à ;
- sinon.
Un chemin allant de à améliore un flot de si la capacité de dans le réseau résiduel de induit par est strictement positive.
Lemme
La fonction induite par un chemin élémentaire de la source au puits dans un réseau est un flot de valeur .
Flot maximal et coupe minimale
Nous allons établir le théorème minimax qui caractérise un entier maximal à vérifier une certaine propriété comme étant minimal à en vérifier une seconde. Ce genre de résultat est à remarquer car il augure souvent favorablement la possibilité de calculer efficacement un tel entier.
Définition
Une coupe dans un réseau est un couple d'ensembles de sommets de la forme avec , , et . Sa capacité, notée , est la somme . Une coupe est minimale si sa capacité est au plus égale à la capacité de toute coupe de ce réseau. Le flot d'une coupe relativement à un flot est la quantité .
Lemme
Tout flot et toute coupe d'un même réseau de capacité vérifient :
Théorème
Soit un flot dans un réseau . Les quatre assertions suivantes sont équivalentes :
- est un flot maximal
- n'admet aucun chemin améliorant
- il existe une coupe dans le réseau résiduel induit par de capacité nulle
- il existe une coupe de capacité égale au flot
Corollaire (flot maximal / coupe minimale)
Pour tout réseau, la valeur maximale des flots est égale à la capacité minimale des coupes.
Deux solutions au problème du flot maximal
Ford-Fulkerson

L'algorithme de Ford-Fulkerson est un algorithme pour le problème du flot maximal. Il s'agit d'un algorithme itératif. À chaque itération, la solution courante est un flot qui satisfait les contraintes de capacité (c'est donc un flot réalisable) et l'algorithme essaie d'augmenter la valeur de ce flot. À chaque itération de la boucle, deux sous-procédures interviennent :
- le marquage, qui consiste à tester si une amélioration du flot est possible (recherche d'un chemin améliorant) ;
- le changement de flot, qui augmente le flot le long du chemin trouvé.
fonction FordFulkerson(G=(V,E,c,s,t):réseau):flot
fmax = 0
tant qu'il existe un chemin de s à t de capacité positive faire
calculer un chemin p élémentaire de s à t de capacité positive
f = flotInduit(G,p)
G = réseauRésiduel(G,f)
fmax = fmax + f
retourner fmax
Pour garantir une complexité polynomiale, le marquage doit être fait dans le même ordre que la découverte des sommets (parcours en largeur). La complexité de l'algorithme est alors en pour un graphe avec sommets et arcs (algorithme d'Edmonds-Karp, ci-dessous).
Une amélioration de Ford-Fulkerson qui termine
Dans la définition de FordFulkerson, aucune précision n'a été indiquée sur la façon de calculer un chemin de à de capacité non nulle. Cette question est pourtant cruciale : sur des réseaux à capacités réelles (irrationnelles), l'algorithme peut ne pas terminer, et avec des capacités entières son nombre d'itérations peut être proportionnel à la valeur du flot maximal.
Cette grande faiblesse de FordFulkerson peut être facilement corrigée : en effet, si l'on utilise un simple parcours en largeur à partir de pour calculer un plus court chemin de à , on obtient un algorithme qui termine toujours, avec une bien meilleure complexité en temps dans le pire des cas : l'algorithme d'Edmonds-Karp.

fonction EdmondsKarpRec(G=(V,E,c,s,t):réseau):flot
si il n'existe aucun chemin de s à t de capacité positive alors
retourner 0
sinon
calculer un plus court chemin p de s à t de capacité positive
f = flotInduit(G,p)
H = réseauRésiduel(G,f)
retourner f + EdmondsKarpRec(H)
Le temps d'exécution en s'obtient en constatant que chaque chemin augmentant peut être trouvé en temps , qu'à chaque fois au moins un arc de est saturé, que la distance de la source à un arc saturé par le chemin augmentant croît à chaque fois que l'arc est saturé, et que cette distance est au plus . Une autre propriété de cet algorithme est que la longueur du plus court chemin augmentant ne décroît jamais.
Théorèmes de Menger
Nous conclurons ce chapitre en présentant les Théorèmes de Menger. Chacun de ces théorèmes établit, pour tous sommets , l'égalité de deux entiers :
- le plus petit nombre d'objets qu'il faut retirer pour déconnecter de ;
- le plus grand nombre de chemins deux à deux disjoints (vis-à-vis de ces objets) connectant à .
Fait remarquable, cette propriété concerne des graphes orientés ou non et des "séparateurs" formés de sommets, d'arcs ou d'arêtes.
Un ensemble d'arcs (resp. d'arêtes, de sommets) d'un graphe sépare un sommet d'un sommet s'il ne contient ni ni et si tout chemin de allant de à contient un élément de . Un tel ensemble est dit séparateur.
Cette définition en appelle d'autres, qui permettent de quantifier le nombre de sommets, d'arcs ou d'arêtes nécessaires à déconnecter le graphe, c'est-à-dire à séparer deux sommets.
Soit un entier. Un graphe est :
- -arc-connexe si tout ensemble d'arcs séparateur est de cardinalité au moins ;
- -arête-connexe si tout ensemble d'arêtes séparateur est de cardinalité au moins ;
- -connexe si tout ensemble de sommets séparateur est de cardinalité au moins .