La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Structures de données IFT-2000

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000"— Transcription de la présentation:

1 Structures de données IFT-2000
Minimum Spanning Tree 4/1/ :11 AM Structures de données IFT-2000 2704 Abder Alikacem Arbres de recouvrement minimum 867 BOS 849 PVD ORD 187 740 144 1846 621 JFK 184 1258 802 SFO 1391 BWI 1464 337 1090 DFW 946 LAX 1235 1121 MIA Édition Septembre 2009 2342 Département d’informatique et de génie logiciel

2 Plan Définitions L’algorithme de Prim-Jarnik Algorithme de Kruskal

3 Définitions ORD PIT DEN DCA STL DFW ATL 10 1 6 7
Un sous-graphe couvrant d’un graphe G est un sous-graphe contenant tous les sommets de G. Un arbre couvrant d’un graphe est un sousgraphe couvrant qui est un arbre. Arbre couvrant minimal (minimum spanning tree): Arbre couvrant d’un graphe avec poids dont le poids total des arêtes est minimal. ORD 10 1 PIT DEN 6 7 9 3 DCA STL 4 8 5 2 DFW ATL

4 Propriétés Propriété de cycle: C C 8 f 4 9 6 2 3 e Preuve:
7 9 e C f Propriété de cycle: Soit T un arbre couvrant d’un graphe avec poids G Soit e une arête de G n’appartenant pas à T et soit C, le cycle obtenu lorsqu’on ajoute e à T Si T est minimal, alors on a pour toutes arêtes f dans C poids(f)  poids (e) Preuve: Par contradiction Si poids(f) > poids(e), on obtient un arbre couvrant de plus petit poids en remplaçant l’arête f par l’arête e dans notre arbre T Remplacer f par e donne un arbre couvrant de plus petit poids total 8 4 2 3 6 7 9 C e f

5 Propriété de partition des ACM
U V 7 Propriétés de partition: Considérons une partition des sommets de G en deux ensembles U et V Soit e une arête de poids minimal entre U et V Alors, il existe un arbre couvrant minimal de G contenant e Preuve: Soit T un arbre couvrant minimal de G Si T ne contient pas e, soit C le cycle formé par l’addition de e à l’arbre T et soit f, une arête entre U et V Par la propriété de cycles, on a, poids(f)  poids(e) Comme on avait pris e de poids minimal, on a que poids(f) = poids(e) et alors on obtient un autre ACM en remplaçant f par e f 4 9 5 2 8 8 3 e 7 Remplacer f par e nous donne un autre ACM U V 7 f 4 9 5 2 8 8 3 e 7

6 Algorithme de Prim-Jarnik’s
Algorithme similaire à l”algorithme de Dijkstra (dans le cas des graphes connexes). On choisit un sommet s aléatoirement qu’on met dans un “nuage” et on construit l’arbre couvrant minimal en faisant grossir le “nuage” d’un sommet à la fois. On garde en mémoire à chaque sommet v, une étiquette d(v) qui ici est égale au poids minimal parmi les poids des arêtes reliant v à un sommet à l’intérieur du nuage. À chaque étape: On ajoute au nuage le sommet u extérieur ayant la plus petite étiquette d(u) On met à jour les étiquettes des sommets adjacents à u

7 Algorithme de Prim-Jarnik’s
A priority queue stores the vertices outside the cloud Key: distance Element: vertex Locator-based methods insert(k,e) returns a locator replaceKey(l,k) changes the key of an item We store three labels with each vertex: Distance Parent edge in MST Locator in priority queue Algorithm PrimJarnikMST(G) Q  new heap-based priority queue s  a vertex of G for all v  G.vertices() if v = s setDistance(v, 0) else setDistance(v, ) setParent(v, ) l  Q.insert(getDistance(v), v) setLocator(v,l) while Q.isEmpty() u  Q.removeMin() for all e  G.incidentEdges(u) z  G.opposite(u,e) r  weight(e) if r < getDistance(z) setDistance(z,r) setParent(z,e) Q.replaceKey(getLocator(z),r)

8 Exemple 7 7 D 7 D 2 2 B 4 B 4 8 9 5 9 5 5 2 F 2 F C C 8 8 3 3 8 8 E E A 7 A 7 7 7 7 7 7 D 2 7 D 2 B 4 B 4 5 9 5 5 9 4 2 F 5 C 2 F 8 C 8 3 8 3 8 E A E 7 7 A 7 7

9 Exemple..suite 7 7 D 2 B 4 9 4 5 5 2 F C 8 3 8 E A 3 7 7 7 D 2 B 4 5 9
7 D 2 B 4 5 9 4 5 2 F C 8 3 8 E A 3 7

10 Analyse de la complexité
Opérations sur les graphes: On appelle l’opération Incidentes(v) une fois pour chaque sommet v. Donc, temps total si on utilise une liste d’adjacence de O(m) Étiquettage: On peut changer l’étiquette D(u) d’un sommet u jusqu’à O(deg(u)) fois. Donc, au total, l’étiquettage prend un temps O(m) Opérations de liste avec priorités Chaque sommet est inséré une fois dans la liste et retiré une fois. Chaque insertion et suppresion prend un temps O(log n). Total O(n log n) La clé de chaque sommet u est modifiée au plus O(deg(u)) et prend un temps O(log n) chaque fois. Total O(m log n) La complexité en temps de Prim-Jarník est donc de O((n+m) log n) ou O(m log n) si le graphe est simple et connexe

11 Kruskal’s Algorithm A priority queue stores the edges outside the cloud Key: weight Element: edge At the end of the algorithm We are left with one cloud that encompasses the MST A tree T which is our MST Algorithm KruskalMST(G) for each vertex V in G do define a Cloud(v) of  {v} let Q be a priority queue. Insert all edges into Q using their weights as the key T   while T has fewer than n-1 edges do edge e = T.removeMin() Let u, v be the endpoints of e if Cloud(v)  Cloud(u) then Add edge e to T Merge Cloud(v) and Cloud(u) return T

12 Structure de données pour Kruskal
L’algorithme maintient une forêt d’arbres Une arête est acceptée, si elle relit deux arbres distincts On a besoin d’une structure de données qui maintient une partition i.e une collection d’ensembles disjoints, avec les opérations Trouver(u): retourne l’ensemble contenant u Union(u,v): remplace les ensemblescontenant u et v par leur union

13 Représentation d’une Partition
Chaque élément d’un ensemble est mis en mémoire dans une séquence (l’ensemble pointe vers la séquence contenant ces éléments). Chaque élément à un pointeur vers l’ensemble L’opération trouver(u) se fait en O(1) et retourne l’ensemble dont u fait partie Pour l’opération union(u,v), on bouge les éléments du plus petit ensemble dans la séquence du plus grand ensemble et on met à jour leur pointeur La complexité en temps de union(u,v), est min(nu, nv) où nu est la taille de l’ensemble contenant u et nv, la taille de l’ensemble contenant v

14 Kruskal - partition Complexité en temps: O((n+m)log n)
Algorithme Kruskal(G): Entrée: un graphe avec poids G. Sortie: Un ACM T pour G. Soit P une partition des sommets de G, où chaque sommet est dans un ensemble séparé. Soit Q une liste avec priorités gardant en mémoire les arêtes de G, ordonnées selon leur poids Soit T un arbre initialement vide Tant que Q n’est pas vide faire (u,v)  Q.enleverMin() si P.trouver(u) != P.trouver(v) alors Ajouter (u,v) à T P.union(u,v) retourner T Complexité en temps: O((n+m)log n)

15 Exemple Kruskal 2704 BOS 867 849 PVD ORD 187 740 144 1846 JFK 621 184
1258 802 SFO BWI 1391 1464 337 1090 DFW 946 LAX 1235 1121 MIA 2342

16 Exemple Kruskal

17 Exemple Kruskal

18 Exemple Kruskal

19 Exemple Kruskal

20 Exemple Kruskal

21 Exemple Kruskal

22 Exemple Kruskal

23 Exemple Kruskal

24 Exemple Kruskal

25 Exemple Kruskal

26 Exemple Kruskal

27 Exemple Kruskal

28 Exemple Kruskal JFK BOS MIA ORD LAX DFW SFO BWI PVD 867 2704 187 1258
849 740 144 1846 621 184 802 1391 1464 337 1090 946 1235 1121 2342


Télécharger ppt "Structures de données IFT-2000"

Présentations similaires


Annonces Google