Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
ΔιαΙρεςη και κυριαρχια
Πες κάτι για το πώς μπορώ να χωρίσω μία δουλειά σε φίλους μου ή συνεργάτες. (ως project manager για παράδειγμα)
2
Διαίρεση και Κυριαρχία
Διάσπαση ενός προβλήματος σε αρκετά υποπροβλήματα. Λύνουμε κάθε πρόβλημα ξεχωριστά. Συνδυάζουμε τις λύσεις των υποπροβλημάτων για το μεγαλύτερο πρόβλημα. Συνηθισμένη χρήση. Διάσπαση προβλήματος μεγέθους n σε δύο ίσα μέρη μεγέθους n/2. Αναδρομική επίλυση των δύο υποπροβλημάτων. Συνδυασμός των δύο λύσεων σε γραμμικό χρόνο. Αποτέλεσμα Εξαντλητική αναζήτηση: n2. Διαίρεση και Κυριαρχια: nlogn. "Divide and conquer", Caesar's other famous quote "I came, I saw, I conquered" Divide-and-conquer idea dates back to Julius Caesar. Favorite war tactic was to divide an opposing army in two halves, and then assault one half with his entire force. Divide et impera. Veni, vidi, vici. - Julius Caesar
3
Διαίρεση και Κυριαρχία
πρόβλημα μεγέθους n υποπρόβλημα 1 μεγέθους n/2 υποπρόβλημα 2 μεγέθους n/2 Διαίρεση μία λύση για το υποπρόβλημα 1 μία λύση για το υποπρόβλημα 2 Κυριαρχία Συνδυασμός Η λύση για το αρχικό πρόβλημα
4
Παραδείγματα Ταξινόμηση με συγχώνευση και γρήγορη ταξινόμηση
Διασχίσεις δένδρων Πολλαπλασιασμός πινάκων – Αλγόριθμος του Strassen Πρόβλημα Εγγύτερου Ζεύγους Κυρτό περίβλημα - Αλγόριθμος QuickHull
5
Γενική Αναδρομή – Κύριο Θεώρημα
T(n) = aT(n/b) + f (n) όπου f (n) ∈ Θ(nk), k≥0 a < bk T(n) ∈ Θ(nk) a = bk T(n) ∈ Θ(nk lg n ) a > bk T(n) ∈ Θ(nlog b a) Σημείωση: το ίδιο αποτέλεσμα ισχύει για το συμβολισμό O αντί για το Θ. This is the same slide from chapter 2 (analysis of recursive algorithms) It is a good idea to remind students at this point and do some examples especially if you went over this quickly and did not do examples the previous time. Here are examples from before: T(n) = T(n/2) + 1 T(n) = 2T(n/2) + n T(n) = 3 T(n/2) + n => this last example is important to mention at some point: Θ(nlog23) NB: cannot “eliminate” or simplify this constant
6
ΤαξινΟμηςη Quicksort (Πολύπλοκη διαίρεση – εύκολος συνδυασμός)
Mergesort (Εύκολη διαίρεση – πολύπλοκος συνδυασμός) ΤαξινΟμηςη
7
Quicksort Είσοδος: ένας πίνακας με n στοιχεία (π.χ. ακέραιους):
Αν ο πίνακας περιέχει ένα στοιχείο τότε επέστρεψε Αλλιώς Επέλεξε ένα στοιχείο ως τον οδηγό. Διαχώρισε τα στοιχεία σε δύο υποπίνακες: Στοιχεία μικρότερα ή ίσα με τον οδηγό Στοιχεία μεγαλύτερα του οδηγού Αναδρομική κλήση Quicksort για δύο υποπίνακες Επέστρεψε πίνακα Διαίρεση Κυριαρχία Συνδυασμός;;;;
8
Αλγόριθμος (1) 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])
9
Διαχωρισμός (2) 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 pA[l]; il; jr+1; repeat repeat ii+1 until A[i]≥p repeat jj-1 until A[j]≤p swap(A[i],A[j]) until i≥j swap(A[i],A[j]) //εξουδετέρωση αλλαγής όταν i≥j swap(A[l],A[j]) return j
10
Παράδειγμα Επιλογή οδηγού. 40 20 10 80 60 50 7 30 100 40 20 10 80 60
11
Διαχωρισμός – Αναδρομή
40 20 10 80 60 50 7 30 100 Quicksort Quicksort Ένα παράδειγμα διαχωρισμού Πράσινο: οδηγός Κίτρινο: δείκτης μικρότερων στοιχείων Γαλάζιο: δείκτης μεγαλύτερων στοιχείων
12
Ανάλυση Θ(n2) στη χειρότερη περίπτωση (γιατί;;;;)
Θ(nlogn) στη καλύτερη περίπτωση (γιατί;;;) Θ(nlogn) στη μέση περίπτωση (εξού και quick…) (ΓΙΑΤΙ;;;;)
13
Mergesort Διαίρεση του πίνακα σε δύο ίσους υποπίνακες.
Αναδρομική ταξινόμηση κάθε υποπίνακα. Συνδυασμός (συγχώνευση) των δύο υποπινάκων ώστε να ταξινομηθεί ο μεγαλύτερος. διαίρεση O(1) A L G O R I T H M S κυριαρχία 2T(n/2) A L G O R I T H M S συνδυασμός (συγχώνευση) O(n) A G L O R H I M S T A G H I L M O R S T
14
Αλγόριθμος (1)
15
Συγχώνευση (2)
16
Συγχώνευση A G L O R H I M S T Α G H I L M O R S T
17
Η Αναδρομική Σχέση Έστω T(n) = πλήθος συγκρίσεων της Μergesort για είσοδο μεγέθους n. Αναδρομή: Λύση: T(n) = O(n log2 n). Υπόθεση: το n είναι δύναμη του 2 και αντικαθιστούμε το με =. <= μιας και για τη συγχώνευση χρειαζόμαστε λιγότερες συγκρίσεις κατά μία σταθερά. Η υπόθεση ότι είναι δύναμη του 2 μπορεί να ακυρωθεί με 2 τρόπους: ασυμπτωτικά είναι ΟΚ μιας και μεγαλώνουμε το n στην επόμενη δύναμη του 2 και άρα είναι πάνω φράγμα. Διαφορετικά μπορεί να γίνει με επαγωγή και να δειχτεί ότι είναι <=n\lceil log_2n\rceil
18
Πώς Πολλαπλασιάζουμε Πίνακες αναδρομικά
Strassen
19
Πολλαπλασιασμός πινάκων αλά Strassen
Ο Strassen παρατήρησε [1969] ότι το γινόμενο δύο πινάκων A και B (μεγέθους 2nx2n) μπορεί να υπολογισθεί ως εξής: C00 C A00 A B00 B01 = * C10 C A10 A B10 B11 M1 + M4 - M5 + M M3 + M5 = M2 + M M1 + M3 - M2 + M6
20
Υποπίνακες του Strassen
M1 = (A00 + A11) * (B00 + B11) M2 = (A10 + A11) * B00 M3 = A00 * (B01 - B11) M4 = A11 * (B10 - B00) M5 = (A00 + A01) * B11 M6 = (A10 - A00) * (B00 + B01) M7 = (A01 - A11) * (B10 + B11)
21
Γενική Αναδρομή – Κύριο Θεώρημα
T(n) = aT(n/b) + f (n) όπου f (n) ∈ Θ(nk), k≥0 a < bk T(n) ∈ Θ(nk) a = bk T(n) ∈ Θ(nk lg n ) a > bk T(n) ∈ Θ(nlog b a) Σημείωση: το ίδιο αποτέλεσμα ισχύει για το συμβολισμό O αντί για το Θ. This is the same slide from chapter 2 (analysis of recursive algorithms) It is a good idea to remind students at this point and do some examples especially if you went over this quickly and did not do examples the previous time. Here are examples from before: T(n) = T(n/2) + 1 T(n) = 2T(n/2) + n T(n) = 3 T(n/2) + n => this last example is important to mention at some point: Θ(nlog23) NB: cannot “eliminate” or simplify this constant
22
Αποδοτικότητα του αλγορίθμου Strassen
Πλήθος πολλαπλασιασμών; Πλήθος προσθέσεων; Αναδρομή; Άλλοι αλγόριθμοι έχουν βελτιώσει αυτό το αποτέλεσμα αλλά είναι ακόμη περισσότερο σύνθετοι Ο(n2,3737)
23
πληςιΕςτερο ζεΥγος
24
Πλησιέστερο Ζεύγος Ορισμός: Δοθέντων n σημείων στο επίπεδο βρες ένα ζεύγος με τη μικρότερη ευκλείδια απόσταση μεταξύ τους. Ωμή βία; 1-D εκδοχή: O(nlogn) αν τα σημεία είναι πάνω στην ευθεία. Υπόθεση: Δεν υπάρχουν σημεία με ίδια x συντεταγμένη.
25
Μία Πρώτη Προσπάθεια Διαίρεσης
L
26
Μία Πρώτη Προσπάθεια Διαίρεσης
L
27
Αλγόριθμος – Καλύτερη Διαίρεση
Διαίρεση: Μία κάθετη γραμμή L που διαιρεί έτσι ώστε n/2 σημεία σε κάθε πλευρά. L
28
Αλγόριθμος Διαίρεση: Μία κάθετη γραμμή L που διαιρεί έτσι ώστε να είναι n/2 σημεία σε κάθε πλευρά. Κυριαρχία: εύρεση πλησιέστερου ζεύγους σε κάθε πλευρά αναδρομικά. L 21 12
29
Αλγόριθμος Διαίρεση: Μία κάθετη γραμμή L που διαιρεί έτσι ώστε να είναι n/2 σημεία σε κάθε πλευρά. Κυριαρχία: εύρεση πλησιέστερου ζεύγους σε κάθε πλευρά αναδρομικά. Συνδυασμός: εύρεση πλησιέστερου ζεύγους με ένα σημείο σε κάθε πλευρά. Επιστροφή του πλησιέστερου από τα τρία ζεύγη. L 8 21 12
30
Πλησιέστερο Ζεύγος Εύρεση πλησιέστερου ζεύγους με κάθε σημείο σε μία πλευρά, υποθέτοντας ότι η απόσταση είναι < δ. L 21 = min(12, 21) 12
31
Πλησιέστερο Ζεύγος Εύρεση πλησιέστερου ζεύγους με κάθε σημείο σε μία πλευρά, υποθέτοντας ότι η απόσταση είναι < δ. L 21 Observation: only need to consider points within of line L. = min(12, 21) 12
32
Πλησιέστερο Ζεύγος Εύρεση πλησιέστερου ζεύγους με κάθε σημείο σε μία πλευρά, υποθέτοντας ότι η απόσταση είναι < δ. Ταξινόμηση σημείων στην 2-λωρίδα με βάση την y συντεταγμένη. L 7 6 21 5 4 = min(12, 21) 12 3 2 1
33
Πλησιέστερο Ζεύγος Εύρεση πλησιέστερου ζεύγους με κάθε σημείο σε μία πλευρά, υποθέτοντας ότι η απόσταση είναι < δ. Ταξινόμηση σημείων στην 2-λωρίδα με βάση την y συντεταγμένη. Έλεγχος αποστάσεων αυτών με σημεία το πολύ εντός 11 θέσεων στη λίστα!!! L 7 6 21 5 4 = min(12, 21) 12 3 2 1
34
Πλησιέστερο Ζεύγος Έστω si το σημείο στην 2-λωρίδα με την i-οστή μικρότερη y συντεταγμένη. Αν |i–j|12, τότε η απόσταση μεταξύ si και sj είναι τουλάχιστον . Απόδειξη: Δεν υπάρχουν 2 σημεία στο ίδιο ½ x ½ κουτί. Δύο σημεία που απέχουν τουλάχιστον δύο γραμμές έχουν απόσταση 2(½). ▪ j 39 31 ½ 2 γραμμές 30 ½ 29 i ½ 28 27 Fact. Still true if we replace 12 with 7. can reduce neighbors to 6 Note: no points on median line (assumption that no points have same x coordinate ensures that median line can be drawn in this way) 26 25
35
Αλγόριθμος Closest-Pair(p1, …, pn) {
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 . return . } O(n log n) 2T(n / 2) O(n) O(n log n) O(n) separation can be done in O(N) using linear time median algorithm
36
Ανάλυση Μπορούμε να πετύχουμε O(nlogn)?
ΝΑΙ Ιδέα: Μην ταξινομείς τα σημεία στη λωρίδα από την αρχή κάθε φορά. Κάθε αναδρομή επιστρέφει δύο λίστες: όλα τα σημεία διατεταγμένα ως προς x και όλα ως προς y. Ταξινομούμε με συχγώνευση δύο ταξινομημένες λίστες.
37
ΚυρτΑ ΠεριβλΗματα
38
Κυρτό Σύνολο & Μη-κυρτό Σύνολο
Μία επίπεδη περιοχή R είναι κυρτή αν και μόνο αν για κάθε ζεύγος σημείων p, q R, το ευθύγραμμο τμήμα pq κείται εντός του R. Διαφορετικά το αποκαλούμε μη-κυρτό. p q R 2 Μη-κυρτό Κυρτό p q R 1
39
Κυρτό Περίβλημα Το κυρτό περίβλημα CH(Q) ενός συνόλου Q είναι η μικρότερη κυρτή περιοχή που περιέχει το Q. Λαστιχάκι Όταν το Q είναι πεπερασμένο, το κυρτό του περίβλημα είναι το μοναδικό κυρτό πολύγωνο του οποίου οι κορυφές ανήκουν στο Q και περιέχει όλα τα σημεία του Q.
40
Το Πρόβλημα του Κυρτού Περιβλήματος
Είσοδος: ένα σύνολο P = {p1, p2, …, pn} από σημεία Έξοδος: μία λίστα κορυφών του CH(P) σε ωρολόγια διάταξη. Παράδειγμα: 8 p 9 2 10 5 7 6 1 3 4 Έξοδος: p5, p7, p10, p8, p2, p9
41
Ακμές του Κυρτού Περιβλήματος
Για κάθε ακμή και τα δύο άκρα p, q P. Όλα τα υπόλοιπα σημεία του P κείνται στην ίδια πλευρά της ευθείας που ορίζεται από τα p και q q p
42
1ος Αλγόριθμος Βασιζόμενοι σε αυτή την παρατήρηση μπορείτε να σκεφτείτε έναν αλγόριθμο; q p O(n3)
43
Δεξιά ή Αριστερά της Ευθείας;
q p z
44
Σχετικά με τη Διάταξη Αντιωρολόγια διάταξη Ωρολόγια Διάταξη Συγγραμικά
p 1 2 p 1 2 p 1 2 Αντιωρολόγια διάταξη Ωρολόγια Διάταξη Συγγραμικά Το εξωτερικό γινόμενο είναι ένας απλός αριθμός στις δύο διαστάσεις. Είναι η ορίζουσα που προκύπτει από τα αντίστοιχα διανύσματα.
45
Ο Αλγόριθμος QuickHull – Γενικά
Υπολογίζει το Κυρτό Περίβλημα με έμπνευση από τη Γρήγορη Ταξινόμηση: Υποθέτουμε ότι τα σημεία είναι ταξινομημένα ως προς την συντεταγμένη x Προσδιορίζουμε δύο ακραία σημεία P1 και P2 (μέρη του περιβλήματος) Το σύνολο σημείων S διαιρείται σε δύο υποσύνολα S1 και S2 Υπολογίζουμε το κυρτό περίβλημα για το S1 Ομοίως, υπολογίζουμε το κυρτό περίβλημα για το S2 S1 Pmax P2 P1 S2
46
QuickHull Υπολογισμός του κυρτού (επάνω) περιβλήματος για το S1
Βρίσκουμε το πιο απομακρυσμένο σημείο Pmax από τη γραμμή P1P2 Υπολογίζουμε το περίβλημα για τα σημεία αριστερά της γραμμής P1Pmax Υπολογίζουμε το περίβλημα για τα σημεία αριστερά της γραμμής PmaxP2 Εύρεση του σημείου Pmax Το Pmax μεγιστοποιεί την επιφάνεια του τριγώνου PmaxP1P2 Σε περίπτωση ισοπαλίας, επιλέγεται το Pmax που μεγιστοποιεί τη γωνία PmaxP1P2 Τα σημεία μέσα στο τρίγωνο PmaxP1P2 αγνοούνται εφεξής Pmax P2 P1
47
Quickhull S1 p7 p4 p5 p3 p10 p6 p11 p9 p2 p1 p8 p12
48
Quickhull S1 p7 p3 p5 p4 p10 p6 p9 p11 p2 p1 p8 p12
49
Αποδοτικότητα QuickHull
Η εύρεση του πλέον απομακρυσμένου σημείου από την ευθεία P1P2 μπορεί να βρεθεί σε γραμμικό χρόνο Έτσι προκύπτει η ίδια πολυπλοκότητα με τη γρήγορη ταξινόμηση: Χειρότερη περίπτωση: Θ(n2) Μέση περίπτωση: Θ(n log n) Αν τα σημεία δεν είναι αρχικά ταξινομημένα στον άξονα x, αυτό επιτυγχάνεται με κόστος Θ(nlogn)
50
Μείωση και Κυριαρχία
51
Μείωση και Κυριαρχία Μειώνουμε το στιγμιότυπο του προβλήματος σε ένα μικρότερο στιγμιότυπο του ιδίου προβλήματος Επιλύουμε το μικρότερο στιγμιότυπο Επεκτείνουμε τη λύση του μικρότερου προβλήματος για να λύσουμε το αρχικό πρόβλημα Συναντάται και με τις δύο μορφές: «από κάτω προς τα πάνω (bottom-up» και «από πάνω προς τα κάτω (top-down)» Αναφέρεται επίσης και ως επαγωγική (inductive) ή επαυξητική (incremental) προσέγγιση
52
Παραδείγματα Μείωση κατά ένα: Ταξινόμηση με εισαγωγή
Αλγόριθμοι αναζήτησης σε γράφους: DFS, BFS, τοπολογική ταξινόμηση Αλγόριθμοι για τη δημιουργία διατάξεων, υποσυνόλων Μείωση κατά ένα σταθερό όρο: Δυαδική αναζήτηση Προβλήματα κίβδηλων νομισμάτων Πολλαπλασιασμός αλά ρωσικά Πρόβλημα του Josephus Μείωση κατά μεταβλητό μέγεθος: Αλγόριθμος του Ευκλείδη Το Πρόβλημα της Επιλογής Αναζήτηση Παρεμβολής
53
Ποιά είναι η διαφορά; Έστω το πρόβλημα της ύψωσης σε δύναμη: an
Ωμή Βία: Διαίρει και Βασίλευε: Μείωσε κατά ένα: Μείωσε κατά ένα σταθερό όρο: Try to get the students involved in coming up with these: Brute Force: an= a*a*a*a*...*a n Divide and conquer: an= an/2 * an/2 Decrease by one: an= an-1* a (one hopes a student will ask what is the difference with brute force here there is none in the resulting algorithm, of course, but you can arrive at it in two different ways) Decrease by constant factor: an= (an/2) (again, if no student asks about it, be sure to point out the difference with divide and conquer. Here there is a significant difference that leads to a much more efficient algorithm – in divide and conquer we re-compute an/2)
54
Ταξινόμηση με Εισαγωγή
Διασχίσεις Γράφων ΜεΙωςη ΚατΑ Ενα
55
Ταξινόμηση με Εισαγωγή
56
Ένα Βήμα της Ταξινόμησης με Εισαγωγή
3 4 7 12 14 20 21 33 38 10 55 9 23 28 16 ταξινομημένο Επόμενο προς εισαγωγή 10 v < 10 12 14 14 20 21 33 38 10 3 4 7 55 9 23 28 16 ταξινομημένο
57
Ταξινόμηση με Εισαγωγή
Χρονική αποδοτικότητα Cworst(n) = n(n-1)/2 Θ(n2) Cavg(n) ≈ n2/4 Θ(n2) Cbest(n) = n - 1 Θ(n) (είναι γρήγορη και για σχεδόν ταξινομημένους πίνακες) Χωρική αποδοτικότητα: επιτόπιος αλγόριθμος (in-place) Ευστάθεια: ναι
58
Διάσχιση Γράφων Πολλά προβλήματα απαιτούν τη συστηματική επεξεργασία των κορυφών ενός γράφου Αλγόριθμοι διάσχισης γράφου: Αναζήτηση κατά βάθος (depth-first search - DFS) Αναζήτηση κατά πλάτος (breadth-first search - BFS)
59
Πώς βρίσκω αν ένας απλός γράφος είναι άκυκλος;
DFS Το σύνολο των ακμών που χρησιμοποιούνται σε μία αναζήτηση DFS είναι οι ακμές ενός δένδρου. Υλοποίηση με στοίβα Ο αλγόριθμος διακρίνει δύο ξένα μεταξύ τους σύνολα ακμών: το σύνολο Τ των ακμών που περιέχονται στα δένδρα του δάσους και ονομάζονται δενδρικές ακμές το σύνολο B=E-T των υπόλοιπων ακμών που ονομάζονται οπίσθιες ακμές 8/ 9 4/ 13 1/ 16 σελ. 116 Πώς βρίσκω αν ένας απλός γράφος είναι άκυκλος; 7/ 10 6/ 11 5/ 12 3/ 14 2/ 15
60
DFS Η DFS μπορεί να υλοποιηθεί με γράφους που αναπαρίστανται:
Πίνακα γειτνίασης: Θ(V2) Συνδεδεμένες λίστες γειτνίασης: Θ(V+E) Δίνει δύο διακριτές διατάξεις κορυφών: καθώς οι κορυφές συναντώνται για πρώτη φορά (όταν ωθούνται σε μία στοίβα) καθώς οι κορυφές συναντώνται για δεύτερη φορά (όταν απωθούνται από τη στοίβα) Εφαρμογές (Hopcroft-Tarjan): Έλεγχος συνδεσιμότητας, εύρεση συνδεδεμένων συνιστωσών Έλεγχος κύκλων, σημεία συναρμογής Εύρεση του χώρου καταστάσεων του προβλήματος προς επίλυση (AI)
61
Αναζήτηση κατά Πλάτος (BFS)
Εξερευνούμε το γράφο επισκεπτόμενοι όλους του γείτονες του τελευταίου επισκεφθέντος κόμβου Παρόμοια με τη διάσχιση κατά επίπεδα Χρήση ουράς (αντί στοίβα) Ακμές δένδρου – ακμές διασταύρωσης Εφαρμογές: όπως DFS, αλλά επίσης μπορούμε να βρούμε μονοπάτια από κόμβο σε κόμβο με το μικρότερο αριθμό ακμών
62
Παράδειγμα Όταν ο αλγόριθμος BFS σταματά, τότε σε κάθε κορυφή προσπελάσιμη από την κορυφή x έχει δοθεί μία επιγραφή με την απόστασή της από την x. Πολυπλοκότητα Ο(|Ε|), αν ο γράφος είναι υλοποιημένος με λίστα γειτνίασης 4 3 4 3 2 4 3 2 1 1
63
BFS Η BFS έχει την ίδια αποτελεσματικότητα με τη DFS αναλόγως αν ο γράφος υλοποιείται με: Πίνακες γειτνίασης: Θ(V2) Συνδεδεμένες λίστες γειτνίασης: Θ(V+E) Δίνει μόνο μία διάταξη των κορυφών (η σειρά εισαγωγής/εξαγωγής από την ουρά είναι ίδια)
64
ΜεΙωςη ΚατΑ ΣταθερΟ ΠαρΑγοντα
Δυαδική αναζήτηση Προβλήματα κίβδηλων νομισμάτων ΜεΙωςη ΚατΑ ΣταθερΟ ΠαρΑγοντα
65
Δυαδική Αναζήτηση Ψάχνουμε το 16 1 3 5 6 7 9 10 11 13 15
Δεν βρέθηκε!!!!! Αριθμός βημάτων: 4
66
Δυαδική Αναζήτηση Η αναδρομική που την περιγράφει είναι η T(n)=T(n/2)+1 (περίπου)
67
Κίβδηλο Νόμισμα Μεταξύ n νομισμάτων με ίδια όψη, το ένα είναι κίβδηλο. Έστω ότι είναι ελαφρύτερο. Χωρίζουμε τα νομίσματα σε δύο κατηγορίες από n/2 νομίσματα, συν 1 νόμισμα αν το n είναι περιττός αριθμός Τι θα συμβεί αν χωρίσουμε σε 3 κατηγορίες?
68
ΜεΙωςη ΚατΑ ΜεταβλητΟ ΜΕγεθος
Το Πρόβλημα της Επιλογής Αναζήτηση Παρεμβολής ΜεΙωςη ΚατΑ ΜεταβλητΟ ΜΕγεθος
69
Πρόβλημα Επιλογής Στατιστικά διατάξεων: βρες τον k-οστό αριθμό
Καλύτερα να διαμερίσουμε όπως στη γρήγορη ταξινόμηση Επίδοση στην καλύτερη, χειρότερη και μέση περίπτωση
70
Πρόβλημα Επιλογής procedure find(left,right,k); 1. if left=right then return A[left] 2. else 3. i ← left; j ← right+1; pivot ← A[right]; 4. repeat 5. repeat i ← i+1 until A[i]>=pivot; 6. repeat j ← j-1 until A[j]<=pivot; 7. if i<j then swap(A[i],A[j]); 8. until j<=i; 9. swap(A[left],A[j]); 10. if k=j then return A[j] 11. else if (k<j) then find(left,j-1,k) 12. else find(j+1,right,k-j);
71
Παράδειγμα k=5 left right k 17 12 6 23 19 8 5 10 1 8
βρέθηκε: 5
72
Αναζήτηση Παρεμβολής mid Αντί να βρίσκουμε το μεσαίο στοιχείο προσεγγίζουμε την θέση του λίγο καλύτερα ως εξής:
73
Διαίσθηση Το βρήκαμε με τη μία, αλλά δεν είμαστε πάντα τόσο τυχεροί!!!
2 4 5 6 7 9 10 12 14 15 Το βρήκαμε με τη μία, αλλά δεν είμαστε πάντα τόσο τυχεροί!!! Ψάξε για το 9 στη δεύτερη περίπτωση 1 2 3 4 5 6 7 8 9 200 Πολυπλοκότητα: Ο(n) στη χειρότερη περίπτωση. Πολυπλοκότητα: Ο(loglogn) στη μέση.
74
Μετασχηματισμός και Κυριαρχία
75
Μετασχημάτισε και Κυριάρχησε
Μπορούμε να επιλύσουμε ένα πρόβλημα με μετασχηματισμό σε: Ένα περισσότερο βολικό στιγμιότυπο του ιδίου προβλήματος (απλοποίηση στιγμιότυπου) Προταξινόμηση, Gaussian απαλοιφή, αντιστροφή πίνακα, υπολογισμός ορίζουσας Μία διαφορετική αναπαράσταση του ίδιου στιγμιότυπου (αλλαγή αναπαράστασης) Ισοζυγισμένα δυαδικά δένδρα, σωροί και ταξινόμηση με σωρό, υπολογισμός πολυωνύμου με τον κανόνα του Horner, γρήγορος μετασχηματισμός Fourier Ένα τελείως διαφορετικό πρόβλημα (αναγωγή προβλήματος) Αναγωγή σε προβλήματα γράφων, γραμμικός προγραμματισμός
76
ΑπλοποΙηςη ΣτιγμιοτΥπου
Προταξινόμηση Gaussian απαλοιφή Αντιστροφή πίνακα Υπολογισμός ορίζουσας ΑπλοποΙηςη ΣτιγμιοτΥπου
77
Προταξινόμηση Ένα στιγμιότυπο ενός προβλήματος επιλύεται μετασχηματίζοντάς το σε ένα απλούστερο/ευκολότερο στιγμιότυπο του ιδίου προβλήματος Προταξινόμηση: Πολλά προβλήματα με λίστες επιλύονται ευκολότερα αν οι λίστες είναι ταξινομημένες Μοναδικότητα στοιχείου Υπολογισμός της τυπικής τιμής (mode) Υπολογισμός επαναλαμβανόμενων στοιχείων Αναζήτηση Υπολογισμός του μέσου
78
Εύρεση Επαναλαμβανόμενων Στοιχείων
Αλγόριθμος ωμής βίας: Θ(n2) Αλγόριθμος με προταξινόμηση: Ταξινόμηση με συγχώνευση: Θ(nlgn) Σάρωσε τον πίνακα για την εύρεση ίδιων διαδοχικών στοιχείων: Θ(n) Συνολικά: Θ(nlgn) Συμπέρασμα: η προταξινόμηση βελτιώνει σημαντικά Το πρόβλημα του να βρω όλα τα στοιχεία που επαναλαμβάνονται τουλάχιστον μία φορά.
79
Έλεγχος της Τυπικής Τιμής
Τυπική τιμή (mode) είναι το συχνότερο στοιχείο Ωμή βία: Σάρωσε τη λίστα, υπολόγισε τις συχνότητες, βρες τη μεγαλύτερη Algorithm PresortedMode Sort the array A i0; modefrequency0; while i ≤ n-1 do runlength1; runvalueA[i]; while i+runlength≤n-1 and A[i+runlength]=runvalue runlengthrunlength+1 if runlength>modefrequency modefrequencyrunlength, modevaluerunvalue ii+runlength return modevalue Συμπέρασμα: η προταξινόμηση και πάλι βοηθά την επίδοση
80
Έλεγχος μοναδικότητας στοιχείου
Αλγόριθμος ωμής βίας: Θ(n2) Algorithm PresortedElementUniqueness Sort the array A for i 0 to n-2 do if A[i]=A[i+1] return false else return true Συμπέρασμα: η προταξινόμηση βελτιώνει την επίδοση Να μην υπάρχουν διπλότυπα
81
Το Πρόβλημα της Επιλογής
Βρες το k-οστό μικρότερο στοιχείο μεταξύ των A[1],…,A[n] Το ελάχιστο: k = 1 Το μέγιστο: k = n Τον μέσο: k = n/2 Αλγόριθμοι με προταξινόμηση Ταξινόμησε τη λίστα Επίστρεψε το A[k] Αλγόριθμοι με διαμερισμό (μείωσε και βασίλευε): Με διαμερισμό τοποθέτησε τον pivot στη θέση A[s] Αν s=k , τότε επίστρεψε A[s] Αλλιώς αν s<k, τότε επανάλαβε με την υπολίστα A[s+1],…,A[n] Αλλιώς αν s>k, τότε επανάλαβε με την υπολίστα A[1],…,A[s-1]
82
Σημειώσεις στο Πρόβλημα της Επιλογής
Αλγόριθμοι με προταξινόμηση: Ω(nlgn) + Θ(1) = Ω(nlgn) Αλγόριθμοι με διαμερισμό (μείωσε και βασίλευε): Χειρότερη περίπτωση: T(n) =T(n-1) + (n+1) Θ(n2) Καλύτερη περίπτωση: Θ(n) Μέση περίπτωση: T(n) =T(n/2) + (n+1) Θ(n) Bonus: βρίσκει επίσης τα k μικρότερα στοιχεία Ειδικές περιπτώσεις max, min: καλύτεροι και απλούστεροι γραμμικοί αλγόριθμοι (ωμή βία) Συμπέρασμα: η προταξινόμηση δεν βοηθά την περίπτωση αυτή
83
Ένα Πρόβλημα (6.1.11) Το Πρόβλημα του Αναγραμματισμού.
Δίνεται ένα λεξικό με 70,000 λέξεις. Γράψτε ένα πρόγραμμα που δοθείσης μίας λέξης ως είσοδο επιστρέφει όλους τους αναγραμματισμούς αυτής της λέξης που εμφανίζονται στο λεξικό.
84
Gaussian Απαλοιφή Δίνεται σύστημα δύο εξισώσεων με δύο αγνώστους
a11x + a12y = b1 a21x + a22y = b2 Έχει μία μοναδική λύση εκτός αν οι συντελεστές είναι ανάλογοι Εκφράζουμε τη μία μεταβλητή ως συνάρτηση της άλλης και αντικαθιστούμε για να επιλύσουμε μία εξίσωση Τι συμβαίνει σε σύστημα με n εξισώσεις και n αγνώστους;
85
Gaussian Απαλοιφή Μετασχηματίζουμε τη Ax=b σε A’x=b’, όπου ο πίνακας A’ είναι άνω τριγωνικός Η λύση είναι εφικτή με αντικατάσταση προς τα πίσω Βασικές πράξεις Ανταλλαγή εξισώσεων Αντικατάσταση μίας εξίσωσης με ένα πολλαπλάσιο (μη μηδενικό) Αντικατάσταση μίας εξίσωσης με το άθροισμα ή τη διαφορά της εξίσωσης αυτής με το πολλαπλάσιο μίας άλλης Παράδειγμα: 2x1 - x2 + x3 = 1 4x1 + x2 - x3 = 5 x1 + x2 + x3 = 0
86
Gaussian Απαλοιφή Algorithm GaussElimination
for i 1 to n do A[i,n+1]b[i] for i 1 to n-1 do for ji+1 to n do for ki to n+1 do A[j,k]A[j,k] A[i,k]*A[j,i]/A[i,i] Προβληματική λύση αν το A[i,i] είναι 0 ή πολύ μικρό
87
Gaussian Απαλοιφή (partial pivoting)
Algorithm GaussElimination2 for i 1 to n do A[i,n+1]b[i] for i 1 to n-1 do pivotrowi for ji+1 to n do if |A[j,i]|>|A[pivot,i]| pivotrowj for ki to n+1 do swap(A[i,k],A[pivotrow,k]) tempA[j,i]/A[i,i] A[j,k]A[j,k]-A[i,k]*temp
88
ΑλλαγΗ ΑναπαρΑςταςης Ισοζυγισμένα δυαδικά δένδρα
Σωροί και ταξινόμηση με σωρό Υπολογισμός πολυωνύμου με τον κανόνα του Horner Γρήγορος μετασχηματισμός Fourier ΑλλαγΗ ΑναπαρΑςταςης
89
Ταξινόμηση Αλγορίθμων Αναζήτησης
Στοιχειώδεις αλγόριθμοι αναζήτησης Σειριακή αναζήτηση Δυαδική αναζήτηση Αναζήτηση δυαδικού δένδρου Αναζήτηση ισοζυγισμένου δένδρου Δένδρα AVL (απλοποίηση έκφανσης) Κόκκινα-μαύρα δένδρα (απλοποίηση έκφανσης) Πολυκατευθυνόμενα ισοζυγισμένα δένδρα (δένδρα 2-3, δένδρα 2-3-4, B-δένδρα) (αλλαγή αναπαράστασης) Κατακερματισμός (αλλαγή αναπαράστασης) Με αλυσίδες Ανοικτής διευθυνσιοδότησης Αλλαγή αναπαράστασης
90
Δένδρα Αναζήτησης Πολλαπλών Δρόμων
(a,b)–δένδρα: a. Οι κόμβοι μπορεί να περιέχουν από a-1 έως b-1 στοιχεία. b. Ένας κόμβος με k στοιχεία έχει k + 1 παιδιά c. Όλα τα φύλλα είναι στο ίδιο επίπεδο.
91
Παράδειγμα Ένα 2-3 δένδρο με 18 στοιχεία. 20 80 5 30 70 90 100 25
20 80 5 30 70 25 40 50 75 85 2 4 10 95
92
Ενημέρωση Ένθεση: Αναζήτηση του σωστού φύλλου. Αν υπάρχει μόνο ένα στοιχείο σε αυτό απλά πρόσθεσε το καινούργιο. Αν δεν υπάρχει χώρος μεταφέρουμε το μεσαίο στοιχείο στον πατέρα και διασπάμε το παιδί σε δύο παιδιά μοιράζοντας αντίστοιχα τα στοιχεία.
93
Ένθεση Ένθεση(3); 20 80 5 30 70 40 50 75 85 10 15 23 25 95
94
Ένθεση Ενδιάμεσα... 20 80 5 30 70 3 23 25 40 50 75 85 2 10 15 95 4
95
Ένθεση Τελική μορφή 20 80 3 5 30 70 4 23 25 40 50 75 85 2 10 15 95
96
Το Δένδρο Μεγαλώνει από τη Ρίζα
Ένθεση(45) 20 80 3 5 30 70 4 25 75 85 2 10 95
97
Διάσπαση Ρίζας 45 20 80 3 5 30 70 4 25 40 50 75 85 2 10 95
98
Διαγραφή Αν το στοιχείο δεν είναι σε φύλλο αντάλλαξε με το επόμενο σε ενδοδιάταξη. Αν το φύλλο έχει και άλλο στοιχείο, διέγραψε το στοιχείο που επιθυμείς. Αν το φύλλο έχει ένα μόνο στοιχείο αλλά ένας αδερφός του έχει δύο τότε κάνε διαμοίραση των στοιχείων στα φύλλα μετά την διαγραφή
99
Διαγραφή Διαγραφή(80) (αλλαγή με το επόμενη σε ενδοδιάταξη στοιχείο)
45 20 85 3 5 30 70 4 25 40 50 75 80 2 10 95
100
Διαγραφή Διαμοίραση 45 20 85 3 5 30 70 Η ιδέα είναι ότι όπου μπορούμε κάνουμε διαμοίραση. Γιατί; 120 4 25 40 50 75 90 2 10 100
101
(2,4)-δένδρα ρίζα Ένθεση: O(logn) Διαγραφή: O(logn) Αναζήτηση: O(logn)
1. Αναζήτηση(34) ρίζα 2. Ένθεση(10) 3. Διαγραφή(21) 4 5 6 8 9 11 13 15 17 19 21 23 24 27 31 33 34 35 37 41 42 51 53 10 x Ένθεση: O(logn) Διαγραφή: O(logn) Αναζήτηση: O(logn) Πράξεις Ενημέρωσης: Αναζήτηση Ενημέρωση Επαναζύγιση
102
Ο κανόνας του Horner Ανακοινώθηκε στις αρχές του 19ου αιώνα
Κατά τον Knuth, η μέθοδος χρησιμοποιήθηκε από το Νεύτωνα Υπολογισμός του πολυωνύμου στο σημείο x p(x) = anxn + an-1xn-1 + … + a1x + a0 p(x) = ( … (anx + an-1) x + … )x + a0 Παράδειγμα: υπολογισμός του p(x)=2x4-x3+3x2+x-5 στο x=3 p(x) = x (x (x (2x-1) + 3) + 1) - 5
103
Ο κανόνας του Horner (2) Algorithm Horner(P[0..n],x)
// Evaluate polynomial at a given point // Input: an array P[0..n] of coefficients and a number x //Output: the value of polynomial at point x p P[n] for i n-1 down to 0 do p x*p + P[i] return p Αποτελεσματικότητα; Παραπροϊόν: συντελεστές του πηλίκου της διαίρεσης του p(x) δια (x-x0)
104
ΑναγωγΗ ΠροβλΗματος Αναγωγή σε προβλήματα γράφων
Γραμμικός προγραμματισμός ΑναγωγΗ ΠροβλΗματος
105
Ελάχιστο Κοινό Πολλαπλάσιο
lcm(24,60)=120, lcm(11,5)=55 Παράδειγμα: 24 = 2 x 2 x 2 x 3 60 = 2 x 2 x 3 x 5 lcm(24,60) = (2x2x3) x 2 x 5 Αποτελεσματικότητα (απαιτείται λίστα πρώτων) lcm(m,n) = mn / gcd(m,n)
106
Μέτρηση Μονοπατιών σε Γράφο
Το πλήθος των διαφορετικών μονοπατιών μήκους k>0 από τον κόμβο i στον κόμβο j ισούται με το στοιχείο (i,j) του πίνακα Ak, όπου A ο πίνακας γειτνίασης Παράδειγμα Αποδοτικότητα
107
Μέτρηση Μονοπατιών σε Γράφο
1 2 3 1 4 M= 6 5 Το άθροισμα Μ1+Μ2+…+Μk υποδηλώνει το πλήθος των μονοπατιών από i σε j μήκους 1,2,…,k. 2 1 3 M2= Τι σημασία έχει ο Μ2 + Μ;
108
Μείωση σε Προβλήματα Γράφων
Εφαρμόζεται σε πλήθος προβλημάτων παιχνιδιών και γρίφων Κτίζουμε το γράφο του χώρου καταστάσεων Παράδειγμα: χωρικός, λύκος, κατσίκα, λάχανο
109
Ο Λύκος, η Κατσίκα και το Λάχανο…
Ένας ταξιδιώτης έχει έναν λύκο, μία κατσίκα και ένα λάχανο που πρέπει να περάσει από ένα ποτάμι. Το πρόβλημα είναι ότι αν μείνουν μόνα τους, ο λύκος τρώει το κατσίκι, ή το κατσίκι τρώει το λάχανο. Η βάρκα χωράει μόνο δύο, ένας εκ των οποίων είναι ο ταξιδιώτης. Πώς θα τα περάσει ο ταξιδιώτης απέναντι;
110
Ο Λύκος, η Κατσίκα και το Λάχανο…
(ΛυΚΤΛα,0) (Λυ,ΛαΤΚ) (ΛυΤΚ,Λα) (Κ,ΛυΤΛα) (ΚΤ,ΛυΛα) (ΛυΛα,ΤΚ) (ΛυΛαΤ,Κ) (Λα,ΛυΤΚ) (ΛαΤΚ,Λυ) (0,ΛυΚΤΛα)
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.