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

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

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

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

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

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

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

Heapsort Using Multiple Heaps

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

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

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

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

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

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

ταξινόμηση σωρού Παύλος Εφραιμίδης Δομές Δεδομένων και

Αλγόριθμοι ταξινόμησης

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

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

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

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

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

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

σωροί ταξινόμηση σωρού οόροςheap σωρός (heap) συστοιχία Α για έναν σωρό μια δομή δεδομένων που πχ.

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

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

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

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

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

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

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

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

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

Κεφάλαιο 6 Ουρές Προτεραιότητας

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

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

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Ουρά Προτεραιότητας: Heap

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

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

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

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

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων

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

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

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

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

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

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

Αλγόριθμοι Ταξινόμησης Μέρος 2

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

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Ουρά Προτεραιότητας: Heap

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

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

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

Ουρά Προτεραιότητας: Heap

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

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

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

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

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

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

Ταχεία Ταξινόμηση Quick-Sort

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

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

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

Transcript:

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Η διαδικασία PercolateDown, Δημιουργία Σωρού O Αλγόριθμος Ταξινόμησης HeapSort Υλοποίηση, Παραδείγματα Παραλλαγές Σωρών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1

Διαδικασία Καθόδου PercolateDown Έστω ένας πίνακας Α[1..n] και μια τιμή i, θα ορίσουμε διαδικασία PercoladeDown(i), η οποία μετακινεί το στοιχείο Α[i] μέσα στον σωρό προς τα κάτω όσο χρειάζεται. Έστω ότι Α[i] = k. Θεωρούμε πως η i είναι άδεια θέση. Αν η άδεια θέση έχει παιδί που περιέχει στοιχείο μικρότερο του k και x είναι το μικρότερο τέτοιο παιδί, τότε μετακινούμε το στοιχείο του x στην κενή θέση και μετακινούμε την κενή θέση στο x. Επαναλαμβάνουμε την ίδια διαδικασία μέχρι τη στιγμή που η κενή θέση δεν έχει παιδιά με στοιχεία μικρότερα του k. Τότε αποθηκεύουμε το k στην θέση αυτή. Ο χρόνος εκτέλεσης είναι ανάλογος του ύψους του κόμβου που αντιστοιχεί στη θέση i του σωρού. Δηλαδή, στη χείριστη περίπτωση, όπου i=n, Ο(lg n). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Διαδικασία Καθόδου PercolateDown (συν.) Μη αναδρομική διαδικασία PercolateDown public static void PercolateDown(int A[], int n, int i) { int k = A[i]; int j; } while (2 * i <= n) { j = 2 * i; if (j < n && A[j + 1] < A[j]) j++; if (k > A[j]) { A[i] = A[j]; i = j; } else break; } A[i] = k; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3

Παράδειγμα Εκτέλεσης PercolateDown int A[]={ 1, 13, 8, 15, 4, 7, 20, 18, 5, 2}; i=2, n=9, PercolateDown(A, 9, 2); k=8 Aν φανταστούμε τον πίνακα σαν δυαδικό δέντρο 1. 2. 3. 4. 5. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4

Διαδικασία DeleteMin (2) Αφαιρούμε το στοιχείο της ρίζας (είναι το μικρότερο κλειδί του σωρού). Μεταφέρουμε το τελευταίο κλειδί στη ρίζα, και εφαρμόζουμε τη διαδικασία PercoladeDown(A, n, 1): public static int deletemin(heap h) { int min = 0; int swap = 0; if (!h.isempty()) { min = h.contents[1]; // swap(contents[1],contents[size]) swap = h.contents[1]; h.contents[1] = h.contents[h.size]; h.contents[h.size] = swap; h.size ; PercolateDown(h.contents, h.size, 1); } return min; } Χρόνος Εκτέλεσης: O(h) = Ο(log n) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

Παράδειγμα DeleteMin(2) 3 Delete Min Swap with last 28 Percolate Down 28 22 27 22 27 22 27 44 26 28 44 26 28 44 26 22<27, 28>22 22: Move up 22 26<44, 28>26 26: Move up 22 22 27 27 26 27 44 26 44 26 44 28 0 1 2 3 4 5 6 0 22 26 27 44 28 break Set to 28 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

Από πίνακες σε σωρούς Έστω πίνακας Α[1..n]. Μπορούμε να θεωρήσουμε τον πίνακα ως ένα πλήρες δυαδικό δένδρο με n κόμβους. Αν για μια τιμή i το αριστερό και το δεξί υπόδενδρο του i ικανοποιούν τις ιδιότητες ενός σωρού, τότε, αν καλέσουμε τη διαδικασία PercolateDown(A, n, i) θα έχουμε σαν αποτέλεσμα το υπόδενδρο που ριζώνει στη θέση i να ικανοποιεί τις ιδιότητες ενός σωρού. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

Κτίσιμο σωρού από ένα πίνακα Μπορούμε να μετατρέψουμε ένα πίνακα Α[1..n] σε ένα σωρό με διαδοχική εφαρμογή της διαδικασίας PercoladeDown() από κάτω προς τα πάνω. Παρατήρηση: οι θέσεις > n/2 αντιστοιχούν σε φύλλα. public static void BuildHeap(int A[], int n) { for (int i = n / 2; i > 0; i ) PercolateDown(A, n, i); } Ορθότητα (αποδεικνύεται με τη μέθοδο της επαγωγής): μετά από την εφαρμογή της διαδικασίας PercoladeDown(A,n,i), τα υπόδενδρα που ριζώνουν στις θέσεις i,..., n, ικανοποιούν τις ιδιότητες σωρού. Ανάλυση του Χρόνου Εκτέλεσης: Ο ολικός χρόνος εκτέλεσης είναι ανάλογος του αθροίσματος των υψών όλων των εσωτερικών κόμβων, το οποίο είναι Ο(n). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

Τι κάνει ο πιο κάτω αλγόριθμος; public static void mystery(int A[], int n) { BuildHeap(A, n); int swap; for (int i = n; i > 1; i ) { // swap (A[1], A[i]); swap = A[1]; A[1] = A[i]; A[i] = swap; PercolateDown(A, i 1, 1); } } ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9

Παράδειγμα Εκτέλεσης Διαδικασίας mystery Είσοδος, Α={ (6), 34, 8, 64, 57, 32, 21} 34 8 64 57 32 21 Μετά την εκτέλεση της γραμμής BuildHeap 8 32 21 57 34 64 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10

Παράδειγμα Εκτέλεσης Διαδικασίας mystery Μετά από την πρώτη επανάληψη του for 21 32 64 57 34 8 Μετά από την δεύτερη επανάληψη του for 32 34 64 57 21 8 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11

Παράδειγμα Εκτέλεσης Διαδικασίας mystery Μετά από την τρίτη επανάληψη του for 34 57 64 32 21 8 Μετά από την τέταρτη επανάληψη του for 57 64 34 32 21 8 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

Παράδειγμα Εκτέλεσης Διαδικασίας mystery Μετά από την πέμπτη επανάληψη του for 64 57 34 32 21 8 Σε επίπεδο πίνακα 64 57 34 32 21 8 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

Ο αλγόριθμος ταξινόμησης HeapSort H διαδικασία mystery ταξινομεί ένα πίνακα σε φθίνουσα σειρά. Αρχικά δημιουργεί ένα σωρό σε χρόνο Ο(n). Στη συνέχεια επαναλαμβάνει το εξής: αφαιρεί το μικρότερο στοιχείο (της ρίζας του σωρού) και το μετακινεί στο τέλος (εκτελεί την PercolateDown). Κάθε εκτέλεση της PercoladeDown χρειάζεται χρόνο της τάξης Ο(log n). Ολικός Χρόνος Εκτέλεσης: Ο(n log n) O αλγόριθμος ονομάζεται Heapsort Μπορούμε εύκολα να αλλάξουμε τον κώδικα ώστε να επιστρέφεται η λίστα σε αύξουσα σειρά. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

Άλλες διαδικασίες σε σωρούς Παρόλο που εύρεση του ελάχιστου κλειδιού σε ένα σωρό μπορεί να πραγματοποιηθεί σε σταθερό χρόνο, η εύρεση τυχαίου στοιχείου στη χειρότερη περίπτωση επιβάλλει διερεύνηση ολόκληρης της δομής (δηλαδή, είναι της τάξης Ο(n)). Αν όμως γνωρίζουμε τη θέση στοιχείων με κάποιο άλλο τρόπο, διαδικασίες σε σωρούς πραγματοποιούνται εύκολα, π.χ. οι πιο κάτω εκτελούνται σε χρόνο λογαριθμικό. Increase_Key(P,Δ), αυξάνει την προτεραιότητα του κλειδιού P, κατά Δ. Χρησιμοποιείται από χειριστές λειτουργικών συστημάτων για αύξηση της προτεραιότητας σημαντικών διεργασιών. Η συμμετρική διαδικασία Decrease_Key(P,Δ) συχνά εκτελείται αυτόματα σε λειτουργικά συστήματα σε περίπτωση που κάποια δουλειά χρησιμοποιεί υπερβολικά μεγάλη ποσότητα χρόνου του CPU. Remove(I), αφαιρεί τον κόμβο της θέσης Ι (χρήσιμη σε περίπτωση τερματισμού διαδικασίας). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

Συγχώνευση Σωρών (Merge Heap) Υποθέστε την ύπαρξη των δυαδικών σωρών h1 και h2. Πως μπορούν να συγχωνευτούν σε ένα καινούριο σωρό h; Προσπάθεια Α: Πρόσθεσε όλα τα στοιχεία του σωρού h1 στον h2. Χρόνος Εκτέλεσης; Προσπάθεια Β: Βρες τον πιο μικρό από τους δύο σωρούς (έστω h2) και πρόσθεσε όλα τα στοιχεία του σωρού h2 στον h1. Χρόνος Εκτέλεσης; Προσπάθεια Γ: Συνένωσε τους δύο σωρούς (δηλ., δημιούργησε ένα καινούριο πίνακα και αποθήκευσε τα στοιχεία του σωρού h1 πρώτα και μετά τα στοιχεία του σωρού h2) και μετά τρέξε τη διαδικασία BuildHeap. Χρόνος Εκτέλεσης; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

Προσπάθεια Δ: Leftist Heaps Ιδέα: Η συντήρηση της σωρού να γίνεται σε ένα μικρό μέρος της σωρού Τα περισσότερα στοιχεία βρίσκονται στα αριστερά Η διαδικασία της συγχώνευσης γίνεται στα δεξιά Πως το επιτυγχάνουμε; Ορισμός Null Path Length Null Path Length (npl) κάποιου κόμβου u: ο αριθμός των κόμβων μεταξύ του u και μίας κενής αναφοράς (null) σε κάποιο από τα υποδέντρα του Εναλλακτικός ορισμός: Ελάχιστη απόσταση ενός κόμβου από κάποιο απόγονο που έχει 0 ή 1 παιδιά ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Ιδιότητες Leftist Heap Ιδιότητα Σειράς (Σωρού) Η τιμή κάποιου κόμβου είναι μικρότερη από αυτή των παιδιών του Αποτέλεσμα: ο μικρότερος κόμβος είναι η ρίζα Ιδιότητα Leftist Για κάθε κόμβο u npl(u.left) npl(u.right) Αποτέλεσμα: για κάθε κόμβο το αριστερό του υποδέντρο είναι τουλάχιστον τόσο βαρύ όσο το δεξί του υποδέντρο ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

Υπολογισμός Null Path Length (npl) npl(null) = 1 NULL npl( u ) =? u? npl( u ) =? u?? 0?? 0 npl( u ) =? u 0 0 0 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19

Είναι τα πιο κάτω δέντρα Leftist; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20

Γιατί χρειαζόμαστε την ιδιότητα Leftist Επειδή εγγυάται τα ακόλουθα: Το δεξί μονοπάτι είναι «κοντό» σε σχέση με τον αριθμό των κόμβων στο δέντρο Ένας σωρός leftist με Ν κόμβους έχει δεξί μονοπάτι με το πολύ log (N+1) κόμβους Αποτέλεσμα: κάνε τις αλλαγές στο δεξί «κοντό» υποδέντρο Πως θα εκτελεστεί η Συγχώνευση δύο σωρών h1 και h2; Βασική Ιδεά: Το πιο μικρό στοιχείο από h1 και h2 πρέπει να είναι η καινούρια ρίζα (έστω του h1) Το αριστερό υποδέντρο του h1 παραμένει αριστερά Αναδρομικά συγχώνευσε το δεξί υποδέντρο με το h2 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21

Συγχώνευση δύο Leftist Σωρών MergeHeaps(h1, h2): επιστρέφει ένα leftist σωρό που περιέχει τα στοιχεία (διακριτά στοιχεία) των leftist σωρών h1 και h2. merge h1 a a merge h2 L1 b R1 a < b L1 R1 b L2 R2 L2 R2 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22

Συγχώνευση δύο Leftist Σωρών (συν.) a a npl(l1) < npl(r ) L1 R swap R L1 Χρονική Πολυπλοκότητα Συγχώνευσης; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23

Παράδειγμα MergeHeaps 1 npl 1 5 0 0 10 12 1 3 0 0 7 8 3<5 14 0 7 0 3 1 merge 5<8 8 0 1 5 0 0 10 12 0 10 5? merge 8 0 14 0 0 12 8<12 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 24

Παράδειγμα MergeHeaps 1 (συν.) 8 0 5 1 3 1 npl(5) > npl(7) 0 12 0 10 0 8 0 7 5 1 swap 12 0 14 0 0 10 8 0 0 12 3 1 5 1 7 0 0 10 0 12 8 0 14 0 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 25

Παρατηρήσεις Η χρονική πολυπλοκότητα της MergeHeaps είναι O(log n) Η χρονική πολυπλοκότητα της Insert σε leftist σωρό με n στοιχεία; Χρήση της merge με h1=τον σωρό και τον καινούριο κόμβο σαν σωρό h2 Η χρονική πολυπλοκότητα της Delete σε leftist σωρό με n στοιχεία; Αφαίρεση της ρίζας και συγχώνευση του αριστερού και δεξιού υποδέντρου με χρήση της merge Προβλήματα leftist σωρών: Μνήμη; Πολυπλοκότητα; Το δεξιό υποδέντρο είναι συνήθως πιο «βαρετό» και χρειάζεται αλλαγή. Τι σημαίνει αυτό σε επίπεδο πίνακα; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 26

Άσκηση 1: Εκτέλεση MergeHeaps 2 1 8 12 merge with 9 7 16 20 1 5 7 merge with 22 10 15 20 25 75 50 99 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 27

Άσκηση 2: Διαδικασία MergeHeaps Γράψετε με ψευδοκώδικα την διαδικασία MergeHeaps ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 28

http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/nearly_complete.pdf ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 29