Algorithme de Dinic - Dinic's algorithm

L'algorithme de Dinic ou l'algorithme de Dinitz est un algorithme fortement polynomial pour calculer le débit maximum dans un réseau de débit , conçu en 1970 par l'informaticien israélien (anciennement soviétique) Yefim (Chaim) A. Dinitz. L'algorithme s'exécute dans le temps et est similaire à l' algorithme d'Edmonds-Karp , qui s'exécute dans le temps, en ce sens qu'il utilise les chemins d'augmentation les plus courts. L'introduction des notions de graphe de niveau et de flux bloquant permet à l'algorithme de Dinic d'atteindre ses performances.

Histoire

Yefim Dinitz a inventé cet algorithme en réponse à un exercice de pré-classe dans la classe d'algorithmes d' Adelson-Velsky . À l'époque, il n'était pas au courant des faits de base concernant l' algorithme Ford-Fulkerson .

Dinitz mentionne avoir inventé son algorithme en janvier 1969, qui a été publié en 1970 dans la revue Doklady Akademii Nauk SSSR . En 1974, Shimon Even et (son doctorant d'alors) Alon Itai au Technion à Haïfa étaient très curieux et intrigués par l'algorithme de Dinitz ainsi que par l' idée connexe d' Alexander V. Karzanov de bloquer le flux. Cependant il leur était difficile de déchiffrer ces deux articles, chacun étant limité à quatre pages pour répondre aux contraintes de la revue Doklady Akademii Nauk SSSR . Même n'a pas abandonné et, après trois jours d'efforts, a réussi à comprendre les deux documents, à l'exception du problème de maintenance du réseau en couches. Au cours des deux années suivantes, Even donna des conférences sur "l'algorithme de Dinic", prononçant mal le nom de l'auteur tout en le popularisant. Even et Itai ont également contribué à cet algorithme en combinant BFS et DFS , c'est ainsi que l'algorithme est maintenant couramment présenté.

Pendant environ 10 ans après l'invention de l'algorithme de Ford-Fulkerson, on ne savait pas s'il pouvait se terminer en temps polynomial dans le cas général des capacités de bord irrationnelles. Cela a causé l'absence de tout algorithme connu en temps polynomial pour résoudre le problème de flux maximal dans les cas génériques. L'algorithme de Dinitz et l'algorithme d' Edmonds-Karp (publié en 1972) ont tous deux montré indépendamment que dans l'algorithme de Ford-Fulkerson, si chaque chemin d'augmentation est le plus court, la longueur des chemins d'augmentation est non décroissante et l'algorithme se termine toujours.

Définition

Soit un réseau avec et la capacité et le débit du bord , respectivement.

La capacité résiduelle est une cartographie définie comme,
  1. si ,
  2. autrement.
Le graphe résiduel est un graphe non pondéré , où
.
Un chemin d'augmentation est un chemin – dans le graphe résiduel .
Définir comme étant la longueur du chemin le plus court de à dans . Alors le graphique de niveau de est le graphique , où
.
Un flux bloquant est un flux – tel que le graphe avec ne contient pas de – chemin.

Algorithme

Algorithme de Dinic

Entrée : Un réseau .
Sortie : An – flux de valeur maximale.
  1. Définir pour chacun .
  2. Construire à partir de . Si , arrêt et sortie .
  3. Trouvez un flux bloquant dans .
  4. Ajoutez le flux d'augmentation par et revenez à l'étape 2.

Analyse

On peut montrer que le nombre de couches dans chaque flux bloquant augmente d'au moins 1 à chaque fois et qu'il y a donc au plus des flux bloquants dans l'algorithme. Pour chacun d'eux :

  • le graphique de niveau peut être construit par recherche en largeur d'abord dans le temps
  • un flux bloquant dans le graphique de niveau peut être trouvé dans le temps

avec le temps de fonctionnement total pour chaque couche. En conséquence, le temps d'exécution de l'algorithme de Dinic est .

En utilisant une structure de données appelée arbres dynamiques , le temps d'exécution de la recherche d'un flux bloquant dans chaque phase peut être réduit à et, par conséquent, le temps d'exécution de l'algorithme de Dinic peut être amélioré à .

Cas spéciaux

Dans les réseaux avec des capacités unitaires, une limite temporelle beaucoup plus forte s'applique. Chaque flux bloquant peut être trouvé dans le temps, et on peut montrer que le nombre de phases ne dépasse pas et . Ainsi, l'algorithme s'exécute dans le temps.

Dans les réseaux qui découlent du problème d' appariement bipartite , le nombre de phases est limité par , ce qui conduit donc à la limite temporelle. L'algorithme résultant est également connu sous le nom d' algorithme de Hopcroft-Karp . Plus généralement, cette limite est valable pour tout réseau unitaire - un réseau dans lequel chaque sommet, à l'exception de la source et du puits, a soit un seul front entrant de capacité un, soit un seul front sortant de capacité un, et toutes les autres capacités sont des nombres entiers arbitraires .

Exemple

Ce qui suit est une simulation de l'algorithme de Dinic. Dans le graphique de niveau , les sommets avec des étiquettes en rouge sont les valeurs . Les chemins en bleu forment un flux bloquant.

1. Algorithme de Dinic G1.svg Algorithme de Dinic Gf1.svg Algorithme de Dinic GL1.svg

Le flux de blocage consiste en

  1. avec 4 unités de débit,
  2. avec 6 unités de débit, et
  3. avec 4 unités de débit.

Par conséquent, le flux de blocage est de 14 unités et la valeur de flux est de 14. Notez que chaque chemin d'augmentation dans le flux de blocage a 3 bords.

2. Algorithme de Dinic G2.svg Algorithme de Dinic Gf2.svg Algorithme de Dinic GL2.svg

Le flux de blocage consiste en

  1. avec 5 unités de débit.

Par conséquent, le flux de blocage est de 5 unités et la valeur du flux est de 14 + 5 = 19. Notez que chaque chemin d'augmentation a 4 arêtes.

3. Algorithme de Dinic G3.svg Algorithme de Dinic Gf3.svg Algorithme de Dinic GL3.svg

Puisque ne peut pas être atteint dans , l'algorithme se termine et renvoie un flux avec une valeur maximale de 19. Notez que dans chaque flux bloquant, le nombre d'arêtes dans le chemin d'augmentation augmente d'au moins 1.

Voir également

Remarques

Les références