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

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

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

ΗΥ240 - Παναγιώτα Φατούρου 2

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

Πρόβληµα (ADT) Λεξικού. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Λεξικό, Union - Find 2

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Δομές δεδομένων. Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Ενότητα 7 Ουρές Προτεραιότητας

ΕΝΟΤΗΤΑ 5 ΥΛΟΠΟΙΗΣΗ ΛΕΞΙΚΩΝ ΜΕ ΙΣΟΖΥΓΙΣΜΕΝΑ ΔΕΝΔΡΑ

Ενότητα 7 Ουρές Προτεραιότητας

ΗΥ240 - Παναγιώτα Φατούρου 2

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

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

Union Find, Λεξικό. Δημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Insert(K,I,S) Delete(K,S)

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

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

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

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

Λεξικό, Union Find. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

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

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

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

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

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

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

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

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

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών

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

ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

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

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

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

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

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

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

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

ΕΝΟΤΗΤΑ 5 ΥΝΑΜΙΚΑ ΛΕΞΙΚΑ ΙΣΟΖΥΓΙΣΜΕΝΑ ΕΝ ΡΑ

Ταξινόμηση με συγχώνευση Merge Sort

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

ΗΥ240 - Παναγιώτα Φατούρου 1

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

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

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

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

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

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

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

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

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

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

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

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

Κεφάλαιο 8 Ισορροπημένα Δένδρα Αναζήτησης

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

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

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

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

3 Αναδροµή και Επαγωγή

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

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

ΗΥ360 Αρχεία και Βάσεις εδοµένων

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

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

Transcript:

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη (Union-Find) ΗΥ240 - Παναγιώτα Φατούρου 1 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Έστω ότι S 1,, S k είναι ξένα υποσύνολα ενός συνόλου U, δηλαδή ισχύει ότι S i S j =, για κάθε i,j µε i j και S 1 S k = U. Λειτουργίες MakeSet(X): επιστρέφει ένα νέο σύνολο που περιέχει µόνο το στοιχείο X. Union(S,T): επιστρέφει το σύνολο S T, το οποίο αντικαθιστά τα S, T. Find(X): επιστρέφει το σύνολο S στο οποίο ανήκει το στοιχείο Χ. Εφαρµογές Το πρόβληµα της διαχειρίσεως ξένων µεταξύ τους συνόλων εµφανίζεται σε αρκετές εφαρµογές. Υπάρχουν αλγόριθµοι ευρέσεως σκελετικών δένδρων (spanning trees) που ξεκινούν από n στοιχειώδη σκελετικά δένδρα µε έναν κόµβο το καθένα και βήµα προς βήµα συνενώνουν ξένα µεταξύ τους σκελετικά υποδένδρα µέχρι να προκύψει τελικά ένα δένδρο που αποτελεί το προς αναζήτηση σκελετικό δένδρο. ΗΥ240 - Παναγιώτα Φατούρου 2 1

Ξένα Σύνολα µε τη Up-Tree Είναι δένδρο στο οποίο κάθε κόµβος διατηρεί µόνο ένα δείκτη προς τον πατρικό του κόµβο (έτσι όλοι οι δείκτες δείχνουν προς τα πάνω). Ένας κόµβος µπορεί να έχει οποιοδήποτε πλήθος παιδιών. Το σύνολο U υλοποιείται ως ένα δάσος από Up-trees. Κάθε τέτοιο δένδρο περιέχει τα στοιχεία ενός από τα ξένα σύνολα. Το στοιχείο της ρίζας αποτελεί το αναγνωριστικό του συνόλου. Υλοποίηση Find(X), όπου X είναι ένας δείκτης σε ένα κόµβο Ακολούθησε τους δείκτες από τον κόµβο προς τη ρίζα. Ποια είναι η πολυπλοκότητα της Find(); Ο(ύψος δένδρου) ΗΥ240 - Παναγιώτα Φατούρου 3 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Έλεγχος αν ένα στοιχείο Χ ανήκει στο σύνολο S Ελέγχουµε αν η Find(X) επιστρέφει S. Υλοποίηση Union(S,T) Κάνε τη ρίζα του ενός δένδρου να δείχνει στη ρίζα του άλλου. Ποια είναι η πολυπλοκότητα της Union(); Ο(1) Είναι επιθυµητό να κρατήσουµε το ύψος του δένδρου όσο το δυνατό µικρότερο Χρειάζεται προσοχή στην επιλογή του δένδρου του οποίου η ρίζα θα δείξει στη ρίζα του άλλου! ΗΥ240 - Παναγιώτα Φατούρου 4 2

Ξένα Σύνολα που υποστηρίζουν τη Παράδειγµα Έστω ότι έχουµε n σύνολα µε ένα στοιχείο το καθένα. Ποιο είναι το χειρότερο ύψος δένδρου που µπορεί να προκύψει και πως πρέπει να εκτελεστεί η Union() για να προκύψει ένα τέτοιο δένδρο; S 5 S 1 S 2 S 3 S 4 S 5 Στρατηγική για µείωση ύψους δένδρου «Πάντα συνενώνουµε το µικρότερο δένδρο στο µεγαλύτερο, δηλαδή κάνουµε τη ρίζα του µικρότερου δένδρου να δείχνει στη ρίζα του µεγαλύτερου δένδρου». Ένα δένδρο είναι µεγαλύτερο από ένα άλλο αν έχει περισσότερους κόµβους. S 2 S 3 S 4 ΗΥ240 - Παναγιώτα Φατούρου S 1 5 Ξένα Σύνολα που υποστηρίζουν τη Κάθε κόµβος είναι ένα struct µε πεδία κάποια πληροφορία για το στοιχείο, το δείκτη parent στο γονικό κόµβο, και ένα µετρητή count, που χρησιµοποιείται µόνο αν ο κόµβος είναι η ρίζα και περιέχει το πλήθος των κόµβων στο up-tree. pointer UpTreeFind(pointer P) { // return the root of the tree containing P if (P == NULL) error; q = P; while (q->parent!= NULL) do q = q->parent return q; pointer UpTreeUnion(pointer S,T) { // S and T are roots of up-trees */ // returns result of merging smaller into larger if (S == NULL OR P == NULL) return; if (S->count >= T->count) { S->count = S->count + T->count; T->parent = S; return S; else { T->count = T->count + S->count; S->parent = T; return T; ΗΥ240 - Παναγιώτα Φατούρου 6 3

Ξένα Σύνολα που υποστηρίζουν τη Λήµµα Έστω ότι T είναι ένα up-tree που αναπαριστά ένα σύνολο µεγέθους n, το οποίο δηµιουργήθηκε µε τη συνένωση n συνόλων µεγέθους 1 χρησιµοποιώντας την UPTreeUnion(). Τότε, το ύψος του T είναι το πολύ log n. Απόδειξη: Αποδεικνύουµε ότι για κάθε h, αν το Τ είναι up-tree ύψους h που δηµιουργήθηκε από τη συνένωση n συνόλων µεγέθους 1 (εκτελώντας επαναληπτικά την UpTreeUnion()), τότε το Τ έχει τουλάχιστον 2 h κόµβους, δηλαδή Τ 2 h. Με επαγωγή στο h. Βάση Επαγωγής (h=0): Τότε το Τ αποτελείται από έναν µόνο κόµβο Τ = 1 2 0. Επαγωγική Υπόθεση: Υποθέτουµε πως για κάθε up-tree S, αν το ύψος h του S είναι h, τότε S 2 h. ΗΥ240 - Παναγιώτα Φατούρου 7 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Επαγωγικό Βήµα: Συµβολίζουµε µε Τ το πρώτο δένδρο που δηµιουργείται µε ύψος h+1 (εφαρµόζοντας τον παραπάνω αλγόριθµο). Τότε, το Τ δηµιουργείται µε τη συνένωση ενός up-tree Τ 2 σε ένα uptree Τ 1 για τα οποία ισχύουν τα εξής: το Τ 2 έχει ύψος h, ενώ το Τ 1 έχει ύψος το πολύ h και Τ 1 Τ 2. Από επαγωγική υπόθεση, Τ 2 2 h. Εποµένως, Τ = Τ 1 + Τ 2 2* Τ 2 2*2 h = 2 h+1. Συµπεραίνουµε εποµένως ότι: n = Τ 2 h+1 h log n - 1 νέα ακµή δένδρο µε λιγότερους κόµβους ΗΥ240 - Παναγιώτα Φατούρου 8 4

Ξένα Σύνολα που υποστηρίζουν τη Ποια είναι η πολυπλοκότητα της Find(X); Υπάρχει όµως ένα λεπτό σηµείο Πως βρίσκουµε τη θέση του X στο up-tree; H Find(X) εµπεριέχει µια LookUp(). Πως θα υλοποιήσουµε αυτή τη LookUp; Περιπτώσεις 1. Ο χώρος των κλειδιών είναι µικρός και τα κλειδιά έχουν µικρές τιµές (π.χ. 50 κλειδιά µε τιµές 1... 100). Τότε, είναι εφικτό να αποθηκευτούν αυτά σε έναν πίνακα 100 θέσεων του οποίου η θέση i περιέχει δείκτη προς το κλειδί i (ή NULL αν το κλειδί i δεν ανήκει στο U), οπότε η LookUp() υλοποιείται σε σταθερό χρόνο. 2. Ο χώρος των κλειδιών είναι µεγάλος. Τότε, απαιτείται µια βοηθητική δοµή (π.χ., µια από τις δενδρικές δοµές που υλοποιούν λεξικά) που η πληροφορία κάθε κόµβου είναι δείκτης σε ένα από τα κλειδιά του up-tree. ΗΥ240 - Παναγιώτα Φατούρου 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης To 2-3 δένδρο περιέχει όλα τα κλειδιά του up-tree εκτός από το µεγαλύτερο. Κάθε κλειδί του 2-3 δένδρου έχει συσχετισθεί µε έναν δείκτη προς κάποιο κόµβο του up-tree. Για τα κλειδιά που είναι αποθηκευµένα σε κόµβους φύλλα, ο δείκτης αυτός είναι ο δείκτης που βρίσκεται στα αριστερά τους. Για τα κλειδιά που είναι αποθηκευµένα σε εσωτερικούς κόµβους, ο δείκτης αυτός είναι ο δείκτης στα δεξιά του προηγούµενού τους στην ενδοδιατεγµένη διάταξη. Ο δείκτης στα δεξιά του Η δείχνει στον κόµβο µε το µεγαλύτερο κλειδί στο up-tree. Ποια είναι η πολυπλοκότητα της Find() µε τα νέα δεδοµένα; Ο(logn) ΗΥ240 - Παναγιώτα Φατούρου 10 5

Ξένα Σύνολα που υποστηρίζουν τη Στρατηγική Συµπίεσης Μονοπατιού «Κατά τη διάρκεια εκτέλεσης µιας Find(Χ), το parent πεδίο κάθε κόµβου στο µονοπάτι που ακολουθείται από τον κόµβο µε κλειδί Χ στη ρίζα, αλλάζει ώστε να δείχνει στη ρίζα». Τι αλλαγές επιφέρει η στρατηγική συµπίεσης µονοπατιού στην απόδοση? Οι MakeEmptySet() και Union() εξακολουθούν να χρειάζονται σταθερό χρόνο. Η Find() αρχικά εκτελείται στον ίδιο ακριβώς χρόνο όπως χωρίς να εφαρµόζεται η στρατηγική, αλλά µετά την εκτέλεση αρκετών Find(), η πολυπλοκότητά της γίνεται «σχεδόν σταθερή». Αποτέλεσµα Find(D) όταν χρησιµοποιείται η στρατηγική συµπίεσης µονοπατιού. ΗΥ240 - Παναγιώτα Φατούρου 11 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Για κάθε j, έστω F(j) η αναδροµική συνάρτηση που ορίζεται ως εξής: F(0) = 1 και F(j+1) = 2 F(j), j 0. Οι τιµές της F(j) αυξάνουν πάρα πολύ γρήγορα καθώς αυξάνεται το j, π.χ., για j = 5, Φ(5) = 2 65536 10 19728. Ο αριθµός αυτός είναι πολύ µεγάλος (η διάµετρος του σύµπαντος είναι 10 40 και το πλήθος µορίων σε ολόκληρο το σύµπαν είναι µικρότερο από 10 120 ). Ορίζουµε την log*n ως εξής: log*n = το ελάχιστο i τ.ω. F(i) n = το ελάχιστο i τ.ω. log log log log n 1 i φορές Οι τιµές της log*n αυξάνονται πάρα πολύ αργά καθώς αυξάνει το n, π.χ., log*n είναι 5 για οποιαδήποτε «χρήσιµη» τιµή του n. Αν η Find() εκτελείται σε χρόνο Ο(log*n) είναι εποµένως σαν να είναι σταθερής πολυπλοκότητας. ΗΥ240 - Παναγιώτα Φατούρου 12 6