informatique (MP2I/MPI) · Chapitre 23 · Exercice de TD
Combien d'arbres couvrants minimaux ?
Unir & trouver, arbres couvrants · niveau 2
Énoncé
- Montrer que si tous les poids sont distincts, l'arbre couvrant minimal est unique.
- La réciproque est-elle vraie ?
- Donner un graphe à trois arêtes ayant trois arbres couvrants minimaux.
Corrigé
1. Supposons deux arbres couvrants minimaux distincts et , et soit l'arête de plus petit poids appartenant à l'un et pas à l'autre — disons ; elle est unique car les poids sont distincts. Ajouter à crée un cycle, qui contient au moins une arête (sinon contiendrait un cycle). Cette est dans , donc par le choix de . Alors est un arbre couvrant de poids : n'était pas minimal. Contradiction.
2. Non, et le graphe de l'exercice précédent en est le contre-exemple : le poids y figure deux fois ( et ), le poids aussi ( et ), et pourtant la force brute ne trouve qu'un arbre de poids sur les arbres couvrants. La distinction des poids est suffisante, pas nécessaire.
3. Le triangle dont les trois arêtes pèsent . Il a arbres couvrants — on en écarte une, au choix — et tous trois pèsent : les trois sont minimaux (vérifié par énumération). De même, le carré de côtés unitaires a arbres couvrants, tous minimaux de poids .
Ce qu'il faut en retenir pour l'écriture du code. Kruskal rend un arbre minimal, celui que son ordre de tri lui a fait rencontrer. Deux exécutions avec deux tris différents peuvent rendre des ensembles d'arêtes différents — de même poids. Un jeu de tests doit donc comparer des poids, jamais des listes d'arêtes.