ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ



Σχετικά έγγραφα
Εισαγωγή στους Αλγόριθμους

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

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1,

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

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

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Αλγοριθμικές Τεχνικές. Brute Force. Διαίρει και Βασίλευε. Παράδειγμα MergeSort. Παράδειγμα. Τεχνικές Σχεδιασμού Αλγορίθμων

Αλγοριθμικές Τεχνικές

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

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

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

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

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

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ (συνέχεια)

Αλγόριθµοι. Παράδειγµα. ιαίρει και Βασίλευε. Παράδειγµα MergeSort. Τεχνικές Σχεδιασµού Αλγορίθµων

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

Πολλαπλασιασμός: αλγόριθμος

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Διαδικασιακός Προγραμματισμός

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

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

Fast Fourier Transform

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

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

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

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

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

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

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

1o Φροντιστήριο ΗΥ240

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

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

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

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

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

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

a 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 4: Διαίρει και Βασίλευε. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

Ταξινόμηση. Σαλτογιάννη Αθανασία

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

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

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

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

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

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

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

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

Τεχνικές Σχεδιασμού Αλγορίθμων

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ

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

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

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

Προγραμματισμός Η/Υ. Αναζήτηση & Ταξινόμηση. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

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

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

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

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

(18 ο ) ΚΛΑΣΜΑΤΙΚΗ ΑΝΑΓΩΓΗ - ΙI: «διάμεσος &θεσιακή επιλογή στοιχείου»

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

Ταξινόμηση. 1. Στατιστικά Διάταξης 2. Στατιστικά σε Μέσο Γραμμικό Χρόνο. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

Ελαφρύτερος και βαρύτερος Αλγόριθμοι ταξινόμησης

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

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

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

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

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

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

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

Αναδρομή Ανάλυση Αλγορίθμων

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

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

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

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

Εργαστηριακή Άσκηση 1

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

Transcript:

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ (ΑΛΓΟΡΙΘΜΟΙ, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani, σελ. 55-62 ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΩΝ, Jon Kleinberg, Eva Tardos, Κεφάλαιο 5)

Δυαδική αναζήτηση (Binary search) ΔΕΔΟΜΕΝΟ: ένα μεγάλο αρχείο που περιέχει τιμές z [0,1,,n-1] ταξινομημένες ΖΗΤΟΥΜΕΝΟ: να βρούμε δοσμένη τιμή k στο αρχείο αυτό ΙΔΕΑ: Συγκρίνουμε την τιμή k με z[n/2] και ανάλογα με το αποτέλεσμα αναζητούμε το k αναδρομικά είτε στο πρώτο μισό του αρχείου z[0,,n/2-1], είτε στο δεύτερο μισό του αρχείου z[n/2,,n-1] Η αναδρομή περιγράφεται από τη σχέση (a=1,b=2,d=0) n d ) + O( n ) = T ( n ) + (1) T ( n) = at ( O b 2 Επομένως, ο χρόνος εκτέλεσης του αλγορίθμου είναι O(log n)

Δυαδική αναζήτηση (Binary search) ΔΕΔΟΜΕΝΟ: σε τηλεφωνικό κατάλογο Τηλεφωνικός κατάλογος με n ονόματα και έναν αριθμό τηλεφώνου για κάθε όνομα Ο τηλεφωνικός κατάλογος είναι ταξινομημένος κατά αύξουσα αλφαβητική σειρά ως προς τα ονόματα Ένα όνομα από τον κατάλογο ΖΗΤΟΥΜΕΝΟ: Να βρεθεί το τηλέφωνο που αντιστοιχεί στο δοσμένο όνομα

Δυαδική αναζήτηση (Binary search) σε τηλεφωνικό κατάλογο Το πρόβλημα λύνεται με την τεχνική «διαίρει και βασίλευε» με βάση την παρατήρηση ότι δεδομένου ενός ονόματος υπάρχουν 3 περιπτώσεις: Το όνομα βρίσκεται στη μεσαία θέση του καταλόγου Το όνομα βρίσκεται σε κάποια θέση στο πρώτο μισό του καταλόγου Το όνομα βρίσκεται σε κάποια θέση στο δεύτερο μισό του καταλόγου Ο αλγόριθμος αρχικά εξετάζει αν το δοσμένο όνομα είναι στη μέση του τηλεφωνικού καταλόγου Αν είναι, επιστρέφει το τηλέφωνο Διαφορετικά, λόγω της αλφαβητικής ταξινόμησης του καταλόγου, το όνομα θα βρίσκεται είτε στο πρώτο είτε στο δεύτερο μισό του καταλόγου: οπότε το αναζητά εκεί Συνεχίζει με τον ίδιο τρόπο μέχρι να το προσδιορίσει

Δυαδική αναζήτηση (Binary search) σε τηλεφωνικό κατάλογο Ο αλγόριθμος με τη μορφή ψευδοκώδικα:

Δυαδική αναζήτηση (Binary search) σε τηλεφωνικό κατάλογο: παράδειγμα Ο τηλεφωνικός κατάλογος: Γιώργος: 2641056789 Εύη: 2641098765 Κατερίνα: 2641054321 Ρούλα: 2641013579 Σταύρος: 264101234 Αναζητούμε το τηλέφωνο της Εύης Γιώργος Εύη Κατερίνα Ρούλα Σταύρος Προσπάθεια 1 Γιώργος Εύη Κατερίνα Ρούλα Σταύρος Προσπάθεια 2 Γιώργος Εύη Κατερίνα Ρούλα Σταύρος Προσπάθεια 3

Δυαδική αναζήτηση (Binary search) σε τηλεφωνικό κατάλογο: παράδειγμα Χρόνος εκτέλεσης; Γιανατονβρούμερωτάμε: πόσες φορές μπορεί να χρειαστεί να διαιρέσω τον κατάλογο σε δύο μισά προκειμένου να βρω το τηλέφωνο που αντιστοιχεί στο δοσμένο όνομα; Στη χειρότερη περίπτωση μπορεί το δοσμένο όνομα να είναι (πρώτο ή) τελευταίο στον κατάλογο πρέπει να διαιρέσω τον κατάλογο στα 2 τόσες φορές ώστε να μείνει ένα μόνο στοιχείο Αν ο κατάλογος έχει n καταχωρήσεις, το ζητούμενο πλήθος διαιρέσεων είναι n/2 k =1 n=2 k k=log2n χρόνος εκτέλεσης αλγορίθμου δυαδικής αναζήτησης: logn=ο(log n) πολύ γρήγορος

Ταξινόμηση ΔΕΔΟΜΕΝΟ: λίστα με n στοιχεία ZHTOYMENO: αναδιάταξε τα στοιχεία ώστε να εμφανιστούν σε αύξουσα σειρά Παράδειγμα: Δοσμένη λίστα: 5 1 6 9 4 8 Ζητούμενη λίστα: 1 4 5 6 8 9

Ταξινόμηση Ενδεικτικές εφαρμογές: Προφανείς εφαρμογές Ταξινόμηση λίστας ονομάτων Οργάνωση MP3 σε μία βιβλιοθήκη Εμφάνιση των αποτελεσμάτων του PageRank της Google Εμφάνιση σχολίων σε ένα blog με αντίστροφη χρονολογική σειρά Προβλήματα που γίνονται ευκολότερα αν τα δεδομένα τους είναι ταξινομημένα Εύρεση μεσαίου στοιχείου λίστας Εύρεση πλησιέστερου ζεύγους Δυαδική αναζήτηση σε βάση δεδομένων Εύρεση διπλο-εγγραφών σε λίστα (π.χ., mailing list) Πιο πολύπλοκες εφαρμογές Συμπίεση δεδομένων Γραφικά Υπολογιστική βιολογία Διαχείριση αλυσίδας προμηθειών Προτάσεις βιβλίων σε ηλεκτρονικό κατάστημα Εξισορρόπηση φορτίου σε παράλληλο υπολογιστή

Ιδέα: χωρίζουμε τη λίστα που πρέπει να ταξινομήσουμε σε 2 μισά, αναδρομικά ταξινομούμε κάθε μισό, και μετά συγχωνεύουμε τις δύο ταξινομημένες υπολίστες Ο αλγόριθμος (επινοήθηκε από τον John von Neumann το 1945):

Διαίρει: Το πρόβλημα μεγέθους N (με N αριθμούς) διαιρείται σε 2 υποπροβλήματα μεγέθους N/2 το καθένα Βασίλευε: Ταξινόμησε κάθε υποπρόβλημα εφαρμόζοντας αναδρομικά πάλι MergeSort Συνδύασε: Συγχώνευσε τους ταξινομημένους υποπίνακες σε έναν ενιαίο ταξινομημένο πίνακα Διαίρει Βασίλευε-Ταξινόμησε Συνδύασε-Συγχώνευσε

Διαίρεση Συγχώνευση

Χρόνος εκτέλεσης; Πρέπει να βρούμε την αντίστοιχη αναδρομική σχέση : στο MergeSort σταματάμε την αναδρομή όταν έχουμε 2 στοιχεία: οπότε τα συγκρίνουμε και τα επιστρέφουμε στη σωστή σειρά Συγχώνευση είναι η διαδικασία συνδυασμού δύο ταξινομημένων αρχείων σε ένα ταξινομημένο αρχείο Για εισόδους μεγέθους n γίνεται σε χρόνο O(n)

Έστω T(n) ο χρόνος εκτέλεσης της χειρότερης περίπτωσης για στιγμιότυπα μεγέθους n Ο αλγόριθμος δαπανά χρόνο το πολύ: O(n) για να διαιρέσει την είσοδο σε δύο τμήματα μεγέθους n/2 το καθένα T(n/2) για να επιλύσει το κάθε τμήμα O(n) γιανασυνδυάσει(συγχωνεύσει) τιςλύσειςαπότιςδύο αναδρομικές κλήσεις Άρα ο χρόνος εκτέλεσης T(n) του Mergesort ικανοποιεί την ακόλουθη αναδρομική σχέση (recurrence relation): Για σταθερά c, T(n) 2T(n/2) + cn όταν n > 2 και T(n) cn

n/2 k =2 n=2 k+1 log n=k+1

1 ο επίπεδο: 1 (=2 0 ) υποπρόβλημα μεγέθους n χρειάζεται χρόνο cn + χρόνος αναδρομικών κλήσεων 2 ο επίπεδο: 2 (=2 1 ) προβλήματα μεγέθους n/2 το καθένα και καθένα από αυτά χρειάζεται χρόνο το πολύ cn/2 συνολικός χρόνος: cn + χρόνος αναδρομικών κλήσεων 3 ο επίπεδο: 4 (=2 2 ) προβλήματα μεγέθους n/4 το καθένα και καθένα από αυτά χρειάζεται χρόνο το πολύ cn/4 συνολικός χρόνος: cn + χρόνος αναδρομικών κλήσεων

Επίπεδο j: ο αριθμός των υποπροβλημάτων έχει διπλασιαστεί j φορές υπάρχουν 2 j υποπροβλήματα Καθένα από αυτά έχει υποδιπλασιαστεί (δηλ., έχει κοπεί στο μισό) j φορές κάθε υποπρόβλημα έχει μέγεθος n/2 j χρειάζεται χρόνο το πολύ cn/2 j Όλα τα υποπροβλήματα του επιπέδου j χρειάζονται χρόνο συνολικά το πολύ 2 j (cn/2 j ) = cn

Ο αριθμός των υποδιπλασιασμών της εισόδου έτσι ώστε να μειωθεί το μέγεθος της από n σε 2 είναι log2 n-1 αφού ισχύει n/2 k = 2 n = 2k+1 log2 n = k+1 Χρόνος το πολύ cn για log n επίπεδα δίνει συνολικό χρόνο εκτέλεσης O(n log n)