Κεφάλαιο 4 Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1, 2015-01-19 Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1
Διαίρει και Βασίλευε (Divide-and-Conquer) Διαίρει-και-βασίλευε (γενικά) Χωρίζουμε το πρόβλημα σε υποπροβλήματα. Επιλύουμε κάθε υπο-πρόβλημα με χρήση αναδρομής. Συνδυάζουμε τις λύσεις των υποπροβλημάτων σε μια συνολική λύση. Διαίρει-και-βασίλευε (συνηθισμένη χρήση). Χωρίζουμε το πρόβλημα μεγέθους n σε δύο ίσου μεγέθους υποπροβλήματα μεγέθους ½n. Επιλύουμε τα δύο υποπροβλήματα με χρήση αναδρομής. Συνδυάζουμε δύο λύσεις σε μια ενιαία λύση σε γραμμικό χρόνο. Αποτέλεσμα. Κοντινότερο ζευγάρι σημείων Brute force: n 2. Διαίρει-και-βασίλευε: n log n. Divide et impera. Veni, vidi, vici. - Julius Caesar 2
5.1 Mergesort
Ταξινόμηση (Sorting) Ταξινόμηση. Δίνονται n στοιχεία, να τοποθετηθούν σε αύξουσα σειρά. Προφανείς εφαρμογές της ταξινόμησης. Λίστα αρχείων ενός καταλόγου. Οργάνωση μιας βιβλιοθήκης MP3. Λίστα ονομάτων τηλεφωνικού καταλόγου. Εμφάνιση αποτελεσμάτων Google PageRank. Προβλήματα που διευκολύνονται μετά την ταξινόμηση. Εύρεση του μεσαίου (median) στοιχείου. Εύρεση του κοντινότερου ζεύγους. Δυαδική αναζήτηση σε Βάσεις Δεδομένων. Εύρεση στατιστικών outliers. Εύρεση διπλοεγγραφών σε μια mailing list. Μη προφανείς εφαρμογές της ταξινόμησης. Συμπίεση δεδομένων. Γραφικά υπολογιστών. Χρονοπρογραμματισμός διαστημάτων. Υπολογιστική Βιολογία. Ελάχιστο Γεννητικό Δέντρο. Διαχείριση αλυσίδας τροφοδοσίας. Εξομοίωση συστήματος σωματιδίων. Προτεινόμενα βιβλία στην Amazon. Κατανομή φόρτου (Load balancing) σε έναν παράλληλο υπολογιστή.... 4
Mergesort Mergesort. Χωρίζουμε τον πίνακα σε στα δύο μισά. Ταξινομούμε κάθε μισό με χρήση αναδρομής. Συγχωνεύουμε τα δύο ταξινομημένα μισά σε μια ενιαία ταξινομημένη ακολουθία. Jon von Neumann (1945) A L G O R I T H M S A L G O R I T H M S διαίρεση O(1) A G L O R H I M S T ταξινόμηση 2T(n/2) A G H I L M O R S T συγχώνευση O(n) 5
Merging Συγχώνευση (merging). Συνδυάζει τις δύο ταξινομημένες λίστες σε μια συνολική ταξινομημένη λίστα. Πως μπορεί να γίνει αποδοτικά η συγχώνευση; Γραμμικό πλήθος συγκρίσεων. Χρήση ενός προσωρινού πίνακα. A G L O R H I M S T A G H I Άσκηση - πρόκληση. In-place merge, δηλαδή συγχώνευση χωρίς τη χρήση επιπλέον πίνακα. [Kronrud, 1969] Σημείωση: Επιτρέπεται η χρήση ενός σταθερού αριθμού επιπλέον θέσεων μνήμης. 6
Μια χρήσιμη αναδρομική σχέση Ορισμός. T(n) = πλήθος συγκρίσεων της mergesort για είσοδο με n στοιχεία. Αναδρομή Mergesort. T(n) 0 if n 1 T n/2 T n/2 solve left half solve right half merging n otherwise Λύση της αναδρομικής σχέσης. T(n) = O(n log 2 n). Σχετικές αποδείξεις. Στο βιβλίο δίνονται αρκετοί τρόποι για να αποδειχθεί η παραπάνω αναδρομική σχέση. Υποθέτουμε ότι το n είναι δύναμη του 2 και αντικαθιστούμε το με =. 7
Απόδειξη με χρήση του Δέντρου Αναδρομής (Recursion Tree) T(n) 0 if n 1 2T(n/2) n otherwise sorting both halves merging T(n) n T(n/2) T(n/2) 2(n/2) T(n/4) T(n/4) T(n/4) T(n/4) log 2 n 4(n/4)... T(n / 2 k ) 2 k (n / 2 k )... T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2) n/2 (2) n log 2 n 8
Proof by Telescoping Ισχυρισμός. Εάν η T(n) ικανοποιεί την αναδρομή αυτή, τότε T(n) = n log 2 n. 0 T( n) 2T ( n / 2) ταξινόμησηττω δύομισών n συγ χώνευση εάν n 1 διαφορετικ ά θεωρούμε ότι το n είναι δύναμη του 2 Απόδειξη. Για n > 1: T(n) n 2T(n /2) n 1 T(n/2) n /2 1 T(n/4) n / 4 1 1 T(n/n) n /n log 2 n 1 1 log 2 n 9
Απόδειξη με Επαγωγή Ισχυρισμός. Εάν T(n) ικανοποιεί την αναδρομή, τότε T(n) = n log 2 n. 0 T( n) 2T ( n / 2) ταξινόμησηττω δύομισών n συγ χώνευση εάν n 1 διαφορετικ ά θεωρούμε ότι το n είναι δύναμη του 2 Απόδειξη. (με επαγωγή στο n) Βάση επαγωγής: n = 1. Υπόθεση επαγωγής: T(n) = n log 2 n. Στόχος: να δείξουμε ότι T(2n) = 2n log 2 (2n). T(2n) 2T(n) 2n 2nlog 2 n 2n 2nlog 2 (2n) 1 2n 2nlog 2 (2n) 10
Ανάλυση της Αναδρομής της Mergesort Ισχυρισμός. Εάν T(n) ικανοποιεί την ακόλουθη αναδρομή, τότε T(n) n lg n. 0 T( n) T n / 2 T n / 2 επίλυσηαριστερούμισού n επίλυσηδεξιούμισού συγ χώνευση εάν n 1 διαφορετικ ά log 2 n Απόδειξη. (με επαγωγή στο n) Βάση επαγωγής: n = 1. Ορίζουμε n 1 = n / 2, n 2 = n / 2. Βήμα επαγωγής: υποθέτουμε ότι ισχύει για 1, 2,..., n 1. T(n) T(n 1 ) T(n 2 ) n n 1 lgn 1 n 2 lgn 2 n n 1 lgn 2 n 2 lgn 2 n n lgn 2 n n( lgn1 ) n n lgn n 2 n /2 2 lg n / 2 / 2 2 lg n lgn 2 lgn 1 11
5.4 Κοντινότερο ζευγάρι σημείων (Closest Pair of Points)
Κοντινότερο ζευγάρι σημείων Κοντινότερο ζεύγος. Για n σημεία στο επίπεδο, να βρεθεί το ζεύγος με τη μικρότερη μεταξύ τους Ευκλείδεια απόσταση. Θεμελιώδες πρόβλημα της υπολογιστικής γεωμετρίας, με εφαρμογές: Γραφικά, όραση υπολογιστών, γεωγραφικά συστήματα πληροφοριών, μοντελοποίηση μορίων, έλεγχος εναέριας κυκλοφορίας. Ειδική περίπτωση του κοντινότερου γείτονα, Ευκλείδειο Ελάχιστο Γεννητικό Δέντρο, Voronoi. Brute force. Εξετάζει όλα τα ζευγάρια σημείων p και q με κόστος (n 2 ) συγκρίσεις. Η γρήγορη εύρεση του κοντινότερου ζεύγους σημείων ενέπνευσε γρήγορους αλγορίθμους για αυτά τα προβλήματα Μονοδιάστατη (1-D) έκδοση. O(n log n) εάν τα σημεία βρίσκονται πάνω σε μια ευθεία. Παραδοχή. Δεν υπάρχουν σημεία με την ίδια συντεταγμένη x ή συντεταγμένη y. Για να απλοποιηθεί η παρουσίαση και χωρίς βλάβη της γενικότητας 13
Κοντινότερο ζεύγος σημείων: Πρώτη προσπάθεια Διαίρει. Διαιρούμε το επίπεδο σε 4 τεταρτημόρια. L 14
Κοντινότερο ζεύγος σημείων: Πρώτη προσπάθεια Διαίρει. Διαιρούμε το επίπεδο σε 4 τεταρτημόρια. Εμπόδιο. Δεν μπορούμε να εξασφαλίσουμε n/4 σημεία σε κάθε τμήμα. L 15
Κοντινότερο ζεύγος σημείων Αλγόριθμος. Διαίρει: ορίζουμε μια κάθετη γραμμή L έτσι ώστε να υπάρχουν περίπου ½n σημεία σε κάθε πλευρά. L 16
Κοντινότερο ζεύγος σημείων Αλγόριθμος. Διαίρει: ορίζουμε μια κάθετη γραμμή L έτσι ώστε να υπάρχουν περίπου ½n σημεία σε κάθε πλευρά. Βασίλευε: εύρεση ζεύγους κοντινότερων σημείων σε κάθε πλευρά με χρήση αναδρομής. L 21 12 17
Κοντινότερο ζεύγος σημείων Αλγόριθμος. Διαίρει: ορίζουμε μια κάθετη γραμμή L έτσι ώστε να υπάρχουν περίπου ½n σημεία σε κάθε πλευρά. Βασίλευε: εύρεση ζεύγους κοντινότερων σημείων σε κάθε πλευρά με χρήση αναδρομής. Συνδύασε: εύρεση κοντινότερου ζεύγους με ένα σημείο σε κάθε πλευρά. μοιάζει με (n 2 ) Επιλογή της καλύτερης από της τρεις λύσεις (αριστερή πλευρά, δεξιά πλευρά, ένα σημείο σε κάθε πλευρά) L 8 21 12 18
Κοντινότερο ζεύγος σημείων Εύρεση κοντινότερου ζεύγους με ένα σημείο σε κάθε πλευρά, με την υπόθεση ότι η απόστασή τους είναι <. L 21 12 = min(12, 21) 19
Κοντινότερο ζεύγος σημείων Εύρεση κοντινότερου ζεύγους με ένα σημείο σε κάθε πλευρά, με την υπόθεση ότι η απόστασή τους είναι <. Παρατήρηση: αρκεί να εξετάσουμε σημεία σε απόσταση το πολύ από τη γραμμή L. L 21 12 = min(12, 21) 20
Κοντινότερο ζεύγος σημείων Εύρεση κοντινότερου ζεύγους με ένα σημείο σε κάθε πλευρά, με την υπόθεση ότι η απόστασή τους είναι <. Παρατήρηση: αρκεί να εξετάσουμε σημεία σε απόσταση το πολύ από τη γραμμή L. Ταξινομούμε τα σημεία της λωρίδας πλάτους 2 με βάση τη συντεταγμένη τους y. 7 L 6 4 5 21 12 3 = min(12, 21) 2 1 21
Κοντινότερο ζεύγος σημείων Εύρεση κοντινότερου ζεύγους με ένα σημείο σε κάθε πλευρά, με την υπόθεση ότι η απόστασή τους είναι <. Παρατήρηση: αρκεί να εξετάσουμε σημεία σε απόσταση το πολύ από τη γραμμή L. Ταξινομούμε τα σημεία της λωρίδας πλάτους 2 με βάση τη συντεταγμένη τους y. Εξετάζουμε μόνο τις αποστάσεις μεταξύ αυτών των που απέχουν το πολύ 15 θέσεις μέσα στην ταξινομημένη λίστα. 7 L 6 4 5 21 12 3 = min(12, 21) 2 1 22
Κοντινότερο ζεύγος σημείων Ορισμός. Έστω s i το σημείο στη λωρίδα πλάτους 2, με την i-οστή μικρότερη συντεταγμένη y. Ισχυρισμός. Εάν i j 12, τότε η απόσταση μεταξύ των s i και s j είναι τουλάχιστον. Απόδειξη. 31 39 j Δεν μπορεί να ανήκουν δύο σημεία στο ίδιο κουτί διαστάσεων ½-επί-½. Δύο σημεία που απέχουν τουλάχιστον δύο γραμμές έχουν απόσταση 2(½). 2 rows 29 30 ½ ½ i 27 28 ½ Γεγονός (Fact). Ισχύει εάν αντικαταστήσουμε το 12 με το 7. 26 25 23
Αλγόριθμος Κοντινότερου Ζεύγους Closest-Pair(p 1,, p n ) { Compute separation line L such that half the points are on one side and half on the other side. 1 = Closest-Pair(left half) 2 = Closest-Pair(right half) = min( 1, 2 ) Delete all points further than from separation line L Sort remaining points by y-coordinate. Scan points in y-order and compare distance between each point and next 11 neighbors. If any of these distances is less than, update. O(n log n) 2T(n / 2) O(n) O(n log n) O(n) } return. 24
Κοντινότερο ζεύγος σημείων: Ανάλυση Πολυπλοκότητα χρόνου. T(n) 2Tn/2 O(n log n) T(n) O(n log 2 n) Ερώτημα. Μπορούμε να πετύχουμε O(n log n)? Απάντηση. Ναι. Δεν ταξινομούμε τα σημεία της λωρίδας κάθε φορά από την αρχή. Κάθε αναδρομή επιστρέφει δύο λίστες: όλα τα σημεία ταξινομημένα κατά y και όλα τα σημεία ταξινομημένα κατά x. Ταξινομούμε συγχωνεύοντας τις δύο ήδη ταξινομημένες λίστες. T(n) 2Tn/2 O(n) T(n) O(n logn) 25
πηγές/αναφορές Κεφάλαιο 5, Σχεδίαση Αλγορίθμων, J. Kleinberg and E. Tardos, Ελληνική έκδοση από τις Εκδ. Κλειδάριθμος Χρησιμοποιήθηκε υλικό από τις αντίστοιχες αγγλικές διαφάνειες του Kevin Wayne για το βιβλίο του μαθήματος 26