Loading AI tools
De Wikipédia, l'encyclopédie libre
L'algorithme de Dinic ou algorithme de Dinitz est un algorithme en temps polynomial (et même fortement polynomial[1]) de calcul du flot maximum dans un réseau, publié en 1970 par Yefim Dinitz[2]. Le temps de calcul est en pour un graphe dont est l'ensemble des sommets et l’ensemble des arcs. Il est semblable à l'algorithme d'Edmonds-Karp dont le temps d'exécution est en . Comme lui, il utilise des chemins augmentants de longueur minimale. L'introduction des concepts de graphe de niveau et de flot bloquant permet d'obtenir cette meilleure performance.
Soit un réseau; et dénotent respectivement la capacité et le flot sur un arc .
La capacité résiduelle est l’application définie comme suit :
Le graphe résiduel est le graphe , où
Un chemin augmentant est un chemin de la source au puits (on dit aussi un --chemin) dans le graphe résiduel. On note la longueur des plus courts chemins de la source au sommet dans ( est la distance de la source à ).
Le graphe de niveau de est le graphe , où
En d'autres termes, c'est le sous-graphe contenant uniquement les arcs qui relient un sommet à un sommet de distance immédiatement supérieure.
Un flot bloquant est un flot tel que le graphe avec obtenu en ne conservant que les arcs sur lesquels le flot est strictement inférieur à la capacité ne contient aucun --chemin. Autrement dit, un flot est bloquant si tout --chemin contient un arc où le flot est égal à la capacité.
Algorithme de Dinic
L'exemple suivant montre l'exécution de l'algorithme de Dinic. Dans le graphe de niveau les valeurs en rouge sont les distances à la source, les arcs en bleu forment un flot bloquant.
On peut montrer que le nombre d'arcs dans chaque flot bloquant croit d'au moins 1 à chaque étape; il y a donc au plus étapes, et au plus flots bloquants à calculer, où est le nombre de sommets du réseau.
Le graphe de niveau peut être calculé par un parcours en largeur; un tel parcours prend un temps en , où est le nombre d'arcs. Un flot bloquant peut être calculé en temps . Le temps total de l'algorithme de Dinic est donc en .
On peut diminuer le temps de calcul d'un flot bloquant en utilisant une structure de données de la famille des arbres dynamiques, soit les arbres adaptatifs (self-adjusting trees) soit les link/cut tree (en), inventés par Sleator et Tarjan. La détermination du flot bloquant de chaque étape peut être ramenée à , et le temps total à .
Capacités 0 ou 1. Dans un réseau où les capacités sont 0 ou 1, la complexité en temps peut être nettement mieux bornée. Chaque flot bloquant peut être trouvé en temps , et on peut montrer que, de plus, le nombre d'étapes est majoré par et . L'algorithme est donc en temps .
Réseaux de couplages. Dans les réseaux qui interviennent dans la résolution du couplage biparti, le nombre de phases est borné par , ce qui donne un temps borné par . L'algorithme est aussi connu sous le nom d'algorithme de Hopcroft-Karp.
Réseaux unitaires. Plus généralement, cette borne reste valable pour des réseaux dits unitaires, qui sont des réseaux où chaque sommet autre que la source et le puits possèdent soit un arc entrant de capacité un, soit un arc sortant de capacité un, les autres arcs ayant des capacités qui sont des entiers arbitraires[3].
L'algorithme de Dinic a été publié en 1970 par Yefim (Chaim) A. Dinitz (Ефим Диниц), alors qu'il était en Russie. Comme le dit Dinitz dans son article historique en hommage au mathématicien et informaticien Shimon Even, le rideau de fer séparait alors efficacement les chercheurs soviétiques des autres; son algorithme a été traduit dans la même année, et dans cette traduction, la lettre finale de son nom est remplacée par un « c ». C'est Shimon Even et Alon Itai, alors élève d'Even, qui ont découvert la traduction assez obscure de l'article, lui ont apporté des modifications et compléments, et en ont répandu la connaissance dans le monde scientifique occidental. Dinitz dit que l'algorithme ainsi reformulé - et qui circule encore aujourd'hui sous le nom d'algorithme de Dinic - doit son succès à Even et Atai, et que son algorithme original, algorithme de Dinitz, n'aurait peut-être pas eu ce succès. L'algorithme continue à être appelé algorithme de Dinic dans les ouvrages de référence[4], et par Dinitz lui-même, sur un ton amusé[5]. Dinitz est maintenant membre du département d'informatique de l’université Ben Gourion du Néguev en Israël[6]. Ses publications scientifiques paraissent toujours sous son vrai nom.
Deux ans plus tard, en 1972, paraît l'algorithme d'Edmonds-Karp mais qui avait déjà été présenté plus tôt[7]. Ils ont montré indépendamment que si l'on choisit comme chemin augmentant le plus court à chaque pas, alors la longueur des chemins augmentant est croissante au sens large. L'algorithme est moins efficace que celui de Dinic parce qu'il ne fait pas usage de la notion de distance. Il avait déjà été présenté à une conférence aux États-Unis en 1968 (donc avant la publication de l'article de Dinic), mais pas publié à l'époque.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.