Δομές Δεδομένων. Κεφάλαιο Εισαγωγή

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Δομές Δεδομένων. Κεφάλαιο Εισαγωγή"

Transcript

1 Κεφάλαιο 4 Δομές Δεδομένων 4.1 Εισαγωγή Όπως είναι γνωστό, για να εκτελεστεί ένας αλγόριθμος με H/Y θα πρέπει να γραφτεί σε μία αυστηρά ορισμένη γλώσσα Η/Υ. Αυτή η υλοποίηση του αλγόριθμου σε γλώσσα προγραμματισμού Η/Υ, λέγεται πρόγραμμα. Ένα πρόγραμμα Η/Υ επενεργεί σε σύνολα δεδομένων που αποθηκεύονται στη μνήμη του Η/Υ. Είναι λοιπόν φανερό πως η επιλογή των δομών με τις οποίες θα οργανωθούν τα δεδομένα στη μνήμη του Η/Υ επηρεάζουν την απόδοση του προγράμματος, άρα την απόδοση γενικότερα, του αλγορίθμου. Δομές δεδομένων, ονομάζουμε τις διάφορες διμελείς σχέσεις μεταξύ των στοιχείων ενός συνόλου δεδομένων. Οι σχέσεις αυτές μπορεί να είναι γραμμικές ή μη γραμμικές. Έστω ένα μη κενό σύνολο δεδομένων και μια διμελής σχέση που διατάσσει τα στοιχεία του έτσι ώστε ένα στοιχείο που ονομάζεται αρχή να έχει ένα επόμενο, ένα στοιχείο που ονομάζεται τέλος ένα προηγούμενο και κάθε άλλο στοιχείο να έχει ένα μόνο προηγούμενο και ένα μόνο επόμενο. Τότε λέμε ότι τα στοιχεία του συνόλου αυτού των δεδομένων, είναι ολικώς ή γραμμικώς διατεταγμένα (totally or linearly ordered) και η δομή που ορίζεται απ αυτή τη σχέση ονομάζεται γραμμική δομή δεδομένων (linear data structure). Κάθε άλλη δομή δεδομένων που δεν είναι γραμμική, ονομάζεται μη γραμμική δομή δεδομένων (non-linear). Σημειωτέον ότι η διάταξη αυτή δεν έχει σχέση με τυχόν άλλη διάταξη των τιμών των κόμβων π.χ. λεξικογραφική ή αριθμητική. Στις γραμμικές δομές δεδομένων, ανήκουν οι πίνακες, οι εγγραφές, τα σύνολα, τα αρχεία και οι γραμμικές λίστες. Από τις γραμμικές λίστες μπορούμε να ξεχωρίσουμε τις στοίβες (stacks) και τις ουρές (queues). Στις μη γραμμικές δομές δεδομένων ανήκουν οι γράφοι (ή γραφήματα) και τα δέντρα. Στο κεφάλαιο αυτό θα συζητήσουμε τις πιο γνωστές δομές δεδομένων, καθώς και τους αλγορίθμους υλοποίησης των βασικών τους πράξεων. Το υλικό που παρουσιάζεται έχει εν μέρει στηριχθεί στα διδακτικά συγγράμματα [5, 2, 3, 4], όπου και μπορούν να αναζητηθούν περισσότερες λεπτομέρειες για τα θέματα που αναπτύσσονται εδώ. 37

2 38 Κεφάλαιο 4. Δομές Δεδομένων 4.2 Σωροί-Ουρά Προτεραιότητας-Heapsort Πριν προχωρήσουμε στις ουρές προτεραιότητας, θα αναφέρουμε συνοπτικά τι είναι οι λεγόμενες αφηρημένες δομές δεδομένων (ADT: abstract data types). Οι δομές αυτές αποτελούν ουσιαστικά ένα μοντέλο που περιγράφει ένα σύνολο συγκεκριμένων δομών δεδομένων που έχουν παρόμοια συμπεριφορά. Με άλλα λόγια, δεν ορίζουμε με σαφή τρόπο τη δομή μας, αλλά ορίζουμε μόνο τις πράξεις που θέλουμε να εκτελούμε στα στοιχεία μας, και τι ιδιότητες πρέπει να έχουν αυτές οι πράξεις. Ορίζουμε λοιπόν ένα σύνολο λειτουργιών (μεθόδους) επί των στοιχείων μας που χαρακτηρίζει την ADT, αλλά ο ακριβής τρόπος με τον οποίο θα αναπαραστήσουμε τα δεδομένα μας και θα υλοποιήσουμε τις πράξεις μας μπορεί να διαφέρει. Η υλοποίηση μιας ADT από μια (συγκεκριμένη) δομή δεδομένων αποτελείται από Αναπαράσταση: οργάνωση στιγμιοτύπων και υλοποίηση λειτουργιών με κατάλληλους αλγόριθμους. Διατύπωση: ορισμός αναπαράστασης και περιγραφή υλοποίησης λειτουργιών (ψευδοκώδικας). Ανάλυση: προσδιορισμός απαιτήσεων σε χώρο αποθήκευσης και χρόνο εκτέλεσης για κάθε (βασική) λειτουργία. Είμαστε πλέον έτοιμοι να προχωρήσουμε στον ορισμό μιας ADT που ονομάζεται ουρά προτεραιότητας (priority queue).

3 4.2 Σωροί-Ουρά Προτεραιότητας-Heapsort 39 Ορισμός 4.1. Έστω ότι μας δίνονται κάποια στοιχεία για τα οποία ισχύει μια ολική σχέση διάταξης (<). Μια δομή δεδομένων η οποία μας επιτρέπει να κάνουμε με αποδοτικό τρόπο εισαγωγή ενός καινούργιου στοιχείου και εξαγωγή (δηλαδή εύρεση και διαγραφή) του μεγαλύτερου στοιχείου, λέγεται ουρά με προτεραιότητα (priority queue). Με άλλα λόγια, η ουρά προτεραιότητας είναι μια ουρά όπου η σειρά διαγραφής καθορίζεται από μια προτεραιότητα (μεγαλύτερη μικρότερη). Το κάθε στοιχείο λοιπόν έχει μια προτεραιότητα. Οι λειτουργίες που μας ενδιαφέρουν είναι: insert(x): εισαγωγή x deletemax(): διαγραφή και επιστροφή στοιχείου μέγιστης προτεραιότητας max(): επιστροφή στοιχείου μέγιστης προτεραιότητας (χωρίς διαγραφή) changepriority(k): αλλαγή προτεραιότητας θέσης k isempty(), size(): βοηθητικές λειτουργίες. Ένας τρόπος για να παραστήσουμε τις ουρές με προτεραιότητα είναι η υλοποίηση με σωρό. Ορισμός 4.2. Σωρός (heap tree) είναι ένα πλήρες δυαδικό δέντρο στο οποίο η τιμή της ρίζας είναι μεγαλύτερη ή ίση (ή μικρότερη ή ίση) από τις τιμές των υπολοίπων κόμβων και αυτό ισχύει αναδρομικά για την ρίζα κάθε υποδέντρου (σχήμα 4.1). 1 5 (α) (β) Σχήμα 4.1: (α) Σωρός (Heap tree) και (β) ο πίνακας που αντιστοιχεί σε αυτόν Έστω ότι έχουμε n ακεραίους αποθηκευμένους με τυχαία σειρά σε ένα μονοδιάστατο πίνακα a[n]. Θα περιγράψουμε δύο στρατηγικές με τις οποίες μπορούμε να διατάξουμε τα στοιχεία του πίνακα a σε σωρό.

4 40 Κεφάλαιο 4. Δομές Δεδομένων Η πρώτη στρατηγική είναι η παρακάτω: Θεωρούμε το πρώτο στοιχείο του πίνακα (a[1]) σαν σωρό και εισάγουμε ένα προς ένα τα υπόλοιπα στοιχεία του πίνακα διατηρώντας κάθε φορά τη δομή του σωρού. Δηλαδή, όπως φαίνεται στον αλγόριθμο 4.1, κάθε στοιχείο ξεκινά από το τέλος του μέχρι στιγμής δέντρου και βρίσκει τη σωστή θέση του ανεβαίνοντας προς την ρίζα. Η χρονική πολυπλοκότητα του αλγορίθμου είναι O(n log n). Αυτό συμβαίνει διότι στη χειρότερη περίπτωση (δηλαδή όταν τα στοιχεία βρίσκονται αποθηκευμένα στον πίνακα με αύξουσα σειρά), κάθε στοιχείο πρέπει να διανύσει όλη την απόσταση ως τη ρίζα, συνεπώς αρκεί χρόνος O(log n). Παρατήρηση 4.3. Η μέση χρονική πολυπλοκότητα είναι O(n) (Άσκηση). Αλγόριθμος 4.1 Κατασκευή σωρού (insert) procedure insert (var a:array; n:integer); var item:integer; k:integer; item:=a[n]; k:=n div 2; ( εε ) while ((k>0) and (a[k]<item)) do a[n]:=a[k]; n:=k; k:=k div 2; ; a[n]:=item procedure ConstructHeapInsert (var a:array; n:integer); var i:integer; for i:=2 to n do insert(a,i) Η δεύτερη στρατηγική κατασκευής ενός σωρού είναι η εξής: Θεωρούμε τον πίνακα a σαν δέντρο και εξετάζουμε ένα προς ένα όλα τα υποδέντρα του αρχίζοντας από το τέλος. Κάθε υποδέντρο το μετατρέπουμε σε σωρό και το ενώνουμε με την τελική δομή. Στη χειρότερη περίπτωση, ο χρόνος που χρειάζεται για την κατασκευή ενός σωρού με τη βοήθεια του αλγορίθμου 4.2, είναι O(n) 1. Όμως η χρήση της διαδικασίας CostructHeapCombine απαιτεί, όλα τα στοιχεία που θα φτιάξουν το σωρό να είναι διαθέσιμα από την αρχή της διαδικασίας, σε αντίθεση με τη χρήση της διαδικασίας ConstructHeapInsert όπου ένα καινούργιο στοιχείο μπορεί να εισαχθεί στο δέντρο οποιαδήποτε χρονική στιγμή. Παρατήρηση 4.4. Η διαδικασία combine μπορεί να χρησιμοποιηθεί κι όταν θέλουμε να διαγράψουμε οποιοδήποτε στοιχείο ενός σωρού (όχι μόνο τη ρίζα) χωρίς να χαλάσουμε την ιδιότητα 1 Αυτό προκύπτει ως εξής: Για κάθε i (του αλγορίθμου) ο αριθμός επαναλήψεων είναι k i, όπου k = log n. Οι κόμβοι που υπάρχουν για κάθε i είναι το πολύ 2 i 1. Συνεπώς : k i=1 2 i 1 (k i) n i i 2 i = O(n)

5 4.2 Σωροί-Ουρά Προτεραιότητας-Heapsort 41 Αλγόριθμος 4.2 Κατασκευή σωρού (combine) procedure combine (var a:array; i,n:integer); ( Μετατρέπει το υποδένδρο με ρίζα a[i] σε σωρό, υπό την προϋπόθεση ότι τα υποδένδρα με ρίζες τα παιδιά του a[i] είναι σωροί ) var left, right, largest_child:integer; while 2 i n do ( ο κόμβος i έχει τουλάχιστον ένα παιδί ) left:=2 i; ( ε ) right:=2 i+1; ( ε ) largest_child:=left; if right n and a[right]>a[left] then largest_child:=right; ( largest_child: η θέση του παιδιού με τη μεγαλύτερη τιμή ) if a[i]<a[largest_child] then swap(a[i],a[largest_child]); i:=largest_child else i:= n div (*exit while*) procedure CostructHeapCombine (var a:array; n:integer); var i:integer; for i:=n div 2 downto 1 do combine(a,i,n) σωρού. Μια από τις εφαρμογές του σωρού είναι η ταξινόμηση (sorting). Στην ταξινόμηση η απλή στρατηγική επιβάλλει συνεχώς να διαλέγουμε από τα στοιχεία που απομένουν, το μεγαλύτερο (ή το μικρότερο). Ένας αλγόριθμος που θα χρησιμοποιούσε αυτή τη στρατηγική όπως είναι, χωρίς καμία βελτίωση της αρχικής σκέψης, θα απαιτούσε στη χειρότερη περίπτωση χρόνο O(n 2 ) (n 1 συγκρίσεις για κάθε στοιχείο). Η χρήση σωρού επιτρέπει την εύρεση του μεγαλύτερου στοιχείου και τη διαγραφή του από τα υπόλοιπα σε χρόνο τάξης O(log n). Έτσι επιτυγχάνεται για όλη τη διαδικασία της ταξινόμησης χρόνος στη χειρότερη περίπτωση της τάξης O(n log n). Η μέθοδος που κάνει ταξινόμηση είναι η παρακάτω (αλγόριθμος 4.3): Κατασκευάζουμε από τον δοσμένο πίνακα a[1..n], ένα σωρό με κάποια από τις μεθόδους που ήδη περιγράφηκαν. Έπειτα ανταλλάσσουμε (swap) το πρώτο στοιχείο της δομής (a[1]) με το τελευταίο (a[n]). Έτσι το τελευταίο στοιχείο του πίνακα τώρα είναι το μεγαλύτερο. Στη συνέχεια κάνουμε σωρό τον πίνακα

6 42 Κεφάλαιο 4. Δομές Δεδομένων a[1..n 1], παίρνουμε πάλι το πρώτο στοιχείο και το βάζουμε στη θέση a[n 1], κ.ο.κ. Τελικά, και μετά από χρόνο O(n log n), ο πίνακας a είναι ταξινομημένος σε αύξουσα σειρά (ascing order). Αλγόριθμος 4.3 Ταξινόμηση HeapSort procedure HeapSort (var a:array; n:integer); var i:integer; ConstructHeap(a,n); ( Αλγόριθμος 1 ή Αλγόριθμος 2 ) for i:=n downto 2 do swap(a[1],a[i]); combine(a,1,i 1) Ένα εύλογο ερώτημα είναι το εξής: Υπάρχει αλγόριθμος ο οποίος να ταξινομεί με συγκρίσεις στοιχεία σε χρόνο μικρότερο από αυτόν της τάξης O(n log n) (μιλώντας πάντα για τη χειρότερη περίπτωση); Η απάντηση είναι πως δεν είναι δυνατόν να υπάρξει τέτοιος αλγόριθμος. Παρατήρηση 4.5. Πολυπλοκότητα δέντρου απόφασης λέγεται το ύψος του, αφού το ύψος καθορίζει τον αριθμό συγκρίσεων που θα χρειαστεί στη χειρότερη περίπτωση ένας αλγόριθμος που υλοποιεί τις συγκρίσεις του δέντρου. Θεώρημα 4.6. Κάθε δέντρο απόφασης για ταξινόμηση n στοιχείων, έχει πολυπλοκότητα Ω(n log n). Απόδειξη. Κάθε αλγόριθμος που ταξινομεί με συγκρίσεις, μπορεί να παρασταθεί με τη βοήθεια ενός δέντρου απόφασης (decision tree), δηλαδή ενός δυαδικού δέντρου του οποίου οι εσωτερικές κορυφές αντιπροσωπεύουν μία σύγκριση (μία απόφαση). Το δέντρο που θα χρησιμοποιηθεί για την ταξινόμηση n στοιχείων θα έχει οπωσδήποτε n! φύλλα (όλες οι δυνατές μεταθέσεις των n στοιχείων). Το μήκος του δρόμου απ τη ρίζα στο φύλλο ενός δέντρου απόφασης μας δίνει τον αριθμό των συγκρίσεων που χρειάστηκαν για την ταξινόμηση που παριστάνει το φύλλο. Το μήκος του μεγαλύτερου απ τα μονοπάτια, δηλαδή το ύψος του δέντρου μας δίνει το αριθμό των συγκρίσεων στη χειρότερη περίπτωση. Μπορούμε να προσδιορίσουμε το ελάχιστο ύψος h ενός δέντρου απόφασης n στοιχείων το οποίο έχει n! φύλλα ως εξής. Ακόμη και αν το δέντρο είναι εντελώς πλήρες δυαδικό θα έχει το πολύ 2 h φύλλα. Επομένως θα πρέπει να ισχύει: 2 h n! h log(n!) n! ( n 2 ) n 2 } h n 2 log(n 2 ) Σαν συνέπεια έχουμε το ακόλουθο: Πόρισμα 4.7. Η ταξινόμηση n αριθμών με συγκρίσεις έχει χρονική πολυπλοκότητα Θ(n log n). Απόδειξη. Από το πιο πάνω θεώρημα είδαμε ότι χρειαζόμαστε για την ταξινόμηση n στοιχείων με συγκρίσεις, χρόνο Ω(n log n). Όπως είδαμε ο αλγόριθμος 4.3 έχει πολυπλοκότητα O(n log n).

7 4.3 Σύνολα - Συστήματα Εισαγωγής και Ανάκτησης Πληροφοριών 43 Συνεπώς το πρόβλημα της ταξινόμησης με συγκρίσεις λύνεται σε χρόνο Θ(n log n), άρα ο αλγόριθμος 4.3 είναι βέλτιστος. 4.3 Σύνολα - Συστήματα Εισαγωγής και Ανάκτησης Πληροφοριών - Πράξεις σε Σύνολα Γενικά Στην σχεδίαση αλγορίθμων τα σύνολα είναι η βάση πολλών σπουδαίων και χρήσιμων γενικευμένων δομών δεδομένων (abstract data types). Έχουν αναπτυχθεί πολλές τεχνικές υλοποίησης τέτοιων γενικευμένων δομών δεδομένων που βασίζονται σε σύνολα. Η δομή του συνόλου είναι η βάση πολλών προβλημάτων στα οποία μας ενδιαφέρει η γρήγορη ανάκτηση πληροφοριών (information retrieval). Σε αυτά τα προβλήματα, συνήθως έχουμε ένα σύμπαν, καθολικό σύνολο (universe) από το οποίο μπορούν να πάρουν στοιχεία όλα τα σύνολα (sets) που χρησιμοποιούνται. Οι περιπτώσεις που συναντάμε είναι: sets universe, δηλαδή οι πληθικοί αριθμοί των συνόλων που χρησιμοποιούνται είναι της τάξης του πληθικού αριθμού (cardinality) του καθολικού συνόλου. sets << universe, # operations universe, δηλαδή οι πληθικοί αριθμοί των συνόλων που χρησιμοποιούνται είναι πολύ μικρότεροι από τον πληθικό αριθμό του καθολικού συνόλου και επιπλέον ο αριθμός των πράξεων ανάμεσα στα σύνολα είναι πολύ μεγάλος. sets << universe, # operations << universe, όμοια με την προηγούμενη περίπτωση, με τη διαφορά ότι ο αριθμός των πράξεων με τα σύνολα είναι μικρός. Έστω ότι έχουμε ένα σύνολο αναφοράς U με n στοιχεία από το οποίο μπορούμε να κατασκευάσουμε άλλα σύνολα S, τα οποία είναι υποσύνολα του U. Ένας τρόπος να παραστήσουμε τα σύνολα αυτά S, είναι με τη βοήθεια ενός διανύσματος μήκους n, S[1..n] τέτοιου ώστε S[i] = 1 αν το i-οστό στοιχείο του U ανήκει στο S και S[i] = 0 σε άλλη περίπτωση. Άλλος τρόπος για να παραστήσουμε σύνολα S, ξένα μεταξύ τους, είναι με τη βοήθεια των δέντρων. Παράδειγμα 4.8. Έστω U = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, S 1 = {1, 7, 8, 9}, S 2 = {2, 5, 10}, S 3 = {3, 4, 6}. Τα S 1, S 2, S 3 μπορούμε να τα παραστήσουμε όπως φαίνεται στο σχήμα 4.2. Δηλαδή κάθε κορυφή συνδέεται με τον γονέα της. Π.χ. Parent[7] = 1, στοιχείο του ίδιου συνόλου Parent[9] = 1, στοιχείο του ίδιου συνόλου Parent[10] = 2, στοιχείο του ίδιου συνόλου Parent[1] = 0, το 1 είναι ρίζα του δέντρου και χρησιμεύει σαν όνομα του συνόλου

8 44 Κεφάλαιο 4. Δομές Δεδομένων S 1 = {1, 7, 8, 9} S 2 = {2, 5, 10} S 3 = {3, 4, 6} Σχήμα 4.2: Παράσταση συνόλων ξένων μεταξύ τους με χρήση δένδρων Έστω στοιχείο a U (universe) και σύνολα S, S 1, S 2 U. Οι πιο χαρακτηριστικές πράξεις μεταξύ συνόλων είναι οι παρακάτω: Member(a, S): Ελέγχει αν το στοιχείο a ανήκει στο σύνολο S και αν αυτό ισχύει επιστρέφει true αλλιώς false. Search(a, S): Επιστρέφει ένα δείκτη στο στοιχείο a αν a S αλλιώς επιστρέφει nil. Insert(a, S): Εισάγει το στοιχείο a στο σύνολο S και επιστρέφει το σύνολο S {a}. Delete(a, S): Διαγράφει το στοιχείο a από το σύνολο S και επιστρέφει το σύνολο S \{a}. Union(S 1, S 2 ): Επιστρέφει το σύνολο S 1 S2. Υποθέτουμε ότι τα σύνολα S 1, S 2 είναι ξένα (disjoint) για να αποφύγουμε τον έλεγχο για διπλά στοιχεία. Find(a): Επιστρέφει το όνομα του συνόλου στο οποίο ανήκει το a. Υποθέτουμε ότι έχουμε διαμέριση σε ξένα σύνολα, άρα το στοιχείο a, θα ανήκει σε ένα ακριβώς σύνολο. Split(a, S): Χωρίζει το σύνολο S σε δύο σύνολα S 1, S 2 τέτοια ώστε: S 1 = {b b a b S} και S 2 = {b b > a b S} Εδώ υποθέτουμε ότι το σύνολο S είναι ένα σύνολο του οποίου τα στοιχεία έχουν μια γραμμική διάταξη ( ). Max(S), Min(S): Επιστρέφει το μεγαλύτερο ή το μικρότερο των στοιχείων του S. Υποθέτουμε πάλι γραμμική διάταξη των στοιχείων του S. Successor(a, S): Επιστρέφει το μικρότερο από τα στοιχεία του S που είναι μεγαλύτερο του a (επόμενο στοιχείο). Predecessor(a, S): Ομοίως επιστρέφει το μεγαλύτερο από τα στοιχεία του S που είναι μικρότερο του a (προηγούμενο στοιχείο). Ανάλογα λοιπόν με το ποιες λειτουργίες από τις παραπάνω χρησιμοποιούμε συχνά, φτιάχνουμε και τις κατάλληλες δομές, υλοποιώντας τα σύνολα με διάφορες τεχνικές.

9 4.3 Σύνολα - Συστήματα Εισαγωγής και Ανάκτησης Πληροφοριών Δομή λεξικού (Dictionary) Ορισμός 4.9. Ας υποθέσουμε ότι έχουμε ένα σύνολο S και θέλουμε να εκτελούνται γρήγορα οι λειτουργίες της εισαγωγής καινούργιου στοιχείου, διαγραφής παλαιού στοιχείου και ελέγχου για την ύπαρξη κάποιου στοιχείου στο S. Θέλουμε δηλαδή να εκτελείται αποδοτικά μία ακολουθία από διαδικασίες Insert, Delete και Member. Αυτή τη γενικευμένη αφηρημένη δομή δεδομένων (ADT) την ονομάζουμε λεξικό (Dictionary). Η υλοποίηση ενός λεξικού μπορεί να γίνει π.χ. με μια συνάρτηση h: universe {0,..., m 1}, που ονομάζεται συνάρτηση κατακερματισμού (hashing function). Φροντίζουμε ώστε η συνάρτηση h που διαλέγουμε να υπολογίζεται γρήγορα για οποιοδήποτε στοιχείο του καθολικού συνόλου, σε χρόνο δηλαδή O(1). Θεωρούμε ένα πίνακα A (hash table). Κάθε στοιχείο A[i] του πίνακα δείχνει σε μια λίστα η οποία περιέχει εκείνα τα στοιχεία a του καθολικού συνόλου για τα οποία ισχύει h(a) = i. Συνεπώς για να κάνουμε Insert, Delete και Member ένα στοιχείο a, αρκεί να ψάξουμε μόνο τη λίστα στην οποία δείχνει το στοιχείο A[h(a)]. Βέβαια στη χειρότερη περίπτωση, είναι πιθανόν μετά από n εισαγωγές στοιχείων, να έχουμε μια λίστα μήκους σχεδόν n (δηλαδή σχεδόν όλα τα στοιχεία να έχουν πάει στην ίδια λίστα). Σε αυτή την περίπτωση, αν χρειαστεί να εκτελέσουμε n φορές τις διαδικασίες Delete ή Member, ο χρόνος που απαιτείται είναι O(n 2 ). Αν όμως φροντίσουμε ώστε η εκλογή της συνάρτησης h να εξασφαλίζει μια όσο το δυνατό ομοιόμορφη κατανομή των στοιχείων στις λίστες, έτσι ώστε να μην υπάρχει συσσώρευση στοιχείων σε μια λίστα, τότε ο χρόνος αναζήτησης μπορεί να καλυτερεύσει σημαντικά. Για παράδειγμα, αν πρόκειται να εισαχθούν περίπου n O(m) στοιχεία, τότε τη στιγμή που εισάγεται το i-οστό στοιχείο, η λίστα στην οποία θα πρέπει να μπει θα έχει αναμενόμενο μήκος i 1 m < 1 συνεπώς η κάθε διαδικασία που θα πρέπει να διατρέξει κάποια λίστα θα χρειάζεται περίπου σταθερό χρόνο O(1) και έτσι n διαδικασίες θα χρειάζονται O(n) χρόνο περίπου. Είναι συνηθισμένο να μην γνωρίζουμε από πριν τον πληθικό αριθμό που μπορεί να έχει το σύνολό μας. Στην περίπτωση αυτή διαλέγουμε μια τιμή m για τον πίνακα (hash table, bucket table) και όταν ο αριθμός των στοιχείων γίνει μεγαλύτερος από m, δημιουργούμε ένα καινούργιο πίνακα-στήλη μεγέθους 2m και με rehashing (δηλαδή ορίζοντας μια νέα συνάρτηση με πεδίο τιμών αυτή τη φορά το [0, 2m 1]), βάζουμε τα στοιχεία στον καινούργιο πίνακα, καταστρέφοντας τον παλιό. Όταν τα στοιχεία γίνουν περισσότερα από 2m, δημιουργούμε ένα άλλο πίνακα μεγέθους 4m κ.ο.κ. Είναι σαφές ότι κάθε φορά η κατάλληλη επιλογή της συνάρτησης κατακερματισμού παίζει σπουδαίο ρόλο προκειμένου να διατηρήσουμε τους χρόνους προσπέλασης μικρούς. Παράδειγμα Έστω ότι το σύνολό μας αποτελείται από ακεραίους που μπορούν να πάρουν τιμές στο διάστημα [0, r], r > n. Τότε αν χρησιμοποιήσουμε τη συνάρτηση h(a) = a mod m, όπου m το μέγεθος του τρέχοντα πίνακα-στήλη έχουμε τα παρακάτω: Έστω ότι εισάγουμε τους αριθμούς 1, 5, 8, 3, 9, 6. Αρχικά επιλέγουμε m = 2 και έχουμε : 0 : 1 : 1, 5

10 46 Κεφάλαιο 4. Δομές Δεδομένων Σε αυτό το σημείο επιλέγουμε m = 4: Τέλος με m = 8 προκύπτει το παρακάτω: 0 : 8 1 : 1, 5 2 : 3 : 3 0 : 8 1 : 1, 9 2 : 3 : 3 4 : 5 : 5 6 : 6 7 : Δομή Union Find Ορισμός Έστω ότι έχουμε διάφορα ξένα μεταξύ τους σύνολα και μας ενδιαφέρει η αποδοτική υλοποίηση μιας ακολουθίας από διαδικασίες ένωσης (Union) συνόλων και εύρεσης του συνόλου στο οποίο ανήκει κάποιο στοιχείο (Find). Μια τέτοια δομή δεδομένων ονομάζεται δομή Union-Find. Η αναπαράσταση των συνόλων μπορεί να γίνει π.χ. με δέντρα, όπου κάθε κόμβος περιέχει ένα στοιχείο και έχει ένα pointer προς τον γονέα του. Κατά σύμβαση το όνομα του συνόλου είναι το στοιχείο που τυχαίνει να βρίσκεται στη ρίζα. Η array Parent[i], μας δίνει τον γονέα του κόμβου i και θέτουμε Parent[root]:=0. Για να βρούμε την ένωση δύο συνόλων S 1, S 2 αρκεί να μεταβάλλουμε την εγγραφή της Parent σε μια απ τις δύο ρίζες των S 1, S 2, έτσι ώστε αντί να δείχνει 0, να δείχνει στη ρίζα του άλλου δέντρου (σχήμα 4.3). Η υλοποίηση της συνάρτησης Union φαίνεται στον αλγόριθμο 4.4. S 1 S 2 Σχήμα 4.3: Η ένωση των συνόλων S 1 και S 2

11 4.3 Σύνολα - Συστήματα Εισαγωγής και Ανάκτησης Πληροφοριών 47 Η εκτέλεση της συνάρτησης Union γίνεται σε σταθερό χρόνο O(1), ενώ για την εύρεση του συνόλου S στο οποίο ανήκει το στοιχείο i, αρκεί να βρούμε τη ρίζα του δέντρου που αναπαριστά το σύνολο S. Η υλοποίηση της συνάρτησης Find φαίνεται στον αλγόριθμο 4.5. Στη χειρότερη περίπτωση, ένα εκφυλισμένο (degenarate) δέντρο μπορεί να προκύψει από την ένωση πολλών συνόλων όπως στο σχήμα 4.4. Έτσι λοιπόν ο χρόνος που χρειάζεται η Find για να διανύσει ένα μονοπάτι του συνόλου-δέντρου με n-στοιχεία-κορυφές είναι στην χειρότερη περίπτωση O(n). Συνεπώς n εκτελέσεις της Find χρειάζονται χρόνο O(n 2 ).... Σχήμα 4.4: Εκφυλισμένο δένδρο μετά από την ένωση πολλών συνόλων Μπορούμε να βελτιώσουμε αυτό το χρόνο αν λάβουμε υπόψη μας τον αριθμό των στοιχείων που έχει κάθε σύνολο και συνδέουμε κάθε φορά το σύνολο-δέντρο με τα λιγότερα στοιχεία-κόμβους σε εκείνο με τα περισσότερα, αλλάζοντας τη συνάρτηση Union (Balancing). Θέτουμε την πληροφορία του πληθικού αριθμού κάθε συνόλου σαν τιμή του γονέα της ρίζας του (P arent[root] := #elements). Ο αρνητικός αριθμός ξεχωρίζει την τιμή του γονέα της ρίζας από τα υπόλοιπα στοιχεία του συνόλου. Η νέα υλοποίηση της συνάρτησης Union φαίνεται στον αλγόριθμο 4.6. Λήμμα Ένα δέντρο που κατασκευάστηκε με τη βοήθεια του αλγόριθμου 4.6 έχει ύψος μικρότερο από log n + 1. Απόδειξη. Επαγωγική βάση: n = 1. Προφανές. Επαγωγικό βήμα: Έστω αληθές για όλα τα δέντρα με αριθμό κόμβων n 1. Έστω ότι η τελευταία εφαρμογή της διαδικασίας ήταν union(k, j) και ότι το δέντρο j είχε m κόμβους. Χωρίς βλάβη της γενικότητας 1 m n 2. Περίπτωση 1: Νέο ύψος = ύψος του δέντρου k: ύψος log(n m) + 1 log n + 1. Αλγόριθμος 4.4 Διαδικασία ένωσης (Union) function Union (i, j: integer ( set )): integer ( set ); Parent[i]:=j; return j

12 48 Κεφάλαιο 4. Δομές Δεδομένων Αλγόριθμος 4.5 Διαδικασία εύρεσης (Find) function Find (i: integer ( element )): integer ( set ); while Parent[i]>0 do i := Parent[i]; return i Αλγόριθμος 4.6 Βελτιωμένη διαδικασία ένωσης (Balancing) function Union (i, j: integer ( set )): integer ( set ); var x: integer; ( αρνητικός αριθμός στοιχείων του νέου συνόλου ) x:=parent[i]+parent[j]; if Parent[i] < Parent[j] then Parent[i]:=j; Parent[j]:=x; return j else Parent[j]:=i; Parent[i]:=x; return i Περίπτωση 2: Νέο ύψος = ύψος του δέντρου j + 1: ύψος log m + 2 log n + 2 log n Σαν αποτέλεσμα έχουμε ότι ο χρόνος που χρειάζεται μια εκτέλεση της συνάρτησης Find είναι O(log n), δηλαδή n εκτελέσεις χρειάζονται O(n log n) χρόνο. Μπορούμε να πετύχουμε μια ακόμη καλυτέρευση του χρόνου, αλλάζοντας αυτή τη φορά τη συνάρτηση Find με προσθήκη της διαδικασίας Path Compression : ένα προς ένα τα στοιχεία-κορυφές που συναντά ο αλγόριθμος στο δρόμο για τη ρίζα, τα «ξεκρεμά» από τη θέση τους και τα «κρεμάει» από τη ρίζα, με αποτέλεσμα το σύνολο-δέντρο να τείνει προοδευτικά να μετασχηματιστεί όπως στο σχήμα 4.5. Η νέα υλοποίηση της συνάρτησης Find φαίνεται στον αλγόριθμο 4.7. Σχήμα 4.5: Path compression Είναι προφανές ότι αυτός ο τρόπος συμφέρει όταν πρόκειται να εκτελεστούν πολύ περισσότερα του ενός Find. Αποδεικνύεται μάλιστα ότι n εκτελέσεις της συνάρτησης Find χρειάζονται χρόνο O(nα(n)), όπου α(n) είναι ψευδοαντίστροφη της συνάρτησης Ackermann(σχεδόν σταθερά). Η ιδέα αυτή είναι παράδειγμα αποσβεστικής αποδοτικότητας (amortization). Ένα βήμα της Path

13 4.3 Σύνολα - Συστήματα Εισαγωγής και Ανάκτησης Πληροφοριών 49 Compression κοστίζει αλλά έτσι εξοικονομείται χρόνος για κατοπινές εφαρμογές της Find. Η βελτίωση αυτή οφείλεται στον Tarjan [?]. Αλγόριθμος 4.7 Βελτιωμένη διαδικασία εύρεσης (Path compression) function Find(i: integer ( element )): integer ( set ); var j, t: integer ( element ); j := i; ( Εύρεση της ρίζας ) while Parent[j] > 0 do j := Parent[j]; ( Ξεκρέμασμα των φύλλων και κρέμασμα από τη ρίζα ) while (i j) do t := Parent[i]; Parent[i] := j; i := t ; return j Δυαδικά δέντρα αναζήτησης (binary search trees) Ένας άλλος τρόπος αναπαράστασης συνόλων με μια γραμμική διάταξη, είναι με δυαδικά δέντρα. Αυτή η δομή είναι χρήσιμη όταν έχουμε μεγάλα σύνολα και είναι ασύμφορη η χρησιμοποίηση των προηγούμενων μεθόδων. Ένα δυαδικό δέντρο αναζήτησης (binary search tree) μπορεί να υποστηρίξει αποδοτικά πράξεις όπως Insert, Delete, Member και Min απαιτώντας κατά μέσο όρο O(log n) χρόνο για κάθε διαδικασία (όπου n ο πληθάριθμος του συνόλου). Τα στοιχεία του συνόλου διατάσσονται στο δυαδικό δέντρο ως εξής: Όλα τα στοιχεία-κορυφές που βρίσκονται στο αριστερό υποδέντρο μιας κορυφής x, είναι μικρότερα από το στοιχείο που βρίσκεται στην κορυφή x ενώ τα στοιχεία του δεξιού υποδέντρου είναι μεγαλύτερα. Αυτή η συνθήκη (binary search tree property) ισχύει για όλες τις κορυφές του δέντρου (σχήμα 4.6) Σχήμα 4.6: Δυαδικό δένδρο αναζήτησης Ο έλεγχος για το αν ένα στοιχείο x ανήκει στο σύνολο γίνεται όπως παρακάτω:

14 50 Κεφάλαιο 4. Δομές Δεδομένων Συγκρίνουμε το στοιχείο x με τη ρίζα του δέντρου Αν τα στοιχεία είναι ίσα η διαδικασία τελειώνει. Αν το x είναι μικρότερο προχωράμε στο αριστερό υποδέντρο του x και επαναλαμβάνουμε τη διαδικασία. Αν το x είναι μεγαλύτερο προχωράμε στο δεξιό υποδέντρο του x και επαναλαμβάνουμε τη διαδικασία. Η συνάρτηση Member φαίνεται στο αλγόριθμο 4.8. Κάθε κόμβος περιέχει κάποιο στοιχείο του συνόλου και δύο δείκτες, ένα στο αριστερό παιδί και ένα στο δεξιό. Οι διαδικασίες Insert, RetrieveMin και Delete είναι εντελώς ανάλογες και φαίνονται στους αλγόριθμους 4.9, 4.10 και Αλγόριθμος 4.8 Συνάρτηση Member σε δυαδικό δένδρο αναζήτησης function Member(x:elementtype; A:^node):boolean; if A=Nil then return(false) else if x=a^.element then return true else if x<a^.element then return Member(x,A^.leftchild) else return Member(x,A^.rightchild) Αλγόριθμος 4.9 Συνάρτηση Insert σε δυαδικό δένδρο αναζήτησης procedure Insert(x:elementtype; var A:^node); if A=Nil then new(a); A^.element:=x; A^.leftchild:=Nil; A^.rightchild:=Nil else if x<a^.element then Insert(x,A^.leftchild) else if x>a^.element then Insert(x,A^.rightchild) ( Ανx=A^.element, τότεήδηx είναιστοα ) Ισοζυγισμένα Δέντρα (Balanced Trees) Όπως είδαμε στην προηγούμενη παράγραφο, χρησιμοποιώντας ένα δυαδικό δέντρο αναζήτησης σαν αναπαράσταση ενός συνόλου, έχουμε έναν αναμενόμενο χρόνο (average-case complexity)

15 4.3 Σύνολα - Συστήματα Εισαγωγής και Ανάκτησης Πληροφοριών 51 Αλγόριθμος 4.10 Συνάρτηση RetrieveMin σε δυαδικό δένδρο αναζήτησης function RetrieveMin(var A:^node):elementttype; (* Επιστρέφει, διαγράφοντας από το σύνολο Α το μικρότερο στοιχείο του *) if A^.leftchild=Nil then ( Το Α δείχνει στο μικρότερο στοιχείο ) return A^.element; A:=A^.rightchild else return RetrieveMin(A^.leftchild) Αλγόριθμος 4.11 Συνάρτηση Delete σε δυαδικό δένδρο αναζήτησης procedure Delete(x:elementtype; var A:^node); if A<>Nil then if x<a^.element then Delete(x, A^.leftchild) else if x>a^.element then Delete(x,A^.rightchild) else (* x=a^.element *) if A^.leftchild=Nil then A:=A^.rightchild else if A^.rightchild=Nil then A:=A^.leftchild else ( ο κόμβος με το x έχει 2 παιδιά ) A^.element := RetrieveMin(A^.rightchild) O(log n) για κάθε προσπέλαση. Στη χειρότερη περίπτωση όμως, αν εισάγουμε συνεχώς στοιχεία στο σύνολό μας, μπορεί να καταλήξουμε σε εκφυλισμένο δέντρο του οποίου το ύψος προσεγγίζει τον αριθμό των κορυφών του. Έτσι μια προσπέλαση σε αυτό το δέντρο χρειάζεται χρόνο O(n). Έχουν αναπτυχθεί διάφορες τεχνικές που φροντίζουν να διατηρούν το δέντρο ισοζυγισμένο (balanced) κατά τη διάρκεια διαφόρων διαδικασιών που το μεταβάλλουν (Insert, Delete κ.α.). Δύο από αυτές τις τεχνικές είναι τα 2-3 trees και τα AVL trees 2. Ορισμός Το 2-3 tree είναι ένα δέντρο στο οποίο κάθε κορυφή που δεν είναι φύλλο έχει δύο ή τρία παιδιά και κάθε μονοπάτι από τη ρίζα σε ένα φύλλο έχει το ίδιο μήκος. Τα στοιχεία εισάγονται σε ένα 2-3 tree συνήθως ως εξής: Κάθε εσωτερική κορυφή έχει δύο θέσεις. Στην αριστερή θέση εισάγεται το μεγαλύτερο από τα στοιχεία του υποδέντρου που έχει ρίζα το αριστερό παιδί της κορυφής αυτής, στοιχείο που (πρέπει να) είναι και μικρότερο ή ίσο από τα στοιχεία των υπόλοιπων παιδιών. 2 Το όνομα AVL προέρχεται από τα αρχικά των δημιουργών του Adelson-Velskii-Landis (1962)

16 52 Κεφάλαιο 4. Δομές Δεδομένων Στη δεξιά θέση εισάγεται το μεγαλύτερο από τα στοιχεία του μεσαίου υποδέντρου, που (πρέπει να) είναι και μικρότερο ή ίσο από τα στοιχεία δεξιού υποδέντρου. Τα φύλλα του δέντρου περιέχουν τα στοιχεία του συνόλου (σχήμα 4.7) Σχήμα 4.7: 2-3 δένδρο Ορισμός Το AVL tree είναι ένα δυαδικό δέντρο αναζήτησης με την εξής ιδιότητα, το ύψος του αριστερού και του δεξιού υποδέντρου κάθε κορυφής, διαφέρουν το πολύ κατά 1. Σχήμα 4.8: Το δένδρο δεν είναι AVL εξαιτίας της σημειωμένης κορυφής Παράδειγμα Το δέντρο στο σχήμα 4.8 δεν είναι AVL tree διότι η σημειωμένη κορυφή έχει ένα αριστερό υποδέντρο ύψους 0 και ένα δεξιό υποδέντρο ύψους 2. Παρ όλα αυτά η ιδιότητα του AVL tree ισχύει σε κάθε άλλη κορυφή. Οι διαδικασίες αναπτύσσονται έτσι ώστε να διατηρούν τη μία ή την άλλη δομή, με συνέπεια η προσπέλαση στα δέντρα να γίνεται στη χειρότερη περίπτωση (worst-case complexity) σε χρόνο O(log n). 4.4 Διαδραστικό υλικό - Σύνδεσμοι Στην σελίδα θα βρείτε οπτικοποιήσεις δομών δεδομένων με γραφικά. Στην σελίδα υπάρχουν υλοποιήσεις δομών δεδομένων σε C++ και Java.

17 4.5 Ασκήσεις 53 Η σελίδα είναι κεντρικός κόμβος για πληροφορίες, νέα και βιβλιογραφία στην Θεωρία Γραφημάτων. Εδώ μπορείτε να βρείτε υλοποιήσεις σε Python αναπαραστάσεων και βασικών λειτουργιών γραφημάτων. 4.5 Ασκήσεις 1. Για τo παρακάτω σύνολο αριθμών, εκτελέστε τα στάδια κατασκευής σωρού για τους δύο αλγορίθμους heap combine και heap insert: {x, y, z, w, 14, 5, 6, 15, 8, 7, 6, 1, 3} όπου x, y, z, w είναι τα τέσσερα τελευταία ψηφία του αριθμού ταυτότητάς σας. Δείξτε τα στάδια εκτέλεσης με σχήματα. 2. Πόσα βήματα χρειάζεται ο αλγόριθμος heapsort για να ταξινομήσει ένα διάνυσμα με: ήδη ταξινομημένα στοιχεία κατά αύξουσα σειρά; ήδη ταξινομημένα στοιχεία κατα φθίνουσα σειρά; 3. Δείξτε ότι στη χειρότερη περίπτωση ο αλγόριθμος heapsort έχει πολυπλοκότητα Ω (n log n). 4. Σε έναν κατευθυνόμενο γράφο, ένας κόμβος με indegree μηδέν λέγεται πηγή. (α) Αποδείξτε ότι σε κάθε ακυκλικό κατευθυνόμενο γράφο υπάρχει τουλάχιστον μία πηγή. (β) Δείξτε ότι ένας κατευθυνόμενος γράφος με n κόμβους είναι ακυκλικός αν και μόνο αν μπορούμε να τοποθετήσουμε ετικέτες 1, 2,..., n στους κόμβους ώστε όλες οι ακμές να κατευθύνονται από κόμβο με μικρότερη ετικέτα σε κόμβο με μεγαλύτερη ετικέτα. (γ) Περιγράψτε πολυωνυμικό αλγόριθμο που να αποφαίνεται αν ένας κατευθυνόμενος γράφος είναι ακυκλικός. 5. Σχεδιάστε συνάρτηση που με είσοδο ένα δυαδικό δέντρο αναζήτησης και αριθμό x, επιστρέφει δείκτη στον μεγαλύτερο αριθμό στο δέντρο που είναι μικρότερος του x ή nil αν δεν υπάρχει τέτοιος αριθμός. 6. Σχεδιάστε συνάρτηση που να συνδυάζει σωστά δύο δυαδικά δέντρα αναζήτησης. 7. Σχεδιάστε τις συναρτήσεις Insert και RetrieveMin για 2-3 tree. 8. Σχεδιάστε τη συνάρτηση Delete για AVL tree.

18 .

19 Βιβλιογραφία [1] Thomas Cormen, Charles Leiserson, Ronald Rivest and Cliff Stein, Introduction to Algorithms, 3rd edition, MIT Press, [2] C.L. Liu. Στοιχεία Διακριτών Μαθηματικών (απόδοση στα Ελληνικά: Κ. Μπους και Δ. Γραμμένος). Πανεπιστημιακές Εκδόσεις Κρήτης, [3] Γεώργιος Γεωργακόπουλος, Δομές Δεδομένων, Πανεπιστημιακές Εκδόσεις Κρήτης, 2002, [4] Παναγιώτης Μποζάνης, Δομές δεδομένων, Χ, Τζιόλας,

20 .

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Κεφάλαιο 11 Ένωση Ξένων Συνόλων Κεφάλαιο 11 Ένωση Ξένων Συνόλων Περιεχόμενα 11.1 Εισαγωγή... 227 11.2 Εφαρμογή στο Πρόβλημα της Συνεκτικότητας... 228 11.3 Δομή Ξένων Συνόλων με Συνδεδεμένες Λίστες... 229 11.4 Δομή Ξένων Συνόλων με Ανοδικά

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ Ουρές Προτεραιότητας (Priority Queues) Θεωρούµε ότι τα προς αποθήκευση στοιχεία έχουν κάποια διάταξη (καθένα έχει µια προτεραιότητα). Τα προς αποθήκευση στοιχεία είναι

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2016-17 Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα) http://mixstef.github.io/courses/csintro/ Μ.Στεφανιδάκης Αφηρημένες

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Φεβρουαρίου 0 / ένδρα Ενα δένδρο είναι

Διαβάστε περισσότερα

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

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας Περιεχόμενα 14.1 Διωνυμικά Δένδρα... 255 14.2 Διωνυμικές Ουρές... 258 14.1.1 Εισαγωγή στοιχείου σε διωνυμική ουρά... 258 14.1.2 Διαγραφή μεγίστου από διωνυμική

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Δέντρα ΙΙ -Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης(ΔΔΑ) - Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου - Εισαγωγή

Διαβάστε περισσότερα

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

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα Ουρές Προτεραιότητας ΗΥ4 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Μέρος 4 Αλγόριθμοι Ταξινόμησης Μέρος 4 Μανόλης Κουμπαράκης Δομές Δεδομένων και Τεχνικές 1 Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Οι αλγόριθμοι ταξινόμησης που είδαμε μέχρι τώρα αποφασίζουν πώς να

Διαβάστε περισσότερα

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης (ΔΔΑ) Εύρεση Τυχαίου, Μέγιστου, Μικρότερου στοιχείου Εισαγωγή στοιχείου

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 22: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Δυαδικά Δένδρα - Δυαδικά Δένδρα Αναζήτησης - Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου

Διαβάστε περισσότερα

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

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα 7 Ουρές Προτεραιότητας ΗΥ240 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type).

Διαβάστε περισσότερα

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

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 7: Δυαδικά Δέντρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυαδικά Δένδρα Δυαδικά Δένδρα Αναζήτησης Πράξεις Εισαγωγής, Εύρεσης Στοιχείου, Διαγραφής Μικρότερου Στοιχείου Διδάσκων:

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ουρά Προτεραιότητας (priority queue) Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει δύο βασικές λειτουργίες : Εισαγωγή στοιχείου με δεδομένο κλειδί. Επιστροφή ενός στοιχείου με μέγιστο (ή ελάχιστο) κλειδί και διαγραφή

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Κεφάλαιο 6 Ουρές Προτεραιότητας Κεφάλαιο 6 Ουρές Προτεραιότητας Περιεχόμενα 6.1 Ο αφηρημένος τύπος δεδομένων ουράς προτεραιότητας... 114 6.2 Ουρές προτεραιότητας με στοιχειώδεις δομές δεδομένων... 115 6.3 Δυαδικός σωρός... 116 6.3.1

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη (Union-Find) ΗΥ240 - Παναγιώτα Φατούρου 1 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης Έστω ότι S 1,, S k είναι ξένα υποσύνολα ενός συνόλου U, δηλαδή

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ουρά Προτεραιότητας (priority queue) Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει τις ακόλουθες λειτουργίες PQinsert : εισαγωγή στοιχείου PQdelmax : επιστροφή του στοιχείου με το μεγαλύτερο* κλειδί και διαγραφή του

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Κατακερματισμός Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Λεξικό Dictionary Ένα λεξικό (dictionary) είναι ένας αφηρημένος τύπος δεδομένων (ΑΤΔ) που διατηρεί

Διαβάστε περισσότερα

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα). Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Διαβάστε περισσότερα

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

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Cuckoo Hashing Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο β Πολυτεχνείο Πρόβλημα (ADT) Λεξικού υναμικά μεταβαλλόμενη συλλογή αντικειμένων που αναγνωρίζονται με «κλειδί» (π.χ.

Διαβάστε περισσότερα

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Οι ερωτήσεις µε κίτρινη υπογράµµιση είναι εκτός ύλης για φέτος) ΕΙΣΑΓΩΓΗ Q1. Οι Πρωταρχικοί τύποι (primitive types) στη Java 1. Είναι όλοι οι ακέραιοι και όλοι οι πραγµατικοί

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Δέντρα Αναζήτησης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Αναζήτηση Θέλουμε να διατηρήσουμε αντικείμενα με κλειδιά και να μπορούμε εκτός από

Διαβάστε περισσότερα

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

Διαβάστε περισσότερα

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και

Διαβάστε περισσότερα

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

Αλγόριθμοι και Πολυπλοκότητα Αλγόριθμοι και Πολυπλοκότητα Ανάλυση Αλγορίθμων Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανάλυση Αλγορίθμων Η ανάλυση αλγορίθμων περιλαμβάνει τη διερεύνηση του τρόπου

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση

Διαβάστε περισσότερα

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

Διδάσκων: Κωνσταντίνος Κώστα Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος

Διαβάστε περισσότερα

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

Κεφάλαιο 10 Ψηφιακά Λεξικά Κεφάλαιο 10 Ψηφιακά Λεξικά Περιεχόμενα 10.1 Εισαγωγή... 213 10.2 Ψηφιακά Δένδρα... 214 10.3 Υλοποίηση σε Java... 222 10.4 Συμπιεσμένα και τριαδικά ψηφιακά δένδρα... 223 Ασκήσεις... 225 Βιβλιογραφία...

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 6. Δυαδικά Δέντρα 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 18/11/2016 Εισαγωγή Τα

Διαβάστε περισσότερα

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

1η Σειρά Γραπτών Ασκήσεων 1/20 Ασυμπτωτικός Συμβολισμός, Αναδρομικές Σχέσεις 1η Σειρά Γραπτών Ασκήσεων Αλγόριθμοι και Πολυπλοκότητα ΣΗΜΜΥ, Εθνικό Μετσόβιο Πολυτεχνείο 1 Ασυμπτωτικός Συμβολισμός, Αναδρομικές Σχέσεις 2 3 4 5 2/20

Διαβάστε περισσότερα

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Στοίβες Ουρές Στοίβες: Βασικές Έννοιες. Ουρές: Βασικές Έννοιες. Βασικές Λειτουργίες. Παραδείγματα. Στοίβες Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη

Διαβάστε περισσότερα

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ Δομές Δεδομένων Τι θα δούμε Ουρές προτεραιότητας Πράξεις Διωνυμικές Ουρές Διωνυμικά Δέντρα Διωνυμικοί Σωροί Ουρές Fibonacci Αναπαράσταση Πράξεις Ανάλυση Συγκρίσεις Ουρές προτεραιότητας

Διαβάστε περισσότερα

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων Κ Σ Ι Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων Παναγιώτα Παναγοπούλου Άσκηση 1. Υποθέστε ότι οι διεργασίες ενός σύγχρονου κατανεμημένου συστήματος έχουν μοναδικές ταυτότητες (UIDs), γνωρίζουν ότι είναι συνδεδεμένες

Διαβάστε περισσότερα

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

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i. Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

Διαβάστε περισσότερα

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Μια δομή δεδομένων στην πληροφορική, συχνά αναπαριστά οντότητες του φυσικού κόσμου στον υπολογιστή. Για την αναπαράσταση αυτή, δημιουργούμε πρώτα ένα αφηρημένο μοντέλο στο οποίο προσδιορίζονται

Διαβάστε περισσότερα

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση Κεφάλαιο 13 Αντισταθμιστική Ανάλυση Περιεχόμενα 13.1 Αντισταθμιστική Ανάλυση... 248 13.2 Μέθοδοι Αντισταθμιστικής Ανάλυσης... 250 13.2.1 Η χρεωπιστωτική μέθοδος... 250 13.2.2 Η ενεργειακή μέθοδος... 251

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι - Πίνακες 1 Πίνακες Οι πίνακες έχουν σταθερό μέγεθος και τύπο δεδομένων. Βασικά πλεονεκτήματά τους είναι η απλότητα προγραμματισμού τους και η ταχύτητα. Ωστόσο δεν παρέχουν την ευελιξία η οποία απαιτείται

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

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

Κατανεμημένα Συστήματα Ι Κατανεμημένα Συστήματα Ι Εκλογή αρχηγού και κατασκευή BFS δένδρου σε σύγχρονο γενικό δίκτυο Παναγιώτα Παναγοπούλου Περίληψη Εκλογή αρχηγού σε γενικά δίκτυα Ορισμός του προβλήματος Ο αλγόριθμος FloodMax

Διαβάστε περισσότερα

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

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, ορισμοί, πράξεις και αναπαράσταση στη μνήμη ΔυαδικάΔένδρακαιΔυαδικάΔένδραΑναζήτησης ΕΠΛ 231 Δομές

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Δομές Δεδομένων Ενότητα 1 - Εισαγωγή Χρήστος Γκουμόπουλος Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Αντικείμενο μαθήματος Δομές Δεδομένων (ΔΔ): Στην επιστήμη υπολογιστών

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ ΗΥ240 - Παναγιώτα Φατούρου 1 Σύνολα (Sets) q Τα µέλη ενός συνόλου προέρχονται από κάποιο χώρο U (universe) αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών σύνολα

Διαβάστε περισσότερα

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

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4.0 Επιλογή Αλγόριθμοι Επιλογής Select και Quick-Select Σταύρος Δ. Νικολόπουλος 2016-17 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros

Διαβάστε περισσότερα

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

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα.0 Σταύρος Δ. Νικολόπουλος 06-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Ταξινόμηση Selection-Sort Bubble-Sort και

Διαβάστε περισσότερα

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης Σύνοψη Προηγούμενου Πίνακες (Arrays Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς Διαδικαστικά θέματα. Aντικείμενο Μαθήματος. Aντικείμενα, Κλάσεις, Μέθοδοι, Μεταβλητές.

Διαβάστε περισσότερα

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Insert(K,I,S) Delete(K,S) ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ & ΛΕΞΙΚΑ Φατούρου Παναγιώτα 1 Σύνολα (Sets) Τα µέλη ενός συνόλου προέρχονται από κάποιο χώρο αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών αποτελούµενα από έναν αριθµό και

Διαβάστε περισσότερα

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων (Data Structures) Δομές Δεδομένων (Data Structures) Γραμμικές Λίστες Βασικές Έννοιες Βασικές Έννοιες. Αναπαράσταση με τύπο και με δείκτη. Γραμμικές Λίστες. Βασικές Λειτουργίες. Δομές Δεδομένων: Βασικές Έννοιες Αντικείμενο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης Ουρές Προτεραιότητας: Υπενθύμιση Σωροί / Αναδρομή / Ταξινόμηση Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς (Abstract Data Type) με μεθόδους: Μπορεί να υλοποιηθεί με

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Γραφήματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Γραφήματα Κατευθυνόμενο Γράφημα Ένα κατευθυνόμενο γράφημα G είναι ένα ζευγάρι (V, E) όπου V είναι ένα

Διαβάστε περισσότερα

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ Δομές Δεδομένων Παπαγιαννόπουλος Δημήτριος 30 Μαρτίου 2017 18 Μαΐου 2017 papagianno@ceid.upatras.gr 1 Περιεχόμενα Ουρές προτεραιότητας Πράξεις Διωνυμικές Ουρές Διωνυμικά Δέντρα Διωνυμικοί

Διαβάστε περισσότερα

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

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Υλικό από τις σηµειώσεις Ν. Παπασπύρου, 2006 Δέντρα δυαδικής αναζήτησης Δενδρικές δοµές δεδοµένων στις οποίες Όλα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Ενότητα 3η Εισαγωγή στους Αλγορίθμους Ενότητα 3η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort 1, c 3, a 3, b 7, d 7, g 7, e B 0 1 3 4 5 6 7 8 9 1 BucketSort (Ταξινόμηση Κάδου) - Αρχικά θεωρείται ένα κριτήριο κατανομής με βάση το οποίο

Διαβάστε περισσότερα

Δομές Δεδομένων Ενότητα 4

Δομές Δεδομένων Ενότητα 4 ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Ενότητα 4: Ουρές Απόστολος Παπαδόπουλος Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 12/10/2017

Διαβάστε περισσότερα

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του

Διαβάστε περισσότερα

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 9-1 Ουρά προτεραιότητας

Διαβάστε περισσότερα

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

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

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

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND) ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND) Ένωση Ξένων Συνόλων (Disjoint Sets with Union) S 1,, S k : ξένα υποσύνολα ενός συνόλου U δηλ., S i S j =, αν i j, και S 1 S k = U. Λειτουργίες που θέλουµε

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Εισαγωγή στους Αλγορίθμους Ενότητα 3η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Απλοί Αλγόριθμοι & Δομές Δεδομένων Δύο Απλές

Διαβάστε περισσότερα

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

Δημιουργία Δυαδικών Δέντρων Αναζήτησης Δημιουργία Δυαδικών Δέντρων Αναζήτησης Τα Δυαδικά δέντρα αναζήτησης είναι διατεταγμένα δυαδικά δέντρα όπου έχει σημασία η διάταξη των παιδιών κάθε κόμβου. Συγκεκριμένα για τα Δυαδικά δέντρα αναζήτησης,

Διαβάστε περισσότερα

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

Κατανεμημένα Συστήματα Ι Εκλογή αρχηγού σε γενικά δίκτυα 20 Οκτωβρίου 2016 Παναγιώτα Παναγοπούλου Εκλογή αρχηγού σε γενικά δίκτυα Προηγούμενη διάλεξη Σύγχρονα Κατανεμημένα Συστήματα Μοντελοποίηση συστήματος Πρόβλημα εκλογής αρχηγού

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Πρόβληµα (ADT) Λεξικού. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Λεξικό, Union - Find 2 Πρόβληµα (ADT) Λεξικού Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Λεξικό, Union - Find 2 Πρόβληµα (ADT) Λεξικού Δυναµικά µεταβαλλόµενη συλλογή αντικειµένων που αναγνωρίζονται µε κλειδί (π.χ. κατάλογοι,

Διαβάστε περισσότερα

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

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems Ημερομηνία Παράδοσης: 0/1/017 την ώρα του μαθήματος ή με email: mkarabin@csd.uoc.gr Γενικές Οδηγίες α) Επιτρέπεται η αναζήτηση στο Internet και στην βιβλιοθήκη

Διαβάστε περισσότερα

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

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Γιάννης Κουτσονίκος Επίκουρος Καθηγητής Οργάνωση Δεδομένων Δομή Δεδομένων: τεχνική οργάνωσης των δεδομένων με σκοπό την

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 21/10/2016

Διαβάστε περισσότερα

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

ΠΛΕ075: Προηγμένη Σχεδίαση Αλγορίθμων και Δομών Δεδομένων. Λουκάς Γεωργιάδης

ΠΛΕ075: Προηγμένη Σχεδίαση Αλγορίθμων και Δομών Δεδομένων. Λουκάς Γεωργιάδης ΠΛΕ075: Προηγμένη Σχεδίαση Αλγορίθμων και Δομών Δεδομένων Λουκάς Γεωργιάδης loukas@cs.uoi.gr www.cs.uoi.gr/~loukas Βασικές έννοιες και εφαρμογές Αλγόριθμος: Μέθοδος για την επίλυση ενός προβλήματος Δομή

Διαβάστε περισσότερα

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

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης Περιεχόμενα 7.1 Ο αφηρημένος τύπος δεδομένων λεξικού... 133 7.1.1 Διατεταγμένα λεξικά... 134 7.2 Στοιχειώδεις υλοποιήσεις με πίνακες και λίστες... 135 7.2.1

Διαβάστε περισσότερα

Πληροφορική 2. Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι Πληροφορική 2 Αλγόριθμοι 1 2 Τι είναι αλγόριθμος; Αλγόριθμος είναι ένα διατεταγμένο σύνολο από σαφή βήματα το οποίο παράγει κάποιο αποτέλεσμα και τερματίζεται σε πεπερασμένο χρόνο. Ο αλγόριθμος δέχεται

Διαβάστε περισσότερα

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

Αλγόριθμοι και Πολυπλοκότητα Αλγόριθμοι και Πολυπλοκότητα Άπληστοι Αλγόριθμοι Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Άπληστοι Αλγόριθμοι Είναι δύσκολο να ορίσουμε ακριβώς την έννοια του άπληστου

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά και Πληροφορικής Μαθηματικά Πανεπιστήμιο ΙΙ Ιωαννίνων

Διαβάστε περισσότερα

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ Δομές Δεδομένων (Εργ.) Ακ. Έτος 2017-18 Διδάσκων: Ευάγγελος Σπύρου Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης 1. Στόχος του εργαστηρίου Στόχος του δέκατου εργαστηρίου

Διαβάστε περισσότερα