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

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

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

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

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

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

Λίστες παράλειψης (skip lists)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αναδρομικοί Αλγόριθμοι

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δοµές Δεδοµένων. 12η Διάλεξη Διάσχιση Δέντρων και Ουρές Προτεραιότητας. Ε. Μαρκάκης

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

AVL-trees C++ implementation

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

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

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

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

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

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

Πληροφορική 2. Δομές δεδομένων και αρχείων

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

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

4. Συνδεδεμένες Λίστες

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

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

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

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

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

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

Συνδεδεμένη Λίστα (Linked List)

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

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

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Συγκρίσιμα Αντικείμενα (comparable)

Προγραμματιστικές Τεχνικές

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

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

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

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

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

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

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

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

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

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

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

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

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

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

Κεφάλαιο 8.6. Πίνακες ΙI ( ιάλεξη 16) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

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

Περιεχόμενα. Πρόλογος... 21

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

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

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Transcript:

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

Περίληψη Πίνακες συµβόλων Διεπαφή πίνακα συµβόλων Αναζήτηση µε αριθµοδείκτη Ακολουθιακή αναζήτηση Δυαδική αναζήτηση Δοµές Δεδοµένων 12-2

Πίνακες συµβόλων Αναζήτηση και ανάκτηση πληροφοριών Από τα πιο στοιχειώδη προβλήµατα στην πληροφορική Ιδιαίτερα στις µέρες µας (µηχανές αναζήτησης, βάσεις δεδοµένων,...) Απαιτήσεις Αποδοτικές δοµές δεδοµένων για την αποθήκευση των στοιχείων Ταχύτητα ανάκτησης (δηλαδή γρήγορο search) Πληθώρα εφαρµογών Μηχανές αναζήτησης Δηµόσιες υπηρεσίες, Εφορία, τράπεζες (διαχείριση λογαριασµών) Ηλεκτρονικές κρατήσεις (π.χ. εισιτηρίων) Λεξικά, ευρετήρια Mεταγλωττιστές Δροµολόγηση Δοµές Δεδοµένων 12-3

Διεπαφή πίνακα συµβόλων Ορισµός πίνακα συµβόλων (symbol table) Είναι οποιαδήποτε δοµή δεδοµένων που περιέχει στοιχεία µε κλειδιά και υποστηρίζει τις εξής λειτουργίες: Εισαγωγή νέου στοιχείου µε κάποιο κλειδί Επιστροφή στοιχείου µε κάποιο δοσµένο κλειδί (αναζήτηση) Ονοµάζεται και λεξικό (dictionary) Τα έντυπα λεξικά είναι πάντα ταξινοµηµένα Τα ηλεκτρονικά λεξικά δεν είναι απαραίτητα ταξινοµηµένα Διάφορες υλοποιήσεις Ταξινοµηµένοι ή αταξινόµητοι πίνακες ή λίστες (βαρετό!) Δέντρα αναζήτησης, δυαδικά ή µε µεγαλύτερο βαθµό (πιο ενδιαφέρον) Πίνακες κατακερµατισµού (ακόµα πιο ενδιαφέρον!) Άλλες υποστηριζόµενες λειτουργίες Αφαίρεση, επιλογή k-οστού στοιχείου, ταξινόµηση, ένωση Δοµές Δεδοµένων 12-4

Διεπαφή πίνακα συµβόλων Γενική µορφή στοιχείων και κλειδιών Κάνει τις υλοποιήσεις πιο γενικές Ένας πίνακας συµβόλων περιέχει στοιχεία (π.χ. αντικείµενα µε όλες τις πληροφορίες ενός πελάτη µιας τράπεζας) Κάθε στοιχείο περιέχει ένα κλειδί (που είναι συγκρίσιµο) µε πρόσβαση µεσω της µεθόδου key() interface ITEM { KEY key(); /*µέθοδος πρόσβασης στο κλειδί */ } interface KEY { boolean less(key v); boolean equals(key v); } Εναλλακτικά αντί για less και equals, µπορούµε να έχουµε τριµερή σύγκριση (µικρότερο, ίσο, µεγαλύτερο) int compareto(key v); Επιστρέφει 1 αν το κλειδί > v, 0 αν είναι ίσα και -1 διαφορετικά Δοµές Δεδοµένων 12-5

Διεπαφή πίνακα συµβόλων Διεπαφή τάξης στοιχείων / κλειδιών Οι πίνακες συµβόλων χρησιµοποιούν µόνο αυτή τη διεπαφή Δηµιουργία στοιχείων / κλειδιών µε δύο τρόπους class myitem implements ITEM { } public KEY key()...//µπορούµε να προσθέσουµε και άλλες λειτουργίες εδώ class mykey implements KEY { } public boolean less(mykey) public boolean equals(mykey)...//και ό,τι άλλο θέλουµε εδώ Δοµές Δεδοµένων 12-6

Διεπαφή πίνακα συµβόλων Παράδειγµα υλοποίησης κλειδιών Τα κλειδιά είναι ακέραιες τιµές class mykey implements KEY { private int val; //η τιµή του κλειδιού public boolean less(key w) { return val < ((mykey) w).val; } public boolean equals(key w) { return val == ((mykey) w).val; } //παραδείγµατα extra λειτουργιών } public void read() { val = In.getInt(); } public void rand() { val = (int) (M * Math.random()); }//Μ=µέγιστη τιµή Δοµές Δεδοµένων 12-7

Διεπαφή πίνακα συµβόλων Παράδειγµα υλοποίησης στοιχείων Στοιχεία µε έναν πραγµατικό αριθµό (π.χ. υπόλοιπο λογαριασµού) Τα κλειδιά είναι ακέραιες τιµές, π.χ. ΑΦΜ (υλοποιούνται χωριστά) class myitem implements ITEM { private mykey bankkey; private float balance; myitem() { bankkey = new mykey(); } public KEY key() { return bankkey; } void read() { bankkey.read(); balance = In.getFloat(); } } Δοµές Δεδοµένων 12-8

Διεπαφή πίνακα συµβόλων Παράδειγµα απλούστερης υλοποίησης στοιχείων Όταν τα κλειδιά είναι στοιχειώδεις τύποι δεδοµένων, µπορούµε να αποφύγουµε την υλοποίηση της KEY Μικρότερο κόστος αλλά και µικρότερη ευελιξία class intkeyitem { private int val; private float info; public int key() { return val; }//επιστρέφει ακέραιο, όχι KEY void read() { } val = In.getInt(); info = In.getFloat(); } Δοµές Δεδοµένων 12-9

Διεπαφή πίνακα συµβόλων Διεπαφή του ίδιου του πίνακα συµβόλων Χρησιµοποιούµε ένα µέγιστο µέγεθος στον κατασκευαστή Βολικό στις υλοποιήσεις µε πίνακα class ST { } ST(int) int count() //µετρά τον αριθµό των ενεργών στοιχείων του πίνακα void insert(item) ITEM search(key) void remove(key) ITEM select(int) //επιστροφή k-οστού µικρότερου (ή µεγαλύτερου) Δοµές Δεδοµένων 12-10

Διεπαφή πίνακα συµβόλων Χειρισµός διπλών κλειδιών Η διεπαφή δεν διευκρινίζει τι γίνεται µε τα διπλά κλειδιά Σε ορισµένες περιπτώσεις δεν επιτρέπονται διπλά κλειδιά Τι γίνεται όµως αν επιτρέπονται; Πρώτη προσέγγιση: µία καταχώρηση ανά κλειδί Χρήση λίστας για τα στοιχεία µε το ίδιο κλειδί Βολική όταν θέλουµε να βρίσκουµε τα στοιχεία µε ίδιο κλειδί Δεύτερη προσέγγιση: πολλές καταχωρήσεις ανά κλειδί Επιστρέφουµε οποιαδήποτε από αυτές στην αναζήτηση Μπορεί η δοµή να χρειάζεται τροποποίηση Επιλογή υλοποίησης Κάθε υλοποίηση βελτιστοποιεί συγκεκριµένες πράξεις Δοµές Δεδοµένων 12-11

Αναζήτηση µε αριθµοδείκτη Κατάλληλη όταν τα κλειδιά είναι µικροί ακέραιοι Χρήση ενός πίνακα µε αριθµοδείκτες τα κλειδιά Οι θέσεις του πίνακα δείχνουν σε στοιχεία ή σε null Υλοποίηση εισαγωγής: αποθήκευση στοιχείου µε κλειδί i στη θέση st[i] Αναζήτηση κλειδιού i: επιστροφή θέσης i Αφαίρεση κλειδιού i: τοποθέτηση null στη θέση st[i] Καταµέτρηση και εκτύπωση µε σάρωση του πίνακα Σε κάποιες περιπτώσεις µπορούµε να έχουµε πίνακα από bits bit k = 0: δεν έχει εισαχθεί το κλειδί k, διαφορετικά bit k = 1 Δοµές Δεδοµένων 12-12

Αναζήτηση µε αριθµοδείκτη Ανάλυση κόστους Έστω ότι τα κλειδιά είναι N θετικοί ακέραιοι < M Εισαγωγή, αναζήτηση και αφαίρεση: σταθερό κόστος O(1) Ταξινόµηση και επιλογή k-οστού: M βήµατα Υπενθύµιση: ταξινόµηση µε αριθµοδείκτη είναι Ο(Μ) όταν τα κλειδιά είναι όλα ακέραιοι Μ Δοµές Δεδοµένων 12-13

Ακολουθιακή αναζήτηση Αν δεν µπορούµε να χρησιµοποιήσουµε τα κλειδιά ως αριθµοδείκτες: Χρήση ταξινοµηµένου πίνακα Η εισαγωγή απαιτεί µετακίνηση στοιχείων για να µπει στη σωστή θέση το στοιχείο Η αναζήτηση απαιτεί σάρωση στοιχείων Σταµατάµε όταν βρούµε ίσο ή µεγαλύτερο κλειδί Απλή υλοποίηση της επιλογής k-οστού Αφαίρεση ανάλογη µε την εισαγωγή (πρέπει ο πίνακας να παραµείνει ταξινοµηµένος) Δοµές Δεδοµένων 12-14

Ακολουθιακή αναζήτηση Θέµατα αναπαράστασης στοιχείων / κλειδιών Έστω ότι έχουµε στοιχεία ITEM που περιέχουν ένα double και ένα ακέραιο κλειδί Επιλογές: Παράλληλοι πίνακες Τάξη στοιχείων µε δύο πεδία Τάξη στοιχείων και τάξη κλειδιών (για στοιχειώδεις τύπους η υλοποίηση ITEM και ΚΕΥ κοστίζει πολύ) 2 δείκτες για την προσπέλαση του κλειδιού Αυξανόµενη γενικότητα Αυξανόµενο κόστος Δοµές Δεδοµένων 12-15

Ακολουθιακή αναζήτηση (µε ταξινοµηµένο πίνακα) class ST { private ITEM[] st; private int N = 0; ST(int maxn) { st = new ITEM[maxN]; } void insert(item x) { int i = N++; KEY v = x.key(); while (i > 0 && less(v, st[i-1].key())) { st[i] = x; } ITEM search(key key) { st[i] = st[i-1]; i--; } int i = 0; for ( ; i < N; i++) if (!less(st[i].key(), key)) break; if (i == N) return null; if (equals(key, st[i].key())) return st[i]; return null; } } ITEM select(int k) {return st[k];} int count() {return N;} Δοµές Δεδοµένων 12-16

Ακολουθιακή αναζήτηση Χρήση αταξινόµητου πίνακα Πιο γρήγορη εισαγωγή (στο τέλος) Πιο αργή αναζήτηση (πιθανή σάρωση όλου του πίνακα) Πιο γρήγορη αφαίρεση (µε ανταλλαγή µε το τελευταίο στοιχείο), πιο αργή επιλογή Χρήση συνδεδεµένης λίστας Ταξινοµηµένη ή αταξινόµητη Ανάλογα πλεονεκτήµατα και µειονεκτήµατα µε τους πίνακες Η λίστα διευκολύνει την ταξινοµηµένη εισαγωγή Κόστος (χρόνος και χώρος) διαχείρισης δεικτών Ταξινοµηµένη ή αταξινόµητη δοµή; Εξαρτάται από την εφαρµογή Αν είναι πιο συχνή η εισαγωγή, τότε αταξινόµητη Αν είναι πιο συχνή η αναζήτηση, τότε ταξινοµηµένη Δοµές Δεδοµένων 12-17

Ακολουθιακή αναζήτηση Υλοποίηση µε αταξινόµητη λίστα class ST { private class Node { ITEM item; Node next; Node(ITEM x, Node t) { item = x; next = t; } } private Node head; private int N; ST(int maxn) { head = null; N = 0; } int count() { return N; } void insert(item x) { head = new Node(x, head); N++; } private ITEM searchr(node t, KEY key) { if (t == null) return null; if (equals(t.item.key(), key)) return t.item; return searchr(t.next, key); } ITEM search(key key) {return searchr(head, key); }} Δοµές Δεδοµένων 12-18

Ακολουθιακή αναζήτηση Ανάλυση κόστους: διακρίνουµε 2 είδη αναζήτησης Επιτυχείς αναζητήσεις: το κλειδί που ψάχνουµε υπάρχει στη δοµή Ανεπιτυχείς αναζητήσεις: δεν υπάρχει αντικείµενο µε αυτό το κλειδί Γενική ιδιότητα: N/2 συγκρίσεις για επιτυχή αναζήτηση κατά µέσο όρο Λίστα ή πίνακας, ταξινοµηµένα ή αταξινόµητα Μη ταξινοµηµένα στοιχεία Σταθερό κόστος εισαγωγής N συγκρίσεις για αποτυχηµένη αναζήτηση Ισχύει για λίστα ή πίνακα Ταξινοµηµένα στοιχεία Κατά µέσο όρο N/2 συγκρίσεις για εισαγωγή και επιτυχή ή ανεπιτυχή αναζήτηση Δοµές Δεδοµένων 12-19

Δυαδική αναζήτηση Τακτική αναζήτησης διαίρει και βασίλευε Διαιρούµε τον πίνακα συµβόλων σε δύο ίσα τµήµατα Πιθανόν να διαφέρουν κατά 1 στοιχείο Συνεχίζουµε στο τµήµα που περιέχει το ζητούµενο κλειδί Χρησιµοποιεί ταξινοµηµένο πίνακα private ITEM searchr(int p, int r, KEY v) { if (p > r) return null; int m = (p+r)/2; if (equals(v, st[m].key())) return st[m]; if (less(v, st[m].key())) return searchr(p, m-1, v); else return searchr(m+1, r, v); } ITEM search(key v) { return searchr(0, N-1, v); } Δοµές Δεδοµένων 12-20

Δυαδική αναζήτηση Απόδοση δυαδικής αναζήτησης Το πολύ floor(lοgn)+1 συγκρίσεις, σε επιτυχείς ή µη αναζητήσεις Πρόβληµα: διατήρηση ταξινοµηµένου πίνακα Αν τα στοιχεία εισάγονται δυναµικά έχουµε πρόβληµα Χρειάζεται συνεχής µετακίνηση των στοιχείων του πίνακα Η συνδεδεµένη λίστα εµποδίζει την άµεση προσπέλαση Δοµές Δεδοµένων 12-21

Δυαδική αναζήτηση Προκαθορισµένη ακολουθία συγκρίσεων Εξαρτάται µόνο από το µέγεθος του αρχείου Ακολουθούµε µοναδική διαδροµή στο δένδρο Χειρισµός διπλών κλειδιών Η ταξινόµηση τοποθετεί τα κλειδιά σε συνεχόµενες θέσεις Η αναζήτηση οδηγεί σε κάποια από αυτές τις θέσεις Απλές προσθήκες για σάρωση των γειτονικών θέσεων Επιτάχυνση µε παρεµβολή Υπολογίζουµε πού περίπου πρέπει να βρίσκεται το κλειδί Υποθέτουµε οµοιόµορφη κατανοµή κλειδιών Διασπάµε τον πίνακα εκεί και όχι στο µέσο m = p + (v a[p].key()) * (r p) / (a[r].key() a[p].key()) Δοµές Δεδοµένων 12-22