Algorithme de Chu-Liu/Edmonds
En théorie des graphes, l'algorithme d'Edmonds ou algorithme de Chu-Liu/Edmonds est un algorithme fournissant une arborescence couvrante de poids minimal dans un graphe. Il s'agit de la version orientée d'un arbre couvrant de poids minimal. L'algorithme a été proposé indépendamment par Yoeng-Jin Chu et Tseng-Hong Liu (1965), puis par Jack Edmonds (1967).
Algorithme
Description
L'algorithme prend en entrée un graphe orienté où est l'ensemble des sommets et est l'ensemble des arcs. Soit un sommet appelé la racine, et une valeur réelle de poids pour chaque arc . L'algorithme renvoie une arborescence couvrante de poids minimal ancrée à la racine , le poids d'une arborescence étant défini comme la somme des poids des arcs, .
L'algorithme peut être exécuté de manière récursive. Soit la fonction qui retourne une arborescence couvrante de poids minimal ancrée à la racine . On commence par supprimer tous les arcs de dont la destination est . On remplace également tous les ensembles d'arcs parallèles (les arcs ayant la même origine et la même destination) par un seul arc avec un poids égal au poids minimal de l'ensemble associé.
Maintenant, pour chaque sommet autre que la racine, on prend l'arc de poids le plus faible dont la destination est . On appelle l'origine de cet arc . Si l'ensemble d'arcs ne contient pas de cycles, alors .
Sinon, contient au moins un cycle. On choisit arbitrairement l'un de ces cycles. Soit ce cycle. Nous allons maintenant définir un nouveau graphe orienté et pondéré dans lequel le cycle est "contracté" dans un seul sommet comme suit :
Les sommets de sont les sommets de plus un nouveau sommet dénoté .
- Si est un arc de avec et (un arc entrant dans le cycle), alors on inclut dans un nouvel arc , et on définit .
- Si est un arc de avec et (un arc sortant du cycle), alors on inclut dans un nouvel arc , et on définit .
- Si est un arc de avec et (un arc non-relié au cycle), alors on inclut dans un nouvel arc , et on définit .
Pour chaque arc de , on garde en mémoire l'arc de auquel il correspond.
Maintenant, on récupère une arborescence couvrante de poids minimal pour en appelant . Comme est une arborescence couvrante, chacun de ses sommets a exactement un arc entrant. Soit l'unique arc de entrant dans . Cet arc correspond à un arc avec . On supprime de , pour briser le cycle. On garde tous les autres arcs de . Pour chaque arc dans , on garde son arc correspondant dans . Maintenant, est défini par les arcs que nous avons gardés, qui forment une arborescence couvrante de poids minimal.On note que est défini à l'aide de , avec ayant strictement moins de sommets que . Trouver pour un graphe contenant un seul sommet est trivial (il s'agit de lui-même), ainsi la terminaison de l'algorithme est garantie.
Complexité de l'algorithme
La complexité en temps de cet algorithme est . Une implémentation plus rapide de l'algorithme a été élaborée par Robert Tarjan et a une complexité en temps pour un graphe creux et pour un graphe dense. C'est aussi rapide que l'algorithme de Prim pour un arbre couvrant de poids minimal non-orienté. En 1986, Gabow, Galil, Spencer, Compton, et Tarjan ont élaboré une implémentation plus rapide, avec une complexité en temps .
Références
- Chu, Y. J. et Liu, T. H., « On the Shortest Arborescence of a Directed Graph », Science Sinica, vol. 14, , p. 1396–1400
- Edmonds, J., « Optimum Branchings », J. Res. Nat. Bur. Standards, vol. 71B, , p. 233-240 (DOI 10.6028/jres.071b.032)
- Tarjan, R. E., « Finding Optimum Branchings », Networks, vol. 7, , p. 25-35 (DOI 10.1002/net.3230070103)
- Camerini, P.M., Fratta, L. et Maffioli, F., « A note on finding optimum branchings », Networks, vol. 9, , p. 309–312 (DOI 10.1002/net.3230090403)
- Gibbons, Alan, « Algorithmic Graph Theory », Cambridge University press, (ISBN 0-521-28881-9)
- Gabow, H. N., Galil, Z., Spencer, T. et Tarjan, R. E., « Efficient algorithms for finding minimum spanning trees in undirected and directed graphs », Combinatorica, vol. 6, , p. 109–122 (DOI 10.1007/bf02579168)
Liens externes
- Algorithme d'Edmonds ( edmonds-alg ) – Une implémentation open source de l'algorithme d'Edmonds écrite en C++ et sous Licence MIT. Cette source utilise l'implémentation de Tarjan pour les graphes denses.
- Portail de l'informatique théorique