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 Abder Alikacem Arbres de recouvrement minimum Département dinformatique et de génie logiciel Édition Septembre 2009 JFK.

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000 Abder Alikacem Arbres de recouvrement minimum Département dinformatique et de génie logiciel Édition Septembre 2009 JFK."— Transcription de la présentation:

1 Structures de données IFT-2000 Abder Alikacem Arbres de recouvrement minimum Département dinformatique et de génie logiciel Édition Septembre 2009 JFK BOS MIA ORD LAX DFW SFO BWI PVD

2 Définitions Lalgorithme de Prim-Jarnik Algorithme de Kruskal Plan

3 Définitions Un sous-graphe couvrant dun graphe G est un sous-graphe contenant tous les sommets de G. Un arbre couvrant dun graphe est un sousgraphe couvrant qui est un arbre. Arbre couvrant minimal (minimum spanning tree): Arbre couvrant dun graphe avec poids dont le poids total des arêtes est minimal. ORD PIT ATL STL DEN DFW DCA

4 Propriétés Propriété de cycle: Soit T un arbre couvrant dun graphe avec poids G Soit e une arête de G nappartenant pas à T et soit C, le cycle obtenu lorsquon 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 larête f par larête e dans notre arbre T e C f C e f Remplacer f par e donne un arbre couvrant de plus petit poids total

5 UV Propriété de partition des ACM 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 laddition de e à larbre 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 e f e f Remplacer f par e nous donne un autre ACM UV

6 Algorithme de Prim-Jarniks Algorithme similaire à lalgorithme de Dijkstra (dans le cas des graphes connexes). On choisit un sommet s aléatoirement quon met dans un nuage et on construit larbre couvrant minimal en faisant grossir le nuage dun 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 à linté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-Jarniks 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 B D C A F E B D C A F E B D C A F E B D C A F E

9 B D C A F E B D C A F E Exemple..suite

10 Analyse de la complexité Opérations sur les graphes: On appelle lopération Incidentes(v) une fois pour chaque sommet v. Donc, temps total si on utilise une liste dadjacence de O(m) Étiquettage: On peut changer létiquette D(u) dun 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 Kruskals 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 doedge 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 Lalgorithme maintient une forêt darbres Une arête est acceptée, si elle relit deux arbres distincts On a besoin dune structure de données qui maintient une partition i.e une collection densembles disjoints, avec les opérations Trouver(u): retourne lensemble contenant u Union(u,v): remplace les ensemblescontenant u et v par leur union

13 Représentation dune Partition Chaque élément dun ensemble est mis en mémoire dans une séquence (lensemble pointe vers la séquence contenant ces éléments). Chaque élément à un pointeur vers lensemble Lopération trouver(u) se fait en O(1) et retourne lensemble dont u fait partie Pour lopé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(n u, n v ) où n u est la taille de lensemble contenant u et n v, la taille de lensemble contenant v

14 Kruskal - partition 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 nest 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 JFK BOS MIA ORD LAX DFW SFO BWI PVD

16 Exemple Kruskal

17

18

19

20

21

22

23

24

25

26

27

28 Exemple Kruskal


Télécharger ppt "Structures de données IFT-2000 Abder Alikacem Arbres de recouvrement minimum Département dinformatique et de génie logiciel Édition Septembre 2009 JFK."

Présentations similaires


Annonces Google