Διδάσκων: Παναγιώτης Ανδρέου

Σχετικά έγγραφα
Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Ελάχιστα Γεννητορικά ένδρα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Παναγιώτης Ανδρέου

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Διάλεξη 21: Γράφοι IV - Βραχύτερα Μονοπάτια σε Γράφους

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Αλγόριθµοι και Πολυπλοκότητα

Αλγόριθµοι και Πολυπλοκότητα

Αλγόριθμοι Γραφημάτων

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Διάλεξη 29: Γράφοι. Διδάσκων: Παναγιώτης Ανδρέου

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Άπληστοι Αλγόριθµοι (CLR, κεφάλαιο 17)

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων και Αλγόριθμοι

ιδάσκοντες: Φ. Αφράτη,. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

Αλγόριθμοι εύρεσης ελάχιστων γεννητικών δέντρων (MST)

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Αλγόριθμοι και Πολυπλοκότητα

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8

Αλγόριθµοι και Πολυπλοκότητα

ηδάζθωλ: εµήηξεο Εεϊλαιηπνύξ

Κινητός και ιάχυτος Υπολογισµός (Mobile & Pervasive Computing) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D.

Κατανεμημένα Συστήματα Ι

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στους Αλγορίθμους Ενότητα 9η

Εισαγωγή στην Επιστήμη των Υπολογιστών

ΑΣΚΗΣΗ 1 Για τις ερωτήσεις 1-4 θεωρήσατε τον ακόλουθο γράφο. Ποιές από τις παρακάτω προτάσεις αληθεύουν και ποιές όχι;

Εισαγωγή στην Επιστήμη των Υπολογιστών

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 1: Δικτυωτή Ανάλυση (Θεωρία Γράφων)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Σωροί, Γράφοι

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων

Στοιχεία Θεωρίας Γράφων (Graph Theory)

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25)

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθμοι και Πολυπλοκότητα

Θεωρία Γράφων Αλγόριθμοι BFS, Prim, Dijkstra, Bellman-Ford

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Διδάσκων: Παναγιώτης Ανδρέου

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 9: Άπληστοι Αλγόριθμοι. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

Γράφοι: κατευθυνόμενοι και μη

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5

ΕΠΛ 232: Αλγόριθµοι και Πολυπλοκότητα. Κατ οίκον Εργασία 2A Σκελετοί Λύσεων

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Θεωρία Γραφημάτων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές

Ενότητα 5: Αλγόριθμοι γράφων και δικτύων

Ελάχιστο Συνδετικό Δέντρο

3η Σειρά Γραπτών Ασκήσεων

Ελάχιστο Συνδετικό Δέντρο

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Εργαστήριο 2: Πίνακες

Ελάχιστο Συνδετικό έντρο

Ελάχιστο Συνδετικό Δέντρο

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 04: Παραδείγματα Ανάλυσης

Γράφοι (συνέχεια) Ο αλγόριθµος Dijkstra για εύρεση βραχυτέρων µονοπατιών Ta µονοπάτια Euler

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Θεωρία και Αλγόριθμοι Γράφων

Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗ111. Ανοιξη Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Αλγόριθµοι Οπισθοδρόµησης

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Άσκηση 1. Ψευδοκώδικας Kruskal. Παρακάτω βλέπουμε την εφαρμογή του στο παρακάτω συνδεδεμένο γράφημα.

Τομές Γραφήματος. Γράφημα (μη κατευθυνόμενο) Συνάρτηση βάρους ακμών. Τομή : Διαμέριση του συνόλου των κόμβων σε δύο μη κενά σύνολα

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Διάλεξη 18: B-Δένδρα

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

u v 4 w G 2 G 1 u v w x y z 4

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Ελάχιστο Συνδετικό έντρο

Διδάσκων: Κωνσταντίνος Κώστα

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

3η Σειρά Γραπτών Ασκήσεων

Transcript:

Διάλεξη 0: ΓράφοιIII -Ελάχιστα Γεννητορικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ελάχιστα Γεννητορικά Δένδρα (ΕΓΔ) Minimum Spanning Trees -Ο αλγόριθμος του Primγια εύρεση ΕΓΔ σε γράφους -Ο αλγόριθμος του Kruskalγια εύρεση ΕΓΔ σε γράφους - Παραδείγματα Εκτέλεσης Διδάσκων: Παναγιώτης νδρέου ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Ελάχιστα Γεννητορικά Δένδρα (ΕΓΔ) - Το πρόβλημα Υποθέστε ότι έχουμε το weightedγράφο G(V,), ο οποίος εκφράζει τις συνδέσεις σε ένα δίκτυο (το βάρος κάθε ακμής εκφράζει κάποιο κόστος π.χ. καθυστέρηση μετάδοσης). Επίσης υποθέστε ότι θέλουμε να στείλουμε από ένα κόμβο (server) ένα video stream στις υπόλοιπες τερματικές κορυφές του γράφου. Ένας τρόπος θα ήταν να στείλουμε ένα video stream ανά κορυφήπαραλήπτη (unicast) Όμως αυτό θα ήταν πολύ ακριβό. Ιδανικά θα θέλαμε να φτιάξουμε ένα μονοπάτι (δένδρο) προς όλους τους τερματικούς κόμβους έτσι ώστε το συνολικό άθροισμα των ακμών να είναι ελάχιστο. Ένα τέτοιο δένδρο θα μας επέτρεπε να στείλουμε την ταινία προς όλους με το ελάχιστο κόστος. Σήμερα θα μελετήσουμε τέτοια Ελάχιστα Γεννητορικά Δένδρα ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Ελάχιστα Γεννητορικά Δένδρα (ΕΓΔ) Έστω ένας μη-κατευθυνόμενοςγράφος με βάρη, G(V,). Γεννητορικό δένδρο (spanningtree, ΓΔ)του Gονομάζουμε κάθε δένδρο Tπου περιέχει όλους τους κόμβους του Gκαι κάθε ακμή του οποίου είναι και ακμή του G. Σε ένα ΓΔ, όλες οι κορυφές καλύπτονται, γι αυτό το δένδρο ονομάζεται και δένδρο σκελετός (spanningtree: the tree spans all the vertices) Ένα γεννητορικό δένδρο γράφου με nκορυφές έχει n-ακμές. Βάρος ενός ΓΔείναι το άθροισμα των βαρών όλων των ακμών του Ελάχιστο ΓΔ (ΕΓΔ) είναι το ΓΔ με το μικρότερο βάρος. Ένας γράφος δυνατό να έχει περισσότερα από ένα ΕΓΔ. (Εάν ο γράφος δεν είχε βάρη τότε οποιονδήποτε δένδρο που ενώνει όλες τις ακμές = ΕΓΔ) Το πρόβλημα εύρεσης ενός ΓΔ μπορεί να εκφραστεί και για κατευθυνόμενους γράφους αλλά είναι κάπως δυσκολότερη η υλοποίηση ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 3

Παραδείγματα Γεννητορικών Δένδρων Γράφος G Γ -: Βάρος= Γ -: Βάρος= Κατ ακρίβεια αυτό το δένδρο είναι ένα Ελάχιστο ΓΔ (όπως θα δούμε στην συνέχεια) Υπάρχουν άλλα; ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 4

Ιδιότητες ΕΓΔ Υποθέτουμε στην συνέχεια ότι οι γράφοι που μελετάμε είναι συνεκτικοί(δηλαδή υπάρχει τουλάχιστο μια διαδρομή μεταξύ όλων των κορυφών). Δεν κάνει νόημα να βρούμε ένα ΕΓΔ ενός μη-συνεκτικού γράφου γιατί ο ορισμός του ΕΓΔ προϋποθέτει ότι το δένδρο καλύπτει όλες τις κορυφές. Η εύρεση ΕΓΔ είναι γνωστό και βαθιά μελετημένο πρόβλημα στην επεξεργασία γράφων. Έχει ποικίλες εφαρμογές. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Ο αλγόριθμός του Prim ρχικά το δένδρο περιέχει ακριβώς μία κορυφή, η οποία επιλέγεται τυχαία. Για να κτίσουμε το δένδρο, σε κάθε βήμα συνδέουμε ακόμα μια κορυφή στο παρόν δένδρο με την επιλογή και εισαγωγή μιας καινούριας ακμής (από τις ακμές του γράφου). Πως μπορούμε να επιλέξουμε την κατάλληλη ακμή; Στην περίπτωση αυτού του αλγόριθμου,αν Sείναι το σύνολο των κορυφών του παρόντος δένδρου, επιλέγουμε Την ακμή με το μικρότερο βάρος,. Την ακμή η οποία μπορεί να μεγαλώσει το δένδρο κατά ένα κόμβο. Την ακμή η οποία δεν θα δημιουργήσει κάποιο κύκλο Ο αλγόριθμος του Prim είναι ένας Άπληστος λγόριθμος (Greedy Algorithm).Σε κάθε βήμα κάνει την κίνηση που ικανοποιεί όλες τις συνθήκες και έχει το πιο λίγο κόστος. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Παράδειγμα Εκτέλεσης ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι Γράφος G Ξεκινούµε διαλέγοντας τυχαία µια κορυφή 3

Παράδειγμα Εκτέλεσης(συν.) ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 8 Γράφος G 4

Υλοποίηση λγόριθμου Prim Για να υλοποιήσουμε τον αλγόριθμο Prim θα χρησιμοποιήσουμε παράλληλους πίνακες ) visited[n] : Κορυφές από τις οποίες περάσαμε. ) closest[n] : Η κοντινότερη κορυφή κάθε κόμβου στο δένδρο (μια δεδομένη στιγμή) ) distance[n]: Η απόσταση του κάθε επί μέρους κόμβου στο (Β) ρχικοποίηση visited: closest: distance: A Β 0 0 0 0 0 0 0 0 0 0 0 0 ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Υλοποίηση λγόριθμου Prim (συν.) Μέτα την εισαγωγή του στο Δένδρο visited: closest: distance: A Β 0 0 0 0 0 0 A 0 A 0 0 Μέτα την εισαγωγή του Βστο Δένδρο visited: closest: distance: A Β 0 0 0 0 0 A A Προσπαθούμε να μεγαλώσουμε το δένδρο με άπληστο τρόπο (διατηρώντας το συνδεδεμένο) ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 0

Υλοποίηση λγόριθμου Prim (συν.) Μέτα την εισαγωγή του στο Δένδρο visited: closest: distance: A Β 0 0 0 0 A Δυο τρόποι να πάμε στο, διατηρούμε τον ένα. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Υλοποίηση λγόριθμου Prim (συν.) Μέτα την εισαγωγή του στο Δένδρο visited: closest: distance: A Β 0 0 0 A ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Η Υλοποίηση του λγόριθμου Prim Prim(graph G){ int visited[n]={}; // Κορυφές που προστέθηκαν στο δένδρο (ρχικά όλα 0 ) int closest[n]={}; // «Πιο Κοντινός Γείτονας» για κάθε i: ρχικά κανένας int distance[n]=, // πόσταση από «Κοντιν. Γείτονα» για κάθε i: ρχικά άπειρο Tree = {}; // Το ΕΓ που θέλουµε να κτίσουµε (περιέχει ακµές (α,β)) // επιλογή αρχικής κορυφής ιάλεξε τυχαία κορυφή v; visited[v] = ; // Τώρα το v ανήκει στο δένδρο για κάθε κορυφή v { // ενηµέρωση πινάκων distance & closest για κάθε w γείτονα του v { if (weight(v,w) < distance[w]) { distance[w] = weight(v,w); // απόσταση κοντινότερου closest[w] = v; // ταυτότητα κοντινότερου } } // εύρεση επόµενης κορυφής µε µικρότερη απόσταση) v = minvertex(visited, distance); visited[v]=; // επιλογή κόµβου Tree = Tree {(closest[v],v)}; //προσθήκη ακµής } } weight(a,b) : βάρος ακμής a-b ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 3

Η βοηθητική συνάρτηση minvertex H βοηθητική διαδικασία minvertexβρίσκει μεταξύ όλων των κορυφών που δεν προστέθηκαν στο MST (Minimum Spanning Tree) την πιο κοντινή κορυφή. Δηλαδή: vertex minvertex(int visited[], int distance[]){ min = ; for (i=0; i< V ; i++) { } if (visited[i] == ) continue; // skip nodes already in MST if (distance[i] < distance[min]) min = i; return min; // Return the minimum among all distances } visited: closest: distance: A Β 0 0 0 0 0 0 0 A A ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 4

νάλυση Χρόνου Εκτέλεσης Η διαδικασία minvertexαπαιτεί χρόνο Ο( V ), όπου V είναι ο αριθμός των κορυφών του γράφου. Ο χρόνος εκτέλεσης του βρόχου της εντολής whileστον αλγόριθμο Prim είναι και αυτός Ο( V ). (Και για υλοποίηση με πίνακα γειτνίασης και για υλοποίηση με λίστα γειτνίασης.) Άρα ο ολικός χρόνος εκτέλεσης είναι Θ( V ²). Μπορούμε να βελτιώσουμε τον αλγόριθμο; Ναι με την χρήση σωρών Με την χρήση σωρών ο αλγόριθμος μπορεί να υλοποιηθεί σε Ο( Ε log ), όπου οι ακμές του γράφου. Ωστόσο δεν θα μελετήσουμε αυτή την υλοποίηση ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Υλοποίηση με Σωρούς Θεωρούμε υλοποίηση γράφου με λίστα γειτνίασης. Οι πίνακες και Pμπορεί να αντικατασταθούν από ένα σωρό που περιέχει στοιχεία της μορφής (d, u, v), όπου dείναι το βάρος της ακμής (u,v). Κάθε φορά που προστίθεται μια καινούρια κορυφή στο δένδρο, προσθέτουμε στον σωρό πληροφορία για κάθε γειτονική της ακμή, η οποία συγκρατεί το βάρος της ακμής. Άρα ο σωρός θα κρατά περισσότερες από μια πληροφορία για κάθε κορυφή. Ο σωρός θα πρέπει να έχει μήκος. Η επιλογή καινούριας ακμής θα γίνεται με τη μέθοδο σωρών eletemin. φού όμως υπάρχουν περισσότερες από μια πληροφορίες για κάθε ακμή, και αφού η eleteminαφαιρεί μόνο την πληροφορία που αντιστοιχεί στην ακμή με το μικρότερο βάρος, θα πρέπει να είμαστε προσεκτικοί ούτως ώστε να μην προσθέτουμε ακμές μεταξύ κορυφών που ήδη γνωρίζουμε. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Η Υλοποίηση του λγόριθμου Prim Prim(graph G){ int visited[n]={}; // Κορυφές που προστέθηκαν στο δένδρο (ρχικά όλα 0 ) int closest[n]={}; // «Πιο Κοντινός Γείτονας» για κάθε i: ρχικά κανένας int distance[n]=, // πόσταση από «Κοντιν. Γείτονα» για κάθε i: ρχικά άπειρο Tree = {}; // Το ΕΓ που θέλουµε να κτίσουµε (περιέχει ακµές (α,β)) // επιλογή αρχικής κορυφής ιάλεξε τυχαία κορυφή v; visited[v] = ; // Τώρα το v ανήκει στο δένδρο για κάθε κορυφή v { // ενηµέρωση πινάκων distance & closest για κάθε w γείτονα του v { Insert((weight(w,v),w,v), H); (d,v,u) = eletemin(h); while (visited[v] == ) (d,v,u) = eletemin(h); visited[v]=; ν = αριθµός των ακµών του G, } } //προσθήκη ακµής Tree = Tree {(closest[v],v)}; weight(a,b) : βάρος ακμής a-b ο χρόνος εκτέλεσης των Ιnsertκαι eletemin είναι log. Oολικός χρόνος εκτέλεσης είναι Ο( Ε log )= Ο( Ε log V ). ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Ορθότητα του λγόριθμου Είναι εύκολο να δούμε ότι ο αλγόριθμος επιστρέφει ένα ΓΔ. Είναι λιγότερο εύκολο να αποφασίσουμε κατά πόσο το δένδρο που επιστρέφεται είναι ΕΓΔ. πόδειξη με αντίφαση: Έστω ότι το δένδρο δεν είναι ΕΓΔ. Έστω ότι ο αλγόριθμος προσθέτει τις ακμές στο δένδρο με τη σειρά e, e,, e n. Διαλέγουμε την πρώτη ακμή στην ακολουθία, f =e j, για την οποία η ακολουθία e,, e j δεν είναι μέρος κανενός ΕΓΔ του γράφου. Έστω Sτο σύνολο των κορυφών που βρίσκονται στις j- πρώτες ακμές. Τότε η fείναι η ακμή με το μικρότερο βάρος από τις ακμές στη γέφυρα του S. Έστω ότι Τ είναιεγδ που περιέχει τις j- πρώτες ακμές. To Tπρέπει να περιέχει τουλάχιστον μια ακμή eαπό τη γέφυρα του S. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 8

Ορθότητα του λγόριθμου Το Τ έχει τη μορφή: S e V-S Έστω Τ ο γράφος (δένδρο;) που λαμβάνεται από το Τ με αντικατάσταση της ακμής eμε την ακμή f: S V-S f Το Τ είναι ΓΔ και αφού το Τ είναι ΕΓΔ τότε και το Τ είναι ΕΓΔ. υτό δίνει αντίφαση στην υπόθεση μας ότι οι πρώτες jακμές δεν περιέχονται σε κανένα ΕΓΔ. Επομένως ο αλγόριθμος είναι ορθός. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι

Ο αλγόριθμος του Kruskal κόμα ένας άπληστος (greedy)αλγόριθμος που υπολογίζει το Ελάχιστο Γεννητορικό Δένδρο (ΕΓΔ). Ενώ ο αλγόριθμος του Primεπεξεργάζεται μια-μια τιςκορυφές, ο αλγόριθμος του Kruskalεπεξεργάζεται μια-μια τις ακμέςτου γράφου. Επίσης, ενώ σε κάθε βήμα του αλγόριθμου του Primοι επιλεγμένες ακμές σχηματίζουν ένα δένδρο, στην περίπτωση του αλγόριθμου Kruskal, σχηματίζουν ένα δάσος(ένα σύνολο από δένδρα). Κεντρική ιδέα. ρχικά τοδάσος Τ είναι άδειο. Επεξεργαζόμαστε μια-μια τις ακμές, σε αύξουσα σειρά βάρους. Aν η εισαγωγή της e στο Τ δεν προκαλεί κύκλο,τότε προσθέτουμε την eστο Τ, δηλαδή Τ := Τ {e}. ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 0

Παράδειγμα Εκτέλεσης Ταξινομημένες κμές με το Βάρος ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. Γράφος G 3 4 8

Παράδειγμα Εκτέλεσης Γράφος G ρχική Κατάσταση Μετά από επιλογή της πρώτης ακμής (Β,Ε) Ταξινομημένες κμές 3 4 8 ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Παράδειγμα Εκτέλεσης ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3 Γράφος G 4 8 3 Ταξινομημένες κμές Μετά από επιλογή της πρώτης ακμής (,Ε)

Παράδειγμα Εκτέλεσης ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4 Γράφος G 4 8 3 Ταξινομημένες κμές Μετά από επιλογή της τρίτης ακμής (Β,)

Παράδειγμα Εκτέλεσης ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. Γράφος G 4 8 3 Ταξινομημένες κμές Μετά από επιλογή της τέταρτης ακμής (Β,)

Παράδειγμα Εκτέλεσης ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. Γράφος G 4 8 3 Ταξινομημένες κμές Μετά από επιλογή της τέταρτης ακμής (Β,)

ποδοτική Εξάλειψη Κύκλων H ταξινόμηση των Άκμων είναι απλή, δηλαδή ταξινομούμε μια φορά όλες τις ακμές με κάποιο αλγόριθμο ταξινόμησης. Βασικό Πρόβλημα:Το πρόβλημα που απομένει είναι πως θα βρίσκουμε αποδοτικά εάν μια ακμή μπορεί να δημιουργήσει κύκλο Λύση Θα χρησιμοποιήσουμε ένα πίνακαti[n](treei)ο οποίος μας υποδεικνύει για κάθε κορυφή v σε πιο δένδρο ανήκειη v. Π.χ. εάνθέλω να προσθέσω μια ακμή (u,v)και u & v ανήκουν στο ίδιο δένδρο (TI[u]==ΤI[v]), τότε αυτή η ακμή θα δημιουργήσει κύκλο. Επομένως δε θα προσθέσω την (u,v) w u To (u,v) θα δημιουργήσει κύκλο γιατί και τα δυο ανήκουν στο ίδιο TI (i.e., ) To (u,w) δεν θα δημιουργήσει κύκλο γιατί οι δυο κόμβο ανήκουν σε διαφορετικά ΤΙ (i.e., και ) ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Υλοποίηση του λγορίθμου Kruskal Kruskal(graph G(V,)){ Tree = {}; // Το ΕΓ : Ένα σύνολο ακµών (αρχικά κενό) TI[ V ] = {} // Πίνακας που κρατά το TreeI του κάθε κόµβου ount = 0; // Μετρητής που κρατά από πόσες κορυφές πέρασα sortdges(); // Ταξινόµηση Άκµων σε χρόνο O(.log ) // ηµιουργούµε ένα δάσος από δένδρα µεγέθους for (i=0; i< V ; i++) // χρόνο Θ( V ) TI[i] = i; for (i=0; i< ; i++) { // χρόνο O( ) // ανάκτηση επόµενης (µικρότερης) ακµής (u,v) = nextdge(); // χρόνο Θ() If (TI[u]!= TI[v]) { // ν ανήκουν σε διαφορετικά δένδρα Tree = Tree {(u,v)}; // Προσθήκη κµής // Μετρούµε ποιος από τους u,v εµφανίζεται περισσότερο στο TI // και επιστρέφουµε τον µεγαλύτερο σαν TreeI x x = occurence(ti, u, v); // χρόνο O( V ) } } // νάθεση TreeI x σε όλους που έχουν TI[u] ή TI[v] count = merge(ti[u],ti[v],x); } if (count == V ) break; Συνολικός χρόνος: O(.log + V + * V ) ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Εκτέλεση της Υλοποίησης Kruskal Γράφος G. Nextedge => (,). TI[]!= TI[]?=> YS, ΕπομένωςTree = {} {(Β,Ε)}; 3. Merge(TI[],TI[],); 4. Nextedge => (,Ε). TI[]!= TI[]? => YS, Επομένως Tree={(Β,Ε)} {(,Ε)};. Merge(TI[],TI[],); Ταξινομημένες κμές { -=, -Ε=, Β-=, Ε-=, Β-=, -=, -Β=, -= } TI TI TI 0 3 4 A 0 3 A 0 A ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Εκτέλεση της Υλοποίησης Kruskal Γράφος G. Nextedge => (,) 8. TI[]!= TI[]?=> YS,ΕπομένωςTree = {(Β,Ε),(,Ε)} {(Β,)};. Merge(TI[],TI[],); 0. Nextedge => (Ε,) Ταξινομημένες κμές { -=,-Ε=, Β-=, Ε-=, Β-=, -=, -Β=, -= }. TI[Ε]!= TI[]? => ΝΟ, Επομένως δεν χρησιμοποιούμε το (Ε,); TI TI TI 0 A 0 A 0 A ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 30

Εκτέλεση της Υλοποίησης Kruskal Γράφος G. Nextedge => (,) 3.TI[]!=TI[]?=> YS,ΕπομένωςTree = {(Β,Ε),(,Ε), (Β,)} {(Β,)}; 4. Merge(TI[],TI[],);. Nextedge => (,) Ταξινομημένες κμές { -=, -Ε=, Β-=, Ε-=, Β-=, -=, -Β=, -= }. TI[Ε]!= TI[]? => ΝΟ, Επομένως δεν χρησιμοποιούμε το (,); TI TI TI 0 A 0 A 0 A ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Εκτέλεση της Υλοποίησης Kruskal Γράφος G. Nextedge => (,Β) 8. TI[]!= TI[Β]? => YS, ΕπομένωςTree = {(Β,Ε),(Δ,Ε), (Β,Ζ), (Β,Γ)} {(,Β)}; Ταξινομημένες κμές { -=, -Ε=, Β-=, Ε-=, Β-=, -=, -Β=, -= } TI 0 A TI A Εδώ βρήκαμε V vertices, επομένως διακόπτουμε την αναζήτηση. TO ΕΓΔ είναι το {(Β,Ε),(Δ,Ε), (Β,Ζ), (Β,Γ),(,Β)}; ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Παράδειγμα Εκτέλεσης Γράφος G ρχική Κατάσταση Ταξινομημένες κμές { A-=, -=, Β-=, Ε-=, Β-=, -=, -Β=, -= } 0. TI 0 3 4 A TI. {A-} TI. {-} TI 3. {-} TI 4. {-}. {-} = τίποτα TI. {-}. break 0 0 4 A 0 0 4 A 0 0 4 A 0 0 A A ΕΠΛ03 Δομές Δεδομένων και λγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 33

Μερικά Σχόλια Η ορθότητα του αλγόριθμου μπορεί να αποδειχθεί όπως και στην περίπτωση του αλγόριθμου του Prim. Toσύνολο των ακμών μπορεί να διατηρηθεί ως μία σωρός. Για να ελέγξουμε αν μια ακμή μπορεί να προστεθεί, διατηρούμε ένα partition Π όλων των κορυφών: Δυο κορυφές βρίσκονται στο ίδιο υποσύνολο του Π αν υπάρχει μονοπάτι μεταξύ τους. ρχικά κάθε υποσύνολο του Π περιέχει ακριβώς μια κορυφή. Στη συνέχεια, μια ακμή (u,v) μπορεί να προστεθεί αν οι κορυφές uκαι vβρίσκονται σε διαφορετικά υποσύνολα του Π. Με την προσθήκη μιας ακμής (u,v), υποσύνολα του Π που περιέχουν τις κορυφές uκαι v, ενώνονται. ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 34

ΕΓΔ: σκήσεις Εκτελέστε τον αλγόριθμο Prim 4 3 4 0 3 G 4 H I visited: closest: distance: A Β G H I 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 3

ΕΓΔ: σκήσεις- Εκτελέστε τον αλγόριθμο Kruskal 4 3 4 0 3 G Ταξινομημένες κμές 4 H I { -H=,-=, -G=, A-=3, -I=3, A-=4, A-=4, G-H=4, -=, -=, H-I=, -=0, -=} TI 0 3 4 A 8 G H I ΕΠΛ3 Δομές Δεδομένων και λγόριθμοι 3