ΑΛΓΟΡΙΘΜΟΙ http://eclass.aueb.gr/courses/inf6/ Άνοιξη 07 - I. ΜΗΛΗΣ ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ Divide ad Coquer (D&C) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II
Divide & Coquer Αναδρομικά (μέχρι υπο-προβλήματα μεγέθους ): () Διαίρεσε το πρόβλημα σε υπο-προβλήματα μεγέθους /b () Λύσε α τέτοια υπο-προβλήματα (3) Συνδύασε τις λύσεις τους () + (3) : πολυπλοκότητα f() d (b m ) (): πολυπλοκότητα αt(/b) b d T ( ) at ( ) +, a > 0, b >, d ³ 0, b m ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II
Recursio Tree ad Complexity α 0 α b m Þ mlog b Level k : a Work for levelk : k a k k b α subproblems, each of d ö ø Total work for all levels: T( ) æ ç è d size / b æ ç è a d b d m k 0 k ö ø å æ ç è k a d b k ö ø a m ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 3
Master* Theorem If T ( ) at ( b ) + d, a > 0, b >, d ³ 0, the : ad b m ( m log b ), T ( ) ìo( ï ío( ï îo( d d log ), log b a b ), ), if if if d d d > < log log log b b b a a a ( b ( b ( b d d d > < a) a) a) Compare d ~ logb a ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 4
Maximum Sub-array (MSA) ΕΙΣΟΔΟΣ: Πίνακας αριθμών Α[..] ΕΞΟΔΟΣ: Υπο-πίνακας Α[p..q] με το μέγιστο άθροισμα στοιχείων Θέλουμε να βρούμε δείκτες p,q, p q, τέτοιους ώστε το V ( p, q) å A( i) να είναι μέγιστο i p δηλαδή, V ( p, q) ³ V ( p', q'), " p' q' Παράδειγμα: Ιστορία κερδών Year 3 4 5 6 7 8 9 Profit -3-4 5-3 - q Να βρεθεί η περίοδος ετών με το μεγαλύτερο κέρδος: V(5,8)9 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 5
Maximum Sub-array: D&C A[] S m ê + ú ê ë ú û S A[] S3 A[ m] A[ m + ] MCS είναι το μέγιστο από: S : MSA στον υπο-πίνακα A( m) S : MSA στον υπο-πίνκα A(m+,) S 3 : MSA που περιέχει ΚΑΙ το A(m) ΚΑΙ το A(m+) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 6
Maximum Sub-array: D&C R L S! 3 L R A[p] A[q] j q m q m V q m V q R m p i m p V m p V p L + " + ³ + " ³ ' '),, ( ), ( such that :fid ' ), ', ( ), ( such that :fid A[j] A[i] A[m] A[m+]
Maximum Sub-array: D&C Διαδικάσία fid_s 3 (A[i..j],m) Είσοδος: (υπο)πίνακας Α[i..j], µεσαία θέση m Έξοδος: Max sub-array που περιέχει τα στοιχεία Α[m] και Α[m+] (άθροισµα στοιχείων και θέσεις) LA[m], pm, LmaxA[m] for km- dow to i: LL+A[k] if L>Lmax: Lmax L, pk RA[m+], qm+, RmaxA[m+] for km+ to j: RR+A(k) if R>Rmax: Rmax R, qk S 3 Lmax+Rmax COMPLEXITY: O() ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 8
Maximum Sub-array: D&C διαδικασία MSA (A[i..j]) Είσοδος: (υπο)πίνακας Α[i..j] Έξοδος: Max sub-array του Α (άθροισµα στοιχείων και θέσεις) if ij: retur Vmax A[i], pi, qi else: ê i + j ú Divide: O() m ê ú ë û MSΑ (A[i,.m]) T(/) MSΑ (A[m+.. j]) T(/) fid_s 3 (A[i..j],m) O() Coquer: O() retur the maximum of these three MSA s (ad the correspodig p ad q) O() Αρχική κλήση: MSA(A[..]) MasterTheorem T( ) T ( ) + O( ), T() Þ T( ) O( log ) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 9
Maximum Sub-array: D&C ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 0
Merge Sort ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II
Merge Sort Divide: O() Coquer: O() ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II
Merge Sort O() T(/) T(/) Εύκολη διαίρεση του προβλήματος Εύρεση του ë/ û : Ο() Δύσκολη σύνθεση λύσεων υποπροβλημάτων merge : O() ì, if MasterTheorem T( ) í Þ T( ) O( log) ît ( / ) + O( ), if ³ Χώρος-Μνήμη : (θυμηθείτε την merge) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 3
Quick Sort QuickSort (A, p, r) if p < r: select pivot x; Partitio (A,p,r) //split A ito A[p,q-],A[q+,r]; // A[i] x, p i q- // x A[i], q+ i r // q is the fial positio of x QuickSort (A[p,q-]); QuickSort (A[q+,r]); T. Hoare, 960 p q r R. Sedgewick Ph.D. thesis, 975 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 4
Quick Sort Partitio (A, p, r) xa[r] ip- for j p to r-: if A[j] x: ii+ swap(a[i],a[j]) swap(a[i+],a[r]) qi+ retur q Complexity O() (- iteratios/comparisos) Elemets are compared oly with the pivot ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 5
Quick Sort Elemets are compared oly with the pivot(s) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 6
Quick Sort QuickSort (A, p, r) if p < r: select pivot x; Partitio (A,p,r) O() //split A ito A[p,q-],A[q+,r]; // A[i] x, p i q- // x A[i], q+ i r // q is the fial positio of x QuickSort (A[p,q-]); QuickSort (A[q+,r]); T(q-) T(-q) Divide: O() No Coquer Δύσκολη διαίρεση του προβλήματος Partitio (A,q,r) : Ο() Εύκολη σύνθεση λύσεων υποπροβλημάτων Δεν χρειάζεται να κάνουμε τίποτα! ΠΟΛΥΠΛΟΚΟΤΗΤΑ: T ( ) T( q -) + T( - q) + O( )??? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 7
Quick Sort - Worst Case q Partitio ito - ΣΕ ΚΑΘΕ ΒΗΜΑ Pivot is the mi (or the max) T() T(-) + å k k (+ ) O( ) Αν x A[r], πότε συμβαίνει η χειρότερη περίπτωση? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 8
Quick Sort - Best Case Partitio ito q ë / û é / ù- ΣΕ ΚΑΘΕ ΒΗΜΑ Pivot is the media (what s the cost to fid it?) T() æ ö Tç + O() è ø / O(log) / /4 /4 /4 /4........ log (depth of recursio) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 9
Quick Sort - Best Case k - Partitio ito ³ ΣΕ ΚΑΘΕ ΒΗΜΑ k k για όποια σταθερά k æ k - ö æ ö T() Tç + Tç + O() è k ø è k ø q k a k - Depth of recursio log log a log α O( log ) T() O(log) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 0
Quick Sort - Best Case k0 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II
Quick Sort - Average Case Ισοπίθανες μεταθέσεις Διαφορετικές τιμές των στοιχείων του πίνακα A[..] Κάθε pivot x (διαίρεση q) είναι ισοπίθανη Αverage case complexity average # of comparisos E(X) Έστω i: to i-στο μεγαλύτερο στοιχείο του πίνακα Α[..] E[X ij ij ] Pr[i is compared to j],, 3,.,i,, j,, -, ì, if i is compared to j Xij í î0, otherwise E[X ] Pr[i is compared to j] + 0 Pr[i ot NOTcompared to j] Expected # of comparisos E[X]? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II
Quick Sort - Average Case i: to i-στο μεγαλύτερο στοιχείο του πίνακα Α[..] E[X ij ] Pr[i iscompared to j] Expected # of comparisos E[X] E[X] é Eê ë - å i - å i å j i+ å j i+ X ij ù ú û - å i å j i+ E[X Pr[i iscompared to j] ij ] Þ Pr[i iscompared to j]? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 3
Quick Sort - Average Case Elemets are compared oly with the pivot(s) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 4
Quick Sort - Average Case ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 5
Quick Sort - Average Case ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 6
Quick Sort - Average Case ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 7
Quick Sort - Average Case ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 8 ) log ( ) ( j] iscompared to Pr[i E[X] comparisos Expected # of O H k k i j k i i k i i j k i j i i j i - ø ö ç è æ < + + - å å å å å å å å - - - - + - + -
Lower boud for sortig ΟΛΟΙ ΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΟΥ ΧΡΗΣΙΜΟΠΟΙΟΥΝ ΣΥΓΚΡΙΣΕΙΣ Συγκρίσεις στοιχείων ανά Δυαδικό δέντρο αποφάσεων συγκρίσεων # φύλλων # πιθανών διατάξεων! Δεν μπορεί να λείπει καμία διάταξη: τι θα απαντούσε ο αλγόριθμος αν η είσοδος του ταξινομείται σύμφωνα με αυτή τη διάταξη? ΠΟΛΥΠΛΟΚΟΤΗΤΑ μεγαλύτερο μονοπάτι ύψος του δέντρουd ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 9
Lower boud for sortig Πλήρες δυαδικό δένδρο ύψους d: # φύλλων d Κάθε δυαδικό δένδρο ύψους d (και το δικό μας): # φύλλων d # φύλλων # πιθανών διατάξεων! Άρα d! Þ d ³ log(!) dω(?) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 30
Lower boud for sortig ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 3 ) log ( ) (log log log... log... log...... log!) log( d W - ø ö ç è æ ø ö ç ç ç è æ ø ö ç è æ ø ö ç è æ ø ö ç è æ ø ö ç è æ ø ö ç è æ ³ ø ö ç è æ ø ö ç è æ + ø ö ç è æ + ³ ø ö ç è æ ø ö ç è æ + ø ö ç è æ + ³ ) log (!) log( ΠΟΛΥΠΛΟΚΟΤΗΤΑ Άρα d W ³
Media ad Selectio SELECTION (ΕΠΙΛΟΓΗ) ΕΙΣΟΔΟΣ: (διαφορετικοί μεταξύ) τους στοιχεία αριθμοί αριθμός k, k ΕΡΩΤΗΣΗ: το k-οστό μεγαλύτερο στοιχείο k: miimum, k: maximum k ë(+)/û à MEDIAN (ΔΙΑΜΕΣΟΣ) k odd: x x x M x x x (7, k 4) k eve: x x x M x x x x (8, k 4 - lower media) To στοιχείο από το οποίο οι μισοί αριθμοί είναι μικρότεροι και οι άλλοι μισοί μεγαλύτεροι Προφανής αλγόριθμος: Ο( log ) γιατί? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 3
Selectio Divide ad Coquer Select (A, p, r, k) if p r: retur A[p] select pivot x; Partitio (A,p,r) //split A ito A[p,q-],A[q+,r]; // A[i] x, p i q- // x A[i], q+ i r // q is the fial positio of x mq-p+ if km: retur A[q] else: if k < m: Select(A, p, q-, k) else: Select(A, q+,r, k-m) p q r k,,3 k4 MEDIAN k5,6,7,8 m4 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 33
Selectio Divide ad Coquer Selectio vs. Quicksort Quicksort: διαιρώ και αναδρομικά εξετάζω και τα τμήματα Selectio: διαιρώ και αναδρομικά εξετάζω μόνο το ένα τμήμα Selectio: Πολυπλοκότητα Χειρότερη περίπτωση: πάντα πάμε στο μεγαλύτερο τμήμα Complexity : T() T(max{ q -, - q}) + ( -) Best case: T() T(/) + O(): O() (ακόμα και αν kq στην πρώτη κλήση: Ο() ) Worst case: T() T(-) + O(): O( ) Average case:? ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 34
Selectio - D&C Average Case Equiprobable permutatios Each pivot x (partitio q) is equiprobable Distict values of elemets of A[..] q: fial positio of the pivot Pr[ partitio q] Expected complexity T ( ) å q..., T() T(max{ q -, - q}) + ( -) [ T (max{ q -, O(log) - q}) + ( -)] [Απόδειξη CLRS 9.] ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 35
Selectio Radomized D&C Select (A, p, r, k) if p r: retur A[p] repeat irandom(p,r) swap (A[i], A[r]) Partitio (A,p,r) Τυχαία επιλογή ενός αριθμού i: p i r util q³(r-p)/4 ad (r-q)³(r-p)/4 mq-p+ Μέχρι να βρεθεί ένα καλό pivot if km: retur A[q] else: if k < m: Select(A,p,q-,k) else: Select(A,q+,r,k-m) p() q r() Κακή επιλογή Καλή επιλογή Καλή επιλογή Κακή επιλογή /4 /4 3/4 ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 36
Selectio Radomized D&C Πόσες επαναλήψεις Z χρειάζονται μέχρι να βρεθεί ένα καλό pivot? Αναμονή μέχρι την πρώτη επιτυχία (Waitig for the first success) Z # επαναλήψεων µέχρι την πρώτη επιτυχία (radom variable) p Pr [ένα τυχαίο pivot είναι καλό] Pr[Zj] : πιθανότητα επιτυχίας στην j-οστή επανάληψη Pr[Zj] (-p) j- p : (,,, j-: αποτυχηµένες επαναλήψεις j: επιτυχηµένη επανάληψη) E[ Z] j p å j Pr[ Z j] å - j( - p) p å - p j p - p ( - p p) p j j Θυµηθείτε: å j j( - j( - p) p) j p j - p ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 37
Selectio Radomized D&C Πόσες επαναλήψεις Z χρειάζονται μέχρι να βρεθεί ένα καλό pivot? E [ Z] p, όπου p Pr [ένα τυχαίο pivot είναι καλό]? Κακή επιλογή Καλή επιλογή Καλή επιλογή Κακή επιλογή /4 /4 3/4 Τα μισά στοιχεία είναι καλές επιλογές! Άρα p Pr [ένα τυχαίο pivot είναι καλό] / και Ε[Z]! Με µόνο αναµενόµενες επαναλήψεις Αναµενόµενη πολυπλοκότητα: Τ() T(3/4) + Ο() O()! ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 38
Selectio O() worst case χώρισε τον πίνακα σε πεντάδες βρες τον μέσο κάθε πεντάδας βρες τον μέσο των μέσων Βρίσκουμε καλό pivot Worst case T()T(7/0)+T(/5)+Ο() Ο()! [ Blum, Floyd, Pratt, Rivest, Tarja - 973 ] ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 39
Selectio O() worst case χώρισε τον Α σε ë/5û ομάδες με 5 στοιχεία κάθε μία 54 ë/5û πεντάδες ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 40
Selectio O() worst case βρες τον μέσο κάθε πεντάδας: χρόνος O() γιατί? για όλες τις πεντάδες: χρόνος O() medias ë/5û πεντάδες ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 4
Selectio O() worst case βρες τον μέσο x των μέσων των πεντάδων: χρόνος Τ(ë/5û) x media οf medias ë/5û πεντάδες ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 4
Selectio O() worst case τουλάχιστον ë ë/5û / û ë/0û μέσοι x x media οf medias ë/5û πεντάδες ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 43
Selectio O() worst case τουλάχιστον ë ë/5û / û ë/0û μέσοι x τουλάχιστον 3 στοιχεία σε κάθε πεντάδα x τουλάχιστον 3 ë/0û στοιχεία x x media οf medias ë/5û πεντάδες ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 44
Selectio O() worst case τουλάχιστον ë ë/5û / û ë/0û μέσοι ³ x τουλάχιστον 3 στοιχεία σε κάθε πεντάδα ³ x τουλάχιστον 3 ë/0û στοιχεία ³ x x media οf medias ë/5û πεντάδες ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 45
Selectio O() worst case χώρισε τον πίνακα Α σε πεντάδες: O() πεντάδες βρες τον μέσο κάθε πεντάδας: O() βρες τον μέσο των μέσων : Τ(/5) O() για όλες τις πεντάδες x x x ³ x 3/0 7/0 κάλεσε αναδρομικά για το πολύ ~ 7/0 στοιχεία Τ() T(7/0) + T(/5) + O() O() (γιατί 7/0+/5 ) ΑΛΓΟΡΙΘΜΟΙ - ΑΝΟΙΞΗ 07 - Ι. ΜΗΛΗΣ - 05 - DIVIDE & CONQUER II 46