1. 1
ALGORITHMIQUE LI311
Licence 3
Mini-Projet : Arbre Steiner
Rapport sur la partie théorique
Réalisé par : - Julien GOURRAUD
- Belkacem KAID
Encadré par : - Olivier SPANJAARD
04/12/14
2. 2
Question 1 :
On cherche à monter qu’un arbre Steiner minimum d’un graphe G est :
Un sous graphe de G
Car un arbre est un sous graphe
Il est connexe
Car un arbre est toujours connexe
Son cout est min
Car pour couvrir des sommets, il suffit de prendre les arêtes de cout
minimum en utilisant des algorithmes qui génère des arbres
couvrant de poids minimum (par exemple Prim).
Il contient tous les terminaux
Car d’après la définition, les terminaux N sont inclus dans les
sommets S’ qui est lui-même inclus dans les sommets S du graphe
G.
De plus, si on suppose qu’il n’existe aucun sommet Steiner dans le
graphe il devrait forcément contenir tous les sommets terminaux
Question 2 :
Déterminer le routage d’alimentation revient à chercher un arbre Steiner car c’est un
arbre qui couvre tous les terminaux (les composantes du circuit nécessaires), et qui
atteint les bornes de l’alimentation (sommets Steiner). Ainsi lors du premier parcours
en partant du « + » (respectivement du « - »), on choisit le minimum des sommets
Steiner. On aura alors fait deux parcours et on obtiendra deux arbres Steiner
minimaux.
Question 3 :
Soit la plus courte chaine entre x et y est l’arête (x,y) alors d(x,y) = c(x,y) . Soit il
existe une autre chaine entre x et y dont la valeur est inférieur au coût de l’arête alors
d(x,y) < c(x, y). Donc d(x,y) <= c(x,y)
Question 4 :
Soit la chaine empruntée pour calculer la distance d(x,z) passe par le sommet y,
alors d(x,z) = d(x,y) + d(y,z).
Soit la chaine empruntée pour calculer la distance d(x,z) ne passe pas par le sommet
y, alors d(x,z) < d(x,y) + d(y,z).
3. 3
Donc d(x,z) <= d(x,y) + d(y,z).
Question 5 :
On suppose qu’on a une chaine qui relie deux sommets x et y qui est de cout min,
sachant que cette chaine n’est pas inclue dans notre graphe D(S), or il existe un arbre
Steiner min inférieur à l’arbre Steiner min obtenu à partir du graphe des distances
D(S), alors que TD est l’arbre Steiner min de D(S), autrement dit il n’existe aucune
arête autre que celle reliant x et y dans D(S) (représentant un chemin ou une chaine
de distance minimale reliant un couple de sommets ), et cela contredit notre
supposition.
Donc toute arête de D(S) représente exactement la plus courte distance entre tout
couple de sommets, ainsi d(TD) est la somme des substitutions des arêtes de T (arbre
Steiner min de G). Donc le parcours constituant un arbre Steiner min dans G est
exactement le même dans D(S) (car D(S) contient tous les sommets terminaux de G).
On obtient donc :
c(T) = d(TD) avec c(T) = ∑ (x,y) ∈ T c(x,y) et d(TD) = ∑ (x,y) ∈ TD d(x,y)
Question 6 :
Dans cet algorithme, on construit un graphe H, contenant les plus courtes chaînes
reliant tous couple de sommets, en faisant la substitution des arêtes {x,y} de TD par
une plus courte chaîne de x à y dans G. Ainsi H contient exactement les distances
minimales entre tous couple de sommet.
L’arbre couvrant minimum T dans H est obtenu suite au parcours fait par un algorithme
qui retourne un arbre couvrant de poids minimum (Prim par exemple) qui contient
tous les sommets terminaux. Puis le fait d’ôter les sommets Steiner de degré 1 répond
toujours aux propriétés d’un arbre Steiner de cout minimum.
Question 7 :
i) On a |N|=S
Considérons alors l'algorithme Transfert suivant pour un sous-ensemble 𝑆′ ∈ 𝑆 contenant tous
les terminaux ( 𝑁 ⊂ 𝑆′).
- Remplacer chaque arête {x,y} de TD par une plus courte chaîne de x à y dans G. On nomme
H le graphe résultant de cette opération (une même arête n'apparaissant qu'au plus une fois
dans H). Ici, on appelle m fois l’algorithme de Prim. Pour un arbre couvrant M =
N-1. Donc la complexité est en O(n-1) * O(n2) = O(n3) (en supposant que
l’on utilise pas la structure de Tas pour l’algorithme de Dijkstra)
- Trouver un arbre couvrant minimum T dans H : (Algorithme de Prime) (O(n log n))
- Ôter itérativement de T les sommets Steiner de degré 1 (O(n))
4. 4
La complexité est donc de O(n) + (O(n log n)) + O(n3) = O(n3) .
ii) On a |N|=2
Cela consiste à faire un parcours du premier sommet au deuxième sommet
terminal, et cela en utilisant l’algorithme de Dijkstra avec une matrice d’adjacence
comme structure de donnée, ce qui donne une complexité de O(n3).
Question 8 :
On suppose qu’on a un sommet Steiner transitoire pour au moins trois sommets
terminaux, or le passage par ce sommet Steiner nous ramène à avoir un cout min pour
atteindre les sommets terminaux, ainsi dans notre arbre si chaque sommet Steiner
répond à cette condition, on pourrait avoir un arbre Steiner de cout mini du graphe
des distances D(S) ou chaque sommet Steiner est de degré au moins 3, donc il pourrait
exister un tel arbre Steiner min.
Par exemple :
Les sommets terminaux sont sphères de bleu.
Les sommets Steiner sont des cercles bleus.
Question 9 :
On suppose qu’on a K sommet Steiner, or (|N|+K-1) arête (nombre d’arêtes d’un
arbre), et chaque sommet Steiner est de degré 3 ou chaque arête est connectée à un
sommet terminal. Le nombre des arêtes est donc : (3K+|N|)/2 : La division par 2 est
due au fait que chaque arête contient 2 sommets.
Ainsi :
|N|+K-1 ≥ (3K+|N|)/2
2|N|+2K-2 ≥ 3K+|N|
Donc |N|-2 ≥ K
5. 5
Un arbre Steiner contenant au maximum |N|-2 sommets Steiner est appelé un arbre
Steiner complet ainsi, son existence est démontrée.
Question 10 :
On peut déduire de la question précédente que l'algorithme suivant fournit un arbre Steiner
minimum pour G.
- Énumérer tous les ensembles S⊂ (S N) d'au plus |N| - 2 sommets Steiner : 2|N| -1 ( -1 pour
l’ensemble vide )
- Pour chacun de ses sous-ensembles S0, déterminer un arbre couvrant minimum dans le
graphe des distances D(N U S’). O((n log n)m)
- Retenir l'arbre couvrant minimum parmi tous. O(1) car on prend l’arbre pour lequel
l’algorithme de Prim a renvoyé le plus petit cout.
- Par l'algorithme transfert, transformer cet arbre en un arbre Steiner de G de même
coût. O(n3)
Donc la complexité est en 2|N| -1 + O(1) + O((n log n)m)+ O((n)m) = (2|N|-1)
Si |N| = O(1) alors il n’y aura qu’un seul appel à l’algorithme de Prim. La complexité
sera alors en O(1) + O(1) + O(n log n) + O((n)) = O(n log n)
Question 11 :
Si on a 1000 sommets, dont 500 terminaux, l’algorithme durera (2500-1)*0,01 = >
impossible
Si on dispose d’un ordinateur 100 fois plus rapide, l’algorithme durera (2500-
1)*0,0001 =>impossible
Question 12 :
Algorithme Méthode approchée :
_ Construire le graphe des distances D(N) limité aux sommets terminaux. (O(n*m))
_ Déterminer un arbre couvrant minimum TD de D(N). O(n log n) (Algorithme de Prim)
_ Remplacer chaque arête fx; yg de TD par une plus courte chaîne de x à y dans G. On
nomme H le graphe résultant de cette opération (une même arête n'apparaissant qu'au
plus une fois dans H). O(n2 log n)
_ Trouver un arbre couvrant minimum T dans H. O(n log n)
_ Ôter itérativement de T les sommets Steiner de degré 1. O(1)
Complexité :O(n²logn).