Κεφάλαιο 4 Διαίρει και Βασίλευε (Divide and Conquer) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του 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 14243 solve left half ( ) + T n /2 14243 solve right half + { n merging otherwise Λύση της αναδροµικής σχέσης. T(n) = O(n log 2 n). Σχετικές αποδείξεις. Στο βιβλίο δίνονται αρκετοί τρόποι για να αποδειχθεί η παραπάνω αναδροµική σχέση. Υποθέτουµε ότι το n είναι δύναµη του 2 και αντικαθιστούµε το µε =. 7
Απόδειξη µε χρήση του Δέντρου Αναδροµής (Recursion Tree) T(n) = 0 if n =1 2T(n/2) 14 243 sorting both halves + { n merging otherwise 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 εάν n = 1 T( n) = 2T ( n / 2) + { n διαφορετικά 14243 ταξινόµηση ττω δύο µισών συγχώνευση θεωρούµε ότι το n είναι δύναµη του 2 Απόδειξη. Για n > 1: T(n) n = 2T(n /2) n + 1 = T(n /2) n /2 + 1 = L = T(n / 4) n / 4 T(n /n) n /n = log 2 n + 1 + 1 + +L + 1 14 243 log 2 n 9
Απόδειξη µε Επαγωγή Ισχυρισµός. Εάν T(n) ικανοποιεί την αναδροµή, τότε T(n) = n log 2 n. 0 εάν n = 1 T( n) = 2T ( n / 2) + { n διαφορετικά 14243 ταξινόµηση ττω δύο µισών συγχώνευση θεωρούµε ότι το 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 ( ) + 2n = 2n log 2 (2n) 1 = 2nlog 2 (2n) 10
Ανάλυση της Αναδροµής της Mergesort Ισχυρισµός. Εάν T(n) ικανοποιεί την ακόλουθη αναδροµή, τότε T(n) n lg n. 0 T( n) T 14243 ( n / 2 ) + T n / 2 επίλυση αριστερού µισού ( ) + { n 14243 επίλυση δεξιού µισού συγχώνευση εάν 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 lg n 2 + n n 1 lgn 2 + n 2 lg n 2 + n = n lgn 2 + n n( lg n 1 ) + n = n lg n n 2 = n /2 2 lg n / 2 = 2 lg n / 2 lgn 2 lg n 1 11
5.4 Κοντινότερο ζευγάρι σηµείων (Closest Pair of Points)
Κοντινότερο ζευγάρι σηµείων Κοντινότερο ζεύγος. Για n σηµεία στο επίπεδο, να βρεθεί το ζεύγος µε τη µικρότερη µεταξύ τους Ευκλείδεια απόσταση. Θεµελιώδες πρόβληµα της υπολογιστικής γεωµετρίας, µε εφαρµογές: Γραφικά, όραση υπολογιστών, γεωγραφικά συστήµατα πληροφοριών, µοντελοποίηση µορίων, έλεγχος εναέριας κυκλοφορίας. Ειδική περίπτωση του κοντινότερου γείτονα, Ευκλείδειο Ελάχιστο Γεννητικό Δέντρο, Voronoi. Η γρήγορη εύρεση του κοντινότερου ζεύγους σηµείων ενέπνευσε γρήγορους αλγορίθµους για αυτά τα προβλήµατα Brute force. Εξετάζει όλα τα ζευγάρια σηµείων p και q µε κόστος Θ(n 2 ) συγκρίσεις. Μονοδιάστατη (1-D) έκδοση. O(n log n) εάν τα σηµεία βρίσκονται πάνω σε µια ευθεία. Παραδοχή. Δεν υπάρχουν σηµεία µε την ίδια συντεταγµένη x. Για να διευκολύνουµε την παρουσίαση και χωρίς βλάβη της γενικότητας 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) 2T( n/2) + O(n log n) T(n) = O(n log 2 n) Ερώτηµα. Μπορούµε να πετύχουµε O(n log n)? Απάντηση. Ναι. Δεν ταξινοµούµε τα σηµεία της λωρίδας κάθε φορά από την αρχή. Κάθε αναδροµή επιστρέφει δύο λίστες: όλα τα σηµεία ταξινοµηµένα κατά y και όλα τα σηµεία ταξινοµηµένα κατά x. Ταξινοµούµε συγχωνεύοντας τις δύο ήδη ταξινοµηµένες λίστες. T(n) 2T( n/2) + O(n) T(n) = O(n logn) 25
πηγές/αναφορές Κεφάλαιο 5, Σχεδίαση Αλγορίθµων, J. Kleinberg and E. Tardos, Ελληνική έκδοση από τις Εκδ. Κλειδάριθµος Χρησιµοποιήθηκε υλικό από τις αντίστοιχες αγγλικές διαφάνειες του Kevin Wayne για το βιβλίο του µαθήµατος 26