Mathématique (graphes) Les arbres (Prim et Kruskal) En théorie des graphes, un arbre est un graphe non orienté, acyclique (graphe qui ne contient aucun cycle) et connexe. Un ensemble d'arbres est appelé une forêt. Une feuille : Sommet dont le degré est égal à 1. Un nœud : Sommet dont le degré est supérieur à 1. Exemple : ca aa ba da ea Arbre à 1 nœud et 4 feuilles Algorithme de Prim L'algorithme de Prim calcule un arbre couvrant minimal dans un graphe connexe valué et non orienté. Un arbre couvrant est un arbre inclus dans un graphe et qui connecte tous les sommets de ce graphe. Dans ce cas de figure l’arbre couvrant est donc un sous-ensemble d'arêtes formant un arbre sur l'ensemble des sommets du graphe initial, et tel que la somme des poids de ces arêtes soit minimale. Si le graphe n'est pas connexe, alors l'algorithme détermine un arbre couvrant minimal d'une composante connexe du graphe. Algorithme : L'algorithme consiste à faire croître un arbre depuis un sommet. On commence avec un seul sommet puis à chaque étape, on ajoute une arête de poids minimum adjacente à l'arbre en construction. Exemple : 2 b a 4 d 1e itération : Localement a : b pour 2 c pour 3 d pour 4 2e itération : Localement b : c pour 1 e pour 4 3e itération : Localement c : d pour 2 e pour 3 4e itération : Localement d : e pour 5 3 2 1 4 c 3 e 5 a 4 2 b 3 1 4 2 c 3e d 5 2 b 3 1 4 2 c 3e d 5 2 b a 3 1 4 4 2 c 3 e d 5 a 4 a 4 d 2 3 2 Arbre couvrant minimal : (a, b, c, d, e) b 1 4 c 3 e 5 Algorithme de Kruskal Tout comme l’algorithme de Prim, l'algorithme de Kruskal a pour but de rechercher l'arbre recouvrant de poids minimum d’un graphe connexe, valué et non-orienté. Algorithme : L'algorithme considère toutes les arêtes du graphe par poids croissant et pour chacune d'elle, il la sélectionne si elle ne crée pas un cycle. Exemple : 2 8 a c 4 e 2 d {a, e} 2 5 1 6 {d, c} 1 b 2 {d, e} 2 {c, b} 2 1e itération : On choisit l’arrête de poids minimum soit {d,c} (en cas d’égalité le choix à ce moment est totalement arbitraire). 2e itération : On choisit {a,e} de manière arbitraire entre toutes les autres arêtes de poids 2 ne formant pas de cycle. 3e itération : On choisit {d,e} (nécessaire pour que le graphe courant soit connexe) de manière arbitraire par rapport à {c,b}. On « verrouille » alors {a,d} et {c, e} puisqu’on a déjà parcouru a, d, c et e ; ces arêtes ne seront donc jamais empruntées. e 4 itération : On choisit {c,b} car c’est l’arête de poids minimum restante parmi les non verrouillées. Tous les sommets ont été parcourus et l’ensemble forme un arbre (connexe et acyclique), l’algorithme se termine. {b, e} 4 {c, e} 5 {a, d} 6 8 a b 2 c {a, b} 8 2 4 5 e 1 6 2 d 8 a c b 2 5 2 4 e 1 6 2 d 8 a b 2 c 2 4 5 e 1 6 2 d 8 a c b 2 1 6 d Arbre couvrant minimal : (a, e, d, c, b) 2 5 4 2 e