Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

Σχετικά έγγραφα
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Κεφάλαιο 1. Ε. Μαρκάκης Επικ. Καθηγητής

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Συνδετικότητα γραφήματος (graph connectivity)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

Βασικές Έννοιες Δοµών Δεδοµένων

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

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Δοµές Δεδοµένων. 4η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες και Λίστες. Ε. Μαρκάκης

Heapsort Using Multiple Heaps

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

Δοµές Δεδοµένων. 8η Διάλεξη: Ταξινόµηση. Ε. Μαρκάκης

Δοµές Δεδοµένων. ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Φθινοπωρινό Εξάµηνο Ευάγγελος Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

Εισαγωγή. Γενική Εικόνα του Μαθήµατος. Το εσωτερικό ενός Σ Β. Εισαγωγή. Εισαγωγή Σ Β Σ Β. Αρχεία ευρετηρίου Κατάλογος συστήµατος Αρχεία δεδοµένων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Επεξεργασία Ερωτήσεων

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Το εσωτερικό ενός Σ Β

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

Δοµές Δεδοµένων. 17η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

Δοµές Δεδοµένων. 13η Διάλεξη Πίνακες Συµβόλων. Ε. Μαρκάκης

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

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

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

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Κεφ.11: Ευρετήρια και Κατακερματισμός

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Ουρά Προτεραιότητας (priority queue)

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Αντικειµενοστρεφής Προγραµµατισµός

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

Δομές ελέγχου ροής προγράμματος

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

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

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

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

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

Κεφάλαιο 10 Ψηφιακά Λεξικά

Προγραµµατισµός Ι (ΗΥ120)

ΚΕΦΑΛΑΙΟ Μηχανική Μάθηση

Μία Μελέτη Περίπτωσης: Διήθηση

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κλάσεις και Αντικείµενα

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

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

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Μ.Π.Σ. «ΠΡΟΗΓΜΕΝΕΣ ΜΕΘΟΔΟΙ ΚΑΤΑΣΚΕΥΗΣ ΠΡΟΙΟΝΤΩΝ ΑΠΟ ΞΥΛΟ» Μάθημα: Σχεδίαση και Εφαρμογές Διαδραστικών Συστημάτων. Διδάσκοντας: Α.

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

Συλλογές, Στοίβες και Ουρές

ΕΠΛ131 Αρχές Προγραμματισμού

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Επεξεργασία Ερωτήσεων

Στοιχειώδεις Δομές Δεδομένων

HY118- ιακριτά Μαθηµατικά. Θεωρία γράφων / γραφήµατα. Τι έχουµε δει µέχρι τώρα. Υπογράφηµα Γράφοι

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

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

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

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

Transcript:

Δοµές Δεδοµένων 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης Βασίζεται στις διαφάνειες των R. Sedgewick K. Wayne

Περίληψη Συνδετικότητα δικτύου Αφαιρέσεις Συνδεδεµένα συστατικά Αφηρηµένη εύρεση-ένωση Γρήγορη εύρεση Γρήγορη ένωση Σταθµισµένη γρήγορη ένωση Σταθµισµένη γρήγορη ένωση µε συµπίεση µονοπατιών Δοµές Δεδοµένων 02-2

Προβλήµατα Συνδετικότητας Γράφος (graph): Ένα σύνολο από αντικείµενα (κόµβοι ή κορυφές) Πλευρές (σύνδεσµοι µεταξύ αντικειµένων) Αν έχουµε Ν αντικείµενα, τα ονοµατίζουµε από 0 ως Ν-1 1 6 5 9 2 3 4 0 7 8 Δοµές Δεδοµένων 02-3

Προβλήµατα Συνδετικότητας Τα αντικείµενα µπορεί να απεικονίζουν: Κόµβους σε ένα δίκτυο υπολογιστών (δροµολογητές, πάροχοι δικτύου, κτλ) Ιστοσελίδες (web graph) Τρανζίστορ ενός µικροτσιπ Χρήστες του facebook (κοινωνικά δίκτυα) Πρωτείνες (βιολογικά δίκτυα για την αλληλεπίδραση πρωτεϊνών) Δοµές Δεδοµένων 02-4

Συνδετικότητα δικτύου Είσοδος: Δίνεται µία ακολουθία από ζεύγη ακεραίων Κάθε ακέραιος είναι ένα αντικείµενο Κάθε ζεύγος αντιπροσωπεύει µία σύνδεση Η συνδετικότητα είναι µεταβατική σχέση: Αν συνδέεται(p,q) και συνδέεται(q,r) τότε συνδέεται(p,r) Πρόβληµα: εντοπισµός των περιττών ζευγών Ένα ζεύγος (p, q) είναι περιττό αν από τα ζεύγη που έχουν εξεταστεί πριν το (p, q) συνεπάγεται ότι συνδέεται(p,q). Στην έξοδο τυπώνονται µόνο τα µη περιττά ζεύγη Προσοχή στο τι ακριβώς ζητάει το πρόβληµα! Δεν ζητάει το µονοπάτι ανάµεσα στα αντικείµενα Η εύρεση του µονοπατιού µπορεί να είναι πιο δύσκολη Δοµές Δεδοµένων 02-5

Παράδειγµα Είσοδος Έξοδος 3 4 3 4 4 9 4 9 8 0 8 0 2 3 2 3 5 6 5 6 2 9 5 9 5 9 7 3 7 3 7 5 5 6 1 6 5 9 2 3 4 7 0 8 Δοµές Δεδοµένων 02-6

Συνδετικότητα δικτύου u v Συνδέεται το u µε το v? Δοµές Δεδοµένων 02-7

Αφαιρέσεις Ποιες είναι οι βασικές λειτουργίες που χρειαζόµαστε? Απλό µοντέλο της φύσης της συνδεσιµότητας Αντικείµενα 0 1 2 3 4 5 6 7 8 9 κόµβοι του γράφου Σύνολα από αντικείµενα που συνδέονται µεταξύ τους (ανανεώνεται κατά τη διάρκεια του αλγορίθµου) 0 1 { 2 3 9 } { 5 6 } 7 { 4 8 } συνδεδεµένα υποσύνολα Ερώτηση εύρεσης: τα 2 και 9 ανήκουν στο ίδιο σύνολο; 0 1 { 2 3 9 } { 5 6 } 7 { 4 8 } συνδέονται δύο σηµεία; Εντολή ένωσης: συγχώνευσε τα σύνολα µε το 3 και το 8 0 1 { 2 3 4 8 9 } { 5 6 } 7 νέα σύνδεση µεταξύ σηµείων Δοµές Δεδοµένων 02-8

Αφαιρέσεις Οι αλγόριθµοι ένωσης-εύρεσης (union-find) διαχειρίζονται αντικείµενα στα οποία αντιστοιχίζουµε τους ακεραίους 0 έως N-1 Αποκρύπτονται λεπτοµέρειες άσχετες µε την ένωση-εύρεση Οι ακέραιοι επιτρέπουν γρήγορη προσπέλαση στα αντικείµενα Χρήση ως δείκτες σε πίνακες Πίνακας συµβόλων για αντιστοίχιση Μετάφραση ονοµάτων σε αριθµούς 1 6 5 9 2 3 4 0 7 8 Δοµές Δεδοµένων 02-9

Συνδεδεµένα συστατικά Σύνολο συνδεδεµένων σηµείων: Συνδεδεµένο συστατικό (connected component) Κάθε εντολή ένωσης µειώνει τα σύνολα κατά ένα Είσοδος Έξοδος 3 4 3 4 4 9 4 9 8 0 8 0 2 3 2 3 5 6 5 6 2 9 5 9 5 9 7 3 7 3 Έχουµε 10 7 = 3 συστατικά 1 6 5 9 2 0 3 4 7 8 Δοµές Δεδοµένων 02-10

Αφηρηµένη ένωση-εύρεση Γενική µορφή της λύσης του προβλήµατός µας Για κάθε νέο ζεύγος (p, q) που διαβάζουµε: Κάνε µία ερώτηση εύρεσης για να δούµε αν ήδη συνδέεται το p µε το q Αν ναι, τότε το (p, q) είναι περιττό ζεύγος Αν όχι, το (p, q) δεν είναι περιττό: εκτέλεσε µία εντολή ένωσης για να ενώσουµε τα σύνολα που περιέχουν το p και το q Στόχος: Σχεδιασµός αποδοτικής δοµής δεδοµένων Παρατηρήσεις Οι ευρέσεις και οι ενώσεις µπορούν να αναµειγνύονται Τα ερωτήµατα εύρεσης απαντώνται µόλις τεθούν Το πλήθος των εντολών M µπορεί να είναι τεράστιο Το πλήθος των αντικειµένων N µπορεί να είναι τεράστιο Δοµές Δεδοµένων 02-11

Γρήγορη εύρεση (Quick Find) Δοµή δεδοµένων Χρήση πίνακα ακεραίων id[] µεγέθους N Ερµηνεία: τα p και q συνδέονται αν έχουν το ίδιο id i 0 1 2 3 4 5 6 7 8 9 id[i] 0 1 9 9 9 6 6 7 8 9 Υλοποίηση Εύρεσης: Έλεγξε αν τα p και q έχουν το ίδιο id Π.χ. Αν (p,q) = (3,6), id[3]=9 και id[6]=6 άρα τα 3 και 6 δεν συνδέονται Υλοποίηση Ένωσης: Συγχώνευση των συστατικών των p και q Αλλαγή των καταχωρήσεων µε id[p] σε id[q] Ένωση των συστατικών που περιέχουν τα 3 και 6 i 0 1 2 3 4 5 6 7 8 9 id[i] 0 1 6 6 6 6 6 7 8 6 Δοµές Δεδοµένων 02-12

Γρήγορη εύρεση public class QuickF { public static void main(string[] args) { int N = Integer.parseInt(args[0]); int id[] = new int[n]; for (int i = 0; i < N ; i++) id[i] = i; for( In.init();!In.empty(); ) { int p = In.getInt(), q = In.getInt(); int t = id[p]; if (t == id[q]) continue; //περιττό ζεύγος for (int i = 0;i<N;i++) if (id[i] == t) id[i] = id[q]; Out.println(" " +p+""+q); } } } Δοµές Δεδοµένων 02-13

Γρήγορη εύρεση Πρόβληµα: µπορεί να αλλάζουν πολλά στοιχεία του πίνακα id[] πολύ συχνά Δοµές Δεδοµένων 02-14

Γρήγορη εύρεση Πόσο γρήγορη είναι η γρήγορη εύρεση; Μπορεί να πάρει MN βήµατα για M ενώσεις µε N αντικείµενα Αριθµητικό παράδειγµα Δίνονται 10 10 ζεύγη που συνδέουν Ν =10 9 αντικείµενα Με πρόχειρους υπολογισµούς για ένα σύγχρονο υπολογιστή η γρήγορη ένωση απαιτεί περίπου 300 χρόνια Τι γίνεται αν δεκαπλασιαστεί η ταχύτητα/χωρητικότητα; Στη µνήµη χωράει δεκαπλάσιο πρόβληµα Ο χρόνος που θα χρειαστεί όµως είναι κι αυτός δεκαπλάσιος! 10N x 10M / 10 = 10 x N x M Δοµές Δεδοµένων 02-15

Γρήγορη ένωση (Quick Union) Ιδέα: Απεικόνιση κάθε συνδεδεµένου συνόλου ως δέντρο Κάνει πολύ γρήγορη την ένωση µε αντίτιµο στην εύρεση Δοµή δεδοµένων Πίνακας ακεραίων id[] µεγέθους N Ερµηνεία: το id[i]είναι ο πατέρας του i Η ρίζα στο δέντρο που βρίσκεται ο i είναι το id[id[id[ id[i] ]]] Σταµατάµε όταν id[j]=j (μόνο η ρίζα έχει πατέρα τον εαυτό της) i 0 1 2 3 4 5 6 7 8 9 id[i] 0 1 9 4 4 6 6 7 8 9 Εύρεση: Έλεγξε αν τα p και q έχουν την ίδια ρίζα έστω π.χ. το (4, 9) Ένωση: Συγχώνευση των συστατικών των p και q «Κρεµάµε» το δέντρο του p στη ρίζα του q i 0 1 2 3 4 5 6 7 8 9 id[i] 0 1 9 4 9 6 6 7 8 9 Δοµές Δεδοµένων 02-16

Γρήγορη ένωση public class QuickU { public static void main(string[] args) { int N = Integer.parseInt(args[0]); int id[] = new int[n]; for (int i = 0; i < N ; i++) id[i] = i; for( In.init();!In.empty(); ) { int i, j, p = In.getInt(), q = In.getInt(); for (i = p; i!= id[i]; i = id[i]); for (j = q; j!= id[j]; j = id[j]); if (i == j) continue; id[i] = j; Out.println(" " + p + " " + q); } } } Δοµές Δεδοµένων 02-17

Γρήγορη ένωση Πρόβληµα: µπορεί να διατρέξουµε πολλούς συνδέσµους Δοµές Δεδοµένων 02-18

Γρήγορη Ένωση Το πόσο ρηχά θα είναι τα δέντρα εξαρτάται από την είσοδο Είσοδος Έξοδος 8 7 8 7 7 6 7 6 6 5 6 5 5 4 5 4 4 3 4 3 3 2 3 2 2 1 2 1 1 0 1 0 Εδώ σε κάθε βήµα πρέπει να διατρέξουµε όλο το δέντρο για να βρούµε τη ρίζα (Ο(Ν) βήµατα για τις τελευταίες συνδέσεις) Δοµές Δεδοµένων 02-19

Γρήγορη ένωση Πόσο γρήγορη είναι η γρήγορη ένωση; Δεν είναι πολύ πιο γρήγορη από τη γρήγορη εύρεση Παρόµοια τάξη µεγέθους (εξαρτάται και από τη φύση της είσοδου) Μειονέκτηµα γρήγορης εύρεσης Η ένωση είναι αργή (διατρέχουµε όλο τον πίνακα) Τα δέντρα είναι ρηχά αλλά το κόστος της ένωσης είναι µεγάλο Μειονέκτηµα γρήγορης ένωσης Τα δέντρα µπορεί να έχουν βάθος. Χειρότερη περίπτωση: όταν το δέντρο που σχηµατίζεται είναι µία ευθεία γραµµή µε βάθος Ν-1 Η εύρεση είναι αργή (µπορεί να διατρέξουµε τον πίνακα) Για να γίνει η ένωση πρέπει πρώτα να κάνουµε την εύρεση Στόχος: ρηχά δέντρα αλλά µε µικρό κόστος! Δοµές Δεδοµένων 02-20

Σταθµισµένη γρήγορη ένωση Παραλλαγή της γρήγορης ένωσης Τροποποιούµε την ένωση για να κρατάµε τα δέντρα ρηχά Παρακολουθούµε το µέγεθος κάθε δέντρου Χρήση ενός πρόσθετου πίνακα για να κρατάµε το µέγεθος Το µικρότερο δέντρο τοποθετείται κάτω από το µεγαλύτερο Το µέγεθος αναφέρεται στο σύνολο των κόµβων Παράδειγµα: αν διαβάσουµε το ζεύγος (3, 5) Η σταθµισµένη ένωση τοποθετεί το 6 κάτω από το 9 0 1 9 6 7 8 2 4 5 3 Δοµές Δεδοµένων 02-21

Σταθµισµένη γρήγορη ένωση Τα δέντρα παραµένουν ρηχά Δοµές Δεδοµένων 02-22

Σταθµισµένη γρήγορη ένωση Υλοποίηση σε Java Σχεδόν ίδια µε τη γρήγορη ένωση Χρήση πρόσθετου πίνακα sz[] για το πλήθος κόµβων κάθε δέντρου Έχει νόηµα µόνο για τις ρίζες των δένδρων Εύρεση: ίδια µε αυτή στη γρήγορη ένωση Ένωση: παραλλαγή της γρήγορης ένωσης Συγχώνευση του µικρότερου δέντρου κάτω από το µεγαλύτερο Αρχικοποίηση όλων των δένδρων σε µέγεθος 1 Ενηµέρωση του πίνακα sz[] if (sz[i] < sz[j]) { id[i] = j; sz[j] += sz[i]; } else { } id[j] = i; sz[i] += sz[j]; Δοµές Δεδοµένων 02-23

Σταθµισµένη γρήγορη ένωση Απόδοση της σταθµισµένης γρήγορης ένωσης Εύρεση: χρόνος ανάλογος µε το βάθος των p και q Ένωση: σταθερός χρόνος αφού βρεθούν οι ρίζες Αποδεικνύεται ότι το βάθος είναι µέχρι logn (=log 2 N) Άρα εύρεση-ένωση είναι ανάλογες του logn Πολύ καλύτερη από τις προηγούµενες µεθόδους! Σταµατάµε εδώ ή µπορούµε να κάνουµε κάτι ακόµα καλύτερο; Μπορούµε: συµπίεση µονοπατιών! Για να βρούµε τη ρίζα διατρέχουµε ένα δέντρο Από τον κόµβο εκκίνησης ως τη ρίζα Σε κάθε βήµα συµπιέζουµε το δέντρο Τοποθετούµε τον τρέχοντα κόµβο κάτω από τη ρίζα Το δέντρο συµπιέζεται σε κάθε εύρεση Δοµές Δεδοµένων 02-24

Ένωση µε συµπίεση µονοπατιών Βασική υλοποίηση συµπίεσης µονοπατιών Προσθήκη δεύτερου βρόχου Κάνει τον πατέρα κάθε κόµβου ίσο µε τη ρίζα Απαιτεί δεύτερο πέρασµα της διαδροµής Απλούστερη υλοποίηση συµπίεσης µονοπατιών Κάθε δεύτερος κόµβος δείχνει στον πατέρα του πατέρα του Το δέντρο συµπιέζεται κατά το ήµισυ Στην πράξη η διαφορά είναι µικρή for (i = p; i!= id[i]; i = id[i]) id[i] = id[id[i]]; for (j = q; j!= id[j]; j = id[j]) id[j] = id[id[j]]; Δοµές Δεδοµένων 02-25

Ένωση µε συµπίεση µονοπατιών Παραδείγµατα Παράδειγµα 1: σχετικά ρηχά δέντρα, προσθήκη του 1-6 Παράδειγµα 2: λίγο βαθιά δέντρα, προσθήκη του 6-8 Παράδειγµα 3: πολύ βαθιά δέντρα, µειώνεται το βάθος στο µισό περίπου Δοµές Δεδοµένων 02-26

Ένωση µε συµπίεση µονοπατιών Σύγκριση των αλγορίθµων F: γρήγορη εύρεση, U: γρήγορη ένωση W: σταθµισµένη γρήγορη ένωση P: µε πλήρη συµπίεση, H: µε ηµιδιπλασιασµό N M F U W P H 1000 3819 63 53 17 18 15 2500 12263 185 159 22 19 24 5000 21591 698 697 34 33 35 10000 41140 2891 3987 85 101 74 25000 162748 237 267 267 50000 279279 447 533 473 100000 676113 1382 1238 1174 Δοµές Δεδοµένων 02-27

Άλλες Εφαρµογές των µεθόδων Ένωσης- Εύρεσης Το παιχνίδι Hex [Piet Hein 1942, John Nash 1948, Parker Brothers 1962] Επεξεργασία Εικόνων Δοµές Δεδοµένων 02-28