Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο1 Διαίρει και Βασίλευε γνωστότερη Η γνωστότερη μέθοδος σχεδιασμού αλγορίθμων: Διαιρούμε το στιγμιότυπο του προβλήματος σε δύο ή περισσότερα μικρότερα στιγμιότυπα Επιλύουμε τα μικρότερα στιγμιότυπα αναδρομικά Βρίσκουμε τη λύση στο αρχικό (μεγαλύτερο) στιγμιότυπο συνδυάζοντας αυτές τις λύσεις
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο2 υποπρόβλημα 2 μεγέθους n/2 υποπρόβλημα 1 μεγέθους n/2 μία λύση για το υποπρόβλημα 1 Η λύση για το αρχικό πρόβλημα μία λύση για το υποπρόβλημα 2 πρόβλημα μεγέθους n Διαίρει και Βασίλευε
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο3 b Ταξινόμηση με συγχώνευση και γρήγορη ταξινόμηση b Διασχίσεις δένδρων b Δυαδική αναζήτηση b Πολλαπλασιασμός πινάκων – Αλγόριθμος του Strassen b Κυρτό περίβλημα - Αλγόριθμος QuickHull Παραδείγματα Διαίρει και Βασίλευε
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο4 Γενική αναδρομή του Διαίρει και Βασίλευε T(n) = aT(n/b) + f (n) όπου f (n) ∈ Θ(n k ), k≥0 1. a < b k T(n) ∈ Θ(n k ) 2. a = b k T(n) ∈ Θ(n k lg n ) 3. a > b k T(n) ∈ Θ( n log b a ) Σημείωση: το ίδιο αποτέλεσμα ισχύει για το συμβολισμό O αντί για το Θ.
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο5 Ταξινόμηση με συγχώνευση (1) Αλγόριθμος: b Διαιρούμε τον πίνακα A[1..n] σε δύο τμήματα και αντιγρά- φουμε το καθένα στους πίνακες B[1.. n/2 ] και C[1.. n/2 ] b Ταξινομούμε τους πίνακες B και C b Συγχωνεύουμε τους πίνακες B και C στον πίνακα A ως εξής: Επαναλαμβάνουμε μέχρι να μη μείνει κάποιο στοιχείο σε έναν από τους πίνακες:Επαναλαμβάνουμε μέχρι να μη μείνει κάποιο στοιχείο σε έναν από τους πίνακες: –Συγκρίνουμε τα πρώτα στοιχεία στα εναπομένοντα μη επεξεργασμένα τμήματα των πινάκων –Αντιγράφουμε το μικρότερο από τα δύο στοιχεία στον πίνακα A, ενώ αυξάνουνε το δείκτη προς το μη επεξεργασμένο τμήμα του Όταν επεξεργασθούμε όλα τα στοιχεία του ενός πίνακα, τότε αντιγράφουμε στον πίνακα Α τα υπόλοιπα μη επεξεργασθέντα στοιχεία από τον άλλο πίνακαΌταν επεξεργασθούμε όλα τα στοιχεία του ενός πίνακα, τότε αντιγράφουμε στον πίνακα Α τα υπόλοιπα μη επεξεργασθέντα στοιχεία από τον άλλο πίνακα
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο6 Ταξινόμηση με συγχώνευση (2) Algorithm Mergesort(A[0..n-1]) // Input: an array A[0..n-1] of orderable elements // Output: Array A[0..n-1] sorted ascendingly if n>1 copy A[0..n/2-1] to B[0..n/2-1] copy A[n/2..n-1] to C[n/2..n-1] mergesort(B[0..n/2-1]) mergesort(C[n/2..n-1]) merge(B,C,A)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο7 Ταξινόμηση με συγχώνευση (3) Algorithm Merge(B[0..p-1],C[0..q-1],A[0..p+q-1]) // Input: two sorted arrays B[0..n-1] C[0..p-1] // Output: array A[0..p+q-1] sorted ascendingly i 0; j 0; k 0; while i<p and j<q do if B[i]≤C[j] A[k] B[i]; i i+1 else A[k] C[j]; j j+1 k k+1 if i=p copy C[j..q-1] to A[k..p+q-1] else copy B[i..p-1] to A[k..p+q-1]
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο8 Tαξινόμηση με συγχώνευση (4) Παράδειγμα Ποιά είναι η σειρά των κλήσεων συναρτήσεων?
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο9 Αποδοτικότητα της ταξινόμησης με συγχώνευση b C(n) = 2 C(n/2) + C merge (n) for n>1, C(1)=0 b Όλες οι περιπτώσεις έχουν την ίδια αποδοτικότητα: Θ(n log n) b Το πλήθος των συγκρίσεων προσεγγίζει το θεωρητικό ελάχιστο για τις ταξινομήσεις που βασίζονται στη σύγκριση: log n ! ≈ n lg n n log n ! ≈ n lg n n b Απαιτήσεις χώρου: Θ(n) (δεν είναι in-place) b Μπορεί να υλοποιηθεί χωρίς αναδρομή (bottom-up)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο10 Γρήγορη ταξινόμηση (1) b Επιλέγουμε έναν άξονα (το στοιχείο της διαμέρισης) b Τακτοποιούμε τη λίστα έτσι ώστε τα στοιχεία σε θέσεις πριν από τον άξονα να είναι μικρότερα ή ίσα προς τον άξονα, ενώ εκείνα που είναι μετά τον άξονα είναι μεγαλύτερά του (δες τον αλγόριθμο Partition στην ενότητα 4.2) b Ανταλλάσουμε τον άξονα με το τελευταίο στοιχείο της πρώτης λίστας (δηλ, τη λίστα ≤ ), οπότε ο άξονας λαμβάνει την τελική του θέση b Ταξινομούμε τις δύο λίστες p A[i]≤p A[i]>p
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο11 Γρήγορη Ταξινόμηση (2) Algorithm Quicksort(A[l..r]) // Input: an array A[0..n-1] of orderable elements // Output: Array A[0..n-1] sorted ascendingly if l<r s partition(A[l..r]) quicksort(A[l..s-1]) quicksort(A[s+1..r])
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο12 Algorithm Partition(A[l..r]) // Partitions a subarray by using its first element as pivot // Input: a subarray A[l..r], l<r // Output: A partition of A[l..r] with the split position returned as this function’s value p A[l]; i l; j r+1; repeat repeat i i+1 until A[i]≥p repeat j j-1 until A[j]≤p swap(A[i],A[j]) until i≥j swap(A[i],A[j]); swap(A[l],A[j]) return j Γρήγορη Ταξινόμηση (3)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο13 Παράδειγμα Παράδειγμα Ποιά είναι η σειρά των κλήσεων συναρτήσεων? Γρήγορη Ταξινόμηση (4)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο14 b Καλύτερη περίπτωση: χωρισμός στη μέση — Θ( n log n) b Χειρότερη περίπτωση: ταξινομημένος πίνακας ! — Θ( n 2 ) b Μέση περίπτωση: τυχαίος πίνακας — Θ( n log n) b Βελτιώσεις: Καλύτερη επιλογή του άξονα: το μεσαίο από 3 στοιχεία αποφεύγει τη χειρότερη περίπτωση σε ταξινομημένα αρχείαΚαλύτερη επιλογή του άξονα: το μεσαίο από 3 στοιχεία αποφεύγει τη χειρότερη περίπτωση σε ταξινομημένα αρχεία Γυρνούμε σε ταξινόμηση με εισαγωγή για μικρά υποαρχείαΓυρνούμε σε ταξινόμηση με εισαγωγή για μικρά υποαρχεία Αποφεύγουμε την αναδρομήΑποφεύγουμε την αναδρομή Μπορούν να δώσουν βελτίωση μέχρι 20-25% b Θεωρείται η καλύτερη μέθοδος για εσωτερική ταξινόμηση μεγάλων αρχείων (n ≥ 10000) Γρήγορη Ταξινόμηση (5)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο15 Πολλαπλασιασμός μεγάλων ακεραίων (1) b Για να πολλαπλασιάσουμε δύο ακεραίους με n 1 και n 2 ψηφία με το χέρι, θα εκτελέσουμε n 1 n 2 πράξεις b Για παράδειγμα: 23*14 b Όμως: 23 = και 14 = b Άρα: 23*14 = (2*1)10 2 +(2*4+3*10) (3*4) 10 0 b Αλλά 23*14 = (2*1) [ (2+3)*(1+4)-2*1 ] (3*4) 10 0
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο16 Πολλαπλασιασμός μεγάλων ακεραίων (2) b Γενικώς: a=a 1 a 0, b=b 1 b 0 και ζητείται c=a*b b c = a*b = c n + c n/2 + c όπου c 2 =a 1 *b 1, c 0 =a 0 *b 0, c 1 =(a 1 +a 0 )*(b 1 +b 0 )-(c 2 +c 0 ) b Αναδρομική εξίσωση b Αποδοτικότητα
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο17 Πολλαπλασιασμός πινάκων αλά Strassen b Ο Strassen παρατήρησε [1969] ότι το γινόμενο δύο πινάκων A και B (μεγέθους 2 n x2 n ) μπορεί να υπολογισθεί ως εξής: C 00 C 01 A 00 A 01 B 00 B 01 = * = * C 10 C 11 A 10 A 11 B 10 B 11 M 1 + M 4 - M 5 + M 7 M 3 + M 5 M 1 + M 4 - M 5 + M 7 M 3 + M 5 = M 2 + M 4 M 1 + M 3 - M 2 + M 6 M 2 + M 4 M 1 + M 3 - M 2 + M 6
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο18 Υποπίνακες του Strassen b M 1 = (A 00 + A 11 ) * (B 00 + B 11 ) b M 2 = (A 10 + A 11 ) * B 00 b M 3 = A 00 * (B 01 - B 11 ) b M 4 = A 11 * (B 10 - B 00 ) b M 5 = (A 00 + A 01 ) * B 11 b M 6 = (A 10 - A 00 ) * (B 00 + B 01 ) b M 7 = (A 01 - A 11 ) * (B 10 + B 11 )
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο19 Αποδοτικότητα του αλγορίθμου Strassen b Αν το n δεν είναι δύναμη του 2, τότε οι πίνακες παραγεμίζονται με μηδενικά b Πλήθος πολλαπλασιασμών: b Πλήθος προσθέσεων: b Αναδρομή: b Άλλοι αλγόριθμοι έχουν βελτιώσει αυτό το αποτέλεσμα αλλά είναι ακόμη περισσότεροι σύνθετοι
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο20 Το πρόβλημα του πλησιέστερου ζεύγους b Πρόβλημα: βρες τα πλησιέστερα σημεία μεταξύ n σημείων σε ένα k-διάστατο χώρο b Υποθέτουμε ότι τα σημεία ταξινομούνται με βάση τις τιμές των τετμημένων x b Διαιρούμε τα σημεία σε δύο υποσύνολα S 1 και S 2 με n/2 σημεία με βάση μία κατακόρυφη γραμμή στο x=c b Επιλέγουμε το πλησιέστερο ζεύγος μεταξύ των ζευγών του αριστερού υποσυνόλου (απόσταση d 1 ), μεταξύ των ζευγών του δεξιού υποσυνόλου (απόσταση d 2 ), και το πλησιέστερο ζεύγος με σημεία και από τις δύο πλευρές b Πρέπει να εξετάσουμε μία λωρίδα πλάτους 2d, όπου d=min[d 1,d 2 ]
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο21 b Γεωμετρική εξήγηση b Αναδρομή T(n) = 2T(n/2) + M(n) b Αποδοτικότητα O(n logn) b Βελτιστότητα Το πρόβλημα του πλησιέστερου ζεύγους (2)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο22 Αλγόριθμος QuickHull Υπολογίζει το Κυρτό Περίβλημα με έμπνευση από τη Γρήγορη Ταξινόμηση: b Υποθέτουμε ότι τα σημεία είναι ταξινομημένα ως προς την τετμημένη x b Προσδιορίζουμε δύο ακραία σημεία P 1 και P 2 (μέρη του περιβλήματος) b Το σύνολο σημείων S διαιρείται σε δύο υποσύνολα S 1 και S 2 b Υπολογίζουμε το κυρτό περίβλημα για το S 1 b Ομοίως, υπολογίζουμε το κυρτό περίβλημα για το S 1 P1P1 P2P2 P max
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο23 b Υπολογισμός του κυρτού (επάνω) περιβλήματος για το S 1 Βρίσκουμε το πιο απομακρυσμένο σημείο P max από τη γραμμή P 1 P 2Βρίσκουμε το πιο απομακρυσμένο σημείο P max από τη γραμμή P 1 P 2 Υπολογίζουμε το περίβλημα για τα σημεία αριστερά της γραμμής P 1 P maxΥπολογίζουμε το περίβλημα για τα σημεία αριστερά της γραμμής P 1 P max Υπολογίζουμε το περίβλημα για τα σημεία αριστερά της γραμμής P max P 2Υπολογίζουμε το περίβλημα για τα σημεία αριστερά της γραμμής P max P 2 b Εύρεση του σημείου P max Το P max μεγιστοποιεί την επιφάνεια του τριγώνου P max P 1 P 2Το P max μεγιστοποιεί την επιφάνεια του τριγώνου P max P 1 P 2 Σε περίπτωση ισοπαλίας, επιλέγεται το P max που μεγιστοποιεί τη γωνία P max P 1 P 2Σε περίπτωση ισοπαλίας, επιλέγεται το P max που μεγιστοποιεί τη γωνία P max P 1 P 2 b Τα σημεία μέσα στο τρίγωνο P max P 1 P 2 αγνοούνται εφεξής b Πως θα βρεθεί γεωμετρικά το σημείο P max και τα σημεία στα αριστερά της γραμμής P 1 P max ? Αλγόριθμος QuickHull (2)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο24 b Πως θα βρεθεί γεωμετρικά το σημείο P max και τα σημεία στα αριστερά της γραμμής P 1 P max ? Δίνονται τα σημεία P 1 (x 1,y 1 ), P 2 (x 2,y 2 ), P max (x max,y max )Δίνονται τα σημεία P 1 (x 1,y 1 ), P 2 (x 2,y 2 ), P max (x max,y max ) Το εμβαδόν του τριγώνου είναι 1/2 της ορίζουσαςΤο εμβαδόν του τριγώνου είναι 1/2 της ορίζουσας =x 1 y 2 +x max y 1 +x 2 y max –x max y 2 –x 2 y 1 –x 1 y max =x 1 y 2 +x max y 1 +x 2 y max –x max y 2 –x 2 y 1 –x 1 y max Το πρόσημο της έκφρασης είναι θετικό αν και μόνο αν το σημείο P max είναι στα αριστερά της γραμμής P 1 P 2Το πρόσημο της έκφρασης είναι θετικό αν και μόνο αν το σημείο P max είναι στα αριστερά της γραμμής P 1 P 2 x1x1x1x1 y1y1y1y11 x2x2x2x2 y2y2y2y21 x max y max 1 Αλγόριθμος QuickHull (3)
Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο25 b Η εύρεση του πλέον απομακρυσμένου σημείου από την ευθεία P 1 P 2 μπορεί να βρεθεί σε γραμμικό χρόνο b Έτσι προκύπτει η ίδια πολυπλοκότητα με τη γρήγορη ταξινόμηση: Χειρότερη περίπτωση: Θ(n 2 )Χειρότερη περίπτωση: Θ(n 2 ) Μέση περίπτωση: Θ(n log n)Μέση περίπτωση: Θ(n log n) b Αν τα σημεία δεν είναι αρχικά ταξινομημένα στον άξονα x, αυτό επιτυγχάνεται με κόστος Θ(n log n) — καμία αύξηση στο κόστος ασυμπτωτικά b Άλλοι αλγόριθμοι για το κυρτό περίβλημα: Σάρωση του Graham, DCHullΣάρωση του Graham, DCHull Επίσης σε Θ(n log n) Αποδοτικότητα Αλγορίθμου QuickHull (4)