δυαδική αναζήτηση Παύλος Σ. Εφραιμίδης
περιεχόμενα δυαδική αναζήτηση ασύμμετρη δυαδική αναζήτηση δυαδική αναζήτηση με σφάλματα 2
Το πρόβλημα της αναζήτησης 3
Αναζήτηση Το πρόβλημα της αναζήτησης: Δίνεται πίνακας με Ν στοιχεία ταξινομημένα. Το ζητούμενο είναι: Δεδομένου ενός στοιχείου να βρεθεί εάν υπάρχει ή όχι το στοιχείο αυτό μέσα στον πίνακα, και εάν υπάρχει, τότε σε ποια θέση του πίνακα βρίσκεται (εάν το στοιχείο εμφανίζεται πολλές φορές μέσα στον πίνακα, τότε θα θεωρήσουμε ότι μας αρκεί να βρεθεί μία οποιαδήποτε από τις θέσεις αυτές) 4
γραμμική αναζήτηση 5
Γραμμική αναζήτηση Αλγόριθμος: Εξετάζουμε ένα ένα όλα τα στοιχεία του πίνακα, μέχρι να βρεθεί το ζητούμενο στοιχείο ή να εξαντληθεί ο πίνακας Χειρότερης Περίπτωσης: Ο(Ν) για πίνακα Ν στοιχείων Η γραμμική αναζήτηση είναι ένας απλοϊκός αλγόριθμος, που δεν εκμεταλλεύεται τη διάταξη των στοιχείων 6
δυαδική αναζήτηση 7
Δυαδική αναζήτηση Αλγόριθμος: Σε κάθε βήμα επιλέγουμε ένα στοιχείο P του πίνακα και το συγκρίνουμε με το ζητούμενο στοιχείο Χ εάν P < X, επαναλαμβάνουμε την αναζήτηση με το μέρος του πίνακα με τα στοιχεία που είναι μικρότερα του Χ εάν P = X, τερματίζει η διαδικασία εάν P > X, επαναλαμβάνουμε την αναζήτηση με το μέρος του πίνακα με τα στοιχεία που είναι μεγαλύτερα του Χ Τερματισμός: Η διαδικασία τερματίζει όταν βρεθεί το στοιχείο ή όταν δεν απομείνει μέρος του πίνακα για να εξεταστεί 8
Δυαδικής Αναζήτησης Πίνακας Ν στοιχείων: Αρχικά υπάρχουν Ν στοιχεία για την αναζήτηση Μετά το 1ο βήμα απομένουν Ν/2 για την αναζήτηση Μετά το 2ο βήμα απομένουν Ν/4 = Ν/2 2 Μετά το 3ο βήμα απομένουν Ν/8 = Ν/2 3 Μετά το βήμα κ απομένουν Ν/2 κ στοιχεία Το αργότερο όταν απομένουν 1 στοιχεία η διαδικασία τερματίζει Επομένως: Ν/2 κ 1 κ = O(log 2 (N)) Άρα σε κ = O(log 2 (N)) βήματα η διαδικασία τερματίζει Κάθε βήμα της δυαδικής αναζήτησης απαιτεί χρόνο Ο(1) και επομένως η συνολική πολυπλοκότητα χειρότερης περίπτωσης είναι: O(log 2 (N)) 9
παράδειγμα δυαδικής αναζήτησης 10
Παράδειγμα Έστω ο ταξινομημένος πίνακας: 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 11
Αναζήτηση του αριθμού 38 Βήμα 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 1 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 2 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 3 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 4 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 12 Σε κάθε βήμα του αλγορίθμου: Κίτρινο: Το στοιχείο που εξετάζεται Πράσινο: Το τμήμα του πίνακα που απομένει να εξεταστεί Κόκκινο: Τα τμήματα του πίνακα που έχουν αποκλειστεί
Αναζήτηση του αριθμού 39 Βήμα 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 1 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 2 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 3 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 4 ο 1 2 5 8 9 15 22 27 35 37 38 40 43 45 47 13
δυαδική αναζήτηση μησυμμετρικού κόστους 14
δυαδική αναζήτηση μη-συμμετρικού κόστους έχουμε ένα κτίριο με 100 ορόφους, και ένα αυγό το αυγό δεν είναι ένα τυχαίο αυγό: είναι από αλανιάρα κότα και πάρα πολύ ανθεκτικό ας υποθέσουμε ότι μπροστά στο κτίριο υπάρχει γρασίδι δίνεται ότι το αυγό μπορεί να αντέξει σε πτώση ενδεχομένως μέχρι και από τον 100οστο όροφο θέλουμε να μάθουμε μέχρι ποιον όροφο αντέχει σε πτώση χωρίς να σπάσει πόσες προσπάθειες πρέπει να κάνουμε; Έστω τώρα ότι έχουμε 2 ολόιδια αυγά. Πόσες προσπάθειες πρέπει να κάνουμε για να μάθουμε μέχρι ποιον όροφο αντέχει; Σημείωση: Δεν πειράζει εάν τελικά σπάσουν τα αυγά, αρκεί να έχουμε μάθει ακριβώς μέχρι ποιο όροφο αντέξανε 15
πηγές/αναφορές Σημειώσεις δεύτερου έτους Δομημένος Προγραμματισμός ΙΙΙ - Java για δυαδική αναζήτηση. Εισαγωγή στους αλγορίθμους, Άσκηση 2.3-5 Δομές Δεδομένων, Π. Μποζάνης, Κεφάλαιο 3 Δομές Δεδομένων, N. Wirth, Ενότητες 1.12.1, 1.12.2 Αλγόριθμοι σε Java, R. Sedgewick, Ενότητες 2.6 και 12.4 16