ΑΛΓΟΡΙΘΜΟΙ http://eclass.aueb.gr/courses/inf161/ Άνοιξη 2016 - I. ΜΗΛΗΣ ΑΠΛΗΣΤΟΙ ΑΛΓΟΡΙΘΜΟΙ Greedy Algorithms 1
Greedy algorithms H βασική ιδέα: Άρχισε από ένα υπο-πρόβλημα μικρού μεγέθους Επαναληπτικά, μέχρι το μέγεθος του αρχικού προβλήματος: o Κάνε την επιλογή που φαίνεται η καλύτερη τώρα o Η επιλογή αυτή Εξαρτάται από τις προηγούμενες αλλά ΟΧΙ από τις επόμενες ΔΕΝ μπορεί να αλλάξει στο μέλλον Οδηγεί στη λύση ενός μεγαλύτερου μεγέθους υπο-προβλήματος (και τελικά στη λύση του αρχικού προβλήματος) ΠΟΛΥΠΛΟΚΟΤΗΤΑ o Απλοί επαναληπτικοί αλγόριθμοι (μέτρημα βημάτων) ΟΡΘΟΤΗΤΑ o Όχι προφανής όπως στους αλγόριθμους D&C o Απέδειξε ότι οι τοπικές επιλογές οδηγούν στη βέλτιστη λύση 2
Algorithm design methods DIVIDE AND CONQUER Ανεξάρτητα Υπο-προβλήματα Αναδρομικοί Αλγόριθμοι Ορθότητα= Ορθότητα CONQUER Πολυπλοκότητα: Αναδρομική σχέση GREEDY Υπο-προβλήματα αυξανόμενου μεγέθους Επαναληπτικοί Αλγόριθμοι Ορθότητα: ΑΠΟΔΕΙΞΗ Πολυπλοκότητα: Υλοποίηση + Μέτρημα 3
Coin Changing ΕΙΣΟΔΟΣ: Ποσό Ε και σύνολο n νομισμάτων με αξίες V={v n, v n-1,,v 2,v 1 } EΡΩΤΗΣΗ: Ο ελάχιστος αριθμός νομισμάτων με συνολική αξία E Example 1: E = 67, V= {100, 25, 10, 5, 1} E = 2x25 +10 +5+2x1, c=6 = OPT Example 2 : E = 13, V= {100, 25, 10, 5} ΑΔΥΝΑΤΟ ΜΕΛΕΤΑΜΕ εισόδους με μικρότερη αξία το 1: ΤΟΤΕ υπάρχει πάντα λύση στο πρόβλημα OPT = βέλτιστο Example 3: E =13, V= {10, 1} E = 10+ 3 1, c = 4 = OPT Αλγόριθμος? 4
Coin Changing - Greedy Greedy algorithm: Διάλεξε πάντα το μεγαλύτερο νόμισμα που μπορείς Change (E,V) Sort(V) // v n > v n-1 > >v 2 >v 1 c = 0 for i = n downto 1: c = c + (E div v i ) E = E mod v i return c Example 1: E = 40, V= {20, 10, 5, 2, 1}: E = 2 x20, c=2=opt Example 2 : E = 40, V= {25, 20, 10, 5, 2,1 }: E = 25 +10 +5, c=3 E = 2 20, OPT =2!!! O greedy ΔΕΝ ΔΙΝΕΙ ΠΑΝΤΑ ΤΗΝ ΒΕΛΤΙΣΤΗ ΛΥΣΗ! ΠΟΤΕ? Canonical values system, όχι εύκολη περιγραφή ΑΛΛΟΙΩΣ? ΔΥΝΑΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 5
Coin Changing - Correctness ΟΡΘΟΤΗΤΑ για V= {100, 25, 10, 5, 1} x i = # νομισμάτων αξίας v i, i=1,2,,n 100 25 10 5 1 Για ΚΑΘΕ βέλτιστη λύση ισχύει ότι: (i) x 1 4: αντικατέστησε 5 λεπτά με ένα 5λεπτο (ii) x 2 1: αντικατέστησε 2 5λεπτα με ένα 10λεπτο (iii) x 2 + x 3 2 (ξέρουμε ότι x 2 1) : (iv) x 4 x 5 x 4 x 3 x 2 x 1 αντικατέστησε 3 10λεπτα με ένα 25λεπτο και ένα 5λεπτο αντικατέστησε 2 10λεπτα και ένα 5λεπτο με ένα 25λεπτο 3: αντικατέστησε 4 25λεπτα με ένα 100λεπτο 6
Coin Changing - Correctness ΟΡΘΟΤΗΤΑ για V= {100, 25, 10, 5, 1} x i = # νομισμάτων αξίας v i, i=1,2,,n 100 25 10 5 1 x 5 x 4 x 3 x 2 x 1 Μ=Μέγιστη αξία βέλτιστης λύσης ΜΟΝΟ με νομίσματα αξιών v 1, v 2,,v k k v k max x k x M 1 1 x 1 4 4 (4x1) 2 5 x 2 1 9 (5x1 +4) 3 10 x 2 + x 3 2 24 (2x10 +4) 4 25 x 4 3 99 (3x25 +24) 5 100 απεριόριστα απεριόριστα 7
Coin Changing - Correctness Ο greedy Change επιστρέφει την βέλτιστη λύση για V= {100, 25, 10, 5, 1} Απόδειξη (επαγωγή στο Ε) Έστω v k+1 > E v k ΚΑΘΕ βέλτιστη λύση έχει το νόμισμα αξίας v k Διαφορετικά θα πρέπει για την αξία Ε να έχει μόνο νομίσματα αξιών v 1, v 2,,v k-1 Δεν υπάρχει τέτοια βέλτιστη λύση για την αξία Ε (βλ. πίνακα) k v k max x k x M 1 1 x 1 4 4 (4x1) 2 5 x 2 1 9 (5x1 +4) 3 10 x 2 + x 3 2 24 (2x10 +4) 4 25 x 4 3 99 (3x25 +24) 5 100 απεριόριστα απεριόριστα Το πρόβλημα ανάγεται σε αξία Ε- v k το οποίο (επαγωγικά) λύνεται βέλτιστα από τον greedy αλγόριθμο 8
Activity Selection (Interval Scheduling) ΕΙΣΟΔΟΣ: Σύνολο n εργασιών κάθε μία με διάρκεια από τη χρονική στιγμή s i (χρόνος αρχής) μέχρι τη χρονική στιγμή f i (χρόνος τέλους). EΡΩΤΗΣΗ: Ο μέγιστος αριθμός εργασιών που μπορείτε να εκτελέσετε χωρίς να επικαλύπτονται (συμβατές compatible) Greedy αλγόριθμος? OPT = βέλτιστο =? 9
Activity Selection Επέλεξε την εργασία που αρχίζει πρώτη c=1, OPT=4! Επέλεξε τη συντομότερη εργασία c=1, OPT=2! Επέλεξε την εργασία με τις λιγότερες επικαλύψεις c=3, OPT=4! AΛΛΗ ΙΔΕΑ? 10
Activity Selection - Greedy Επέλεξε την εργασία που τελειώνει πρώτη f 1 f 2 f 3 f n Διέγραψε τις επικαλυπτόμενες και συνέχισε 11
Activity Selection - Greedy Επέλεξε την εργασία που τελειώνει πρώτη Greedy EFF (EarliestFinishingFirst); Sort intervals so that f 1 f 2 f n A = {} // set of jobs selected for j = 1 to n if (job j is compatible with A): A = A U {j} return A ΟΡΘΟΤΗΤΑ? ΠΟΛΥΠΛΟΚΟΤΗΤΑ? 12
Activity Selection Correctness Η επιλογή κάθε φορά της εργασίας που τελειώνει πρώτη οδηγεί στη βέλτιστη λύση Απόδειξη (επαγωγή σε άτοπο) Υπόθεση: ο EFF δεν είναι βέλτιστος Έστω i 1, i 2,, i k οι εργασίες που επιλέχθηκαν από τον EFF Έστω j 1, j 2,, j m οι εργασίες μιας βέλτιστης λύσης Έστω r o μικρότερος δείκτης τέτοιος ώστε i r+1 j r+1 H εργασία i r+1 υπάρχει και τελειώνει πριν την j r+1 Γιατί δεν ανταλλάσουμε την j r+1 με την i r+1? 13
Activity Selection Correctness Η επιλογή κάθε φορά της εργασίας που τελειώνει πρώτη οδηγεί στη βέλτιστη λύση Απόδειξη (επαγωγή σε άτοπο) Υπόθεση: ο EFF δεν είναι βέλτιστος Έστω i 1, i 2,, i k οι εργασίες που επιλέχθηκαν από τον EFF Έστω j 1, j 2,, j m οι εργασίες μιας βέλτιστης λύσης Έστω r o μικρότερος δείκτης τέτοιος ώστε i r+1 j r+1 H εργασία i r+1 υπάρχει και τελειώνει πριν την j r+1 Λύση επίσης βέλτιστη! 14
Activity Selection - Complexity Επέλεξε την εργασία που τελειώνει πρώτη Greedy EFF (EarliestFinishingFirst); Sort intervals so that f 1 f 2 f n A = {} // set of jobs selected for j = 1 to n if (job j is compatible with A): A = A U {j} return A ΠΟΛΥΠΛΟΚΟΤΗΤΑ: O(n log n) Έστω j* η εργασία που προστέθηκε τελευταία στο σύνολο Α Η εργασία j είναι συμβατή με το Α εάνν s j f j* Ταξινόμηση: O(n log n) 15
Interval Partitioning ΕΙΣΟΔΟΣ: Σύνολο n διαλέξεων κάθε μία με διάρκεια από τη χρονική στιγμή s i (χρόνος αρχής) μέχρι τη χρονική στιγμή f i (χρόνος τέλους). EΡΩΤΗΣΗ: Ο ελάχιστος αριθμός αιθουσών που χρειάζεται για να γίνουν ΟΛΕΣ οι διαλέξεις. Παράδειγμα: 10 διαλέξεις σε 4 αίθουσες 16
Interval Partitioning ΕΙΣΟΔΟΣ: Σύνολο n διαλέξεων κάθε μία με διάρκεια από τη χρονική στιγμή s i (χρόνος αρχής) μέχρι τη χρονική στιγμή f i (χρόνος τέλους). EΡΩΤΗΣΗ: Ο ελάχιστος αριθμός αιθουσών που χρειάζεται για να γίνουν ΟΛΕΣ οι διαλέξεις. Παράδειγμα: 10 διαλέξεις σε 3 αίθουσες Greedy αλγόριθμος? OPT = βέλτιστο =? 17
Interval Partitioning Εκτέλεσε την εργασία που τελειώνει πρώτη c=3! OPT=2 Εκτέλεσε τη συντομότερη εργασία c=3! Εκτέλεσε την εργασία με τις λιγότερες επικαλύψεις c=3! AΛΛΗ ΙΔΕΑ? 18
Interval Partitioning - Greedy Εκτέλεσε την εργασία που αρχίζει πρώτη Greedy ESF (EarliestSrartingFirst); Sort intervals so that s 1 s 2 s n d = 0 // # of classrooms for j = 1 to n if (lecture j is compatible with some classroom k): schedule lecture j in classroom k else: allocate a new classroom d + 1 schedule lecture j in classroom d + 1 d = d + 1 19
Interval Partitioning Correctness Εκτέλεσε την εργασία που αρχίζει πρώτη Greedy ESF (EarliestSrartingFirst); Sort intervals so that s 1 s 2 s n d = 0 // # of classrooms for j = 1 to n if (lecture j is compatible with some classroom k): schedule lecture j in classroom k else: allocate a new classroom d + 1 schedule lecture j in classroom d + 1 d = d + 1 ΠΑΡΑΤΗΡΗΣΗ 1: Ο αλγόριθμος δεν αναθέτει δύο επικαλυπτόμενες διαλέξεις στην ίδια αίθουσα 20
Interval Partitioning Correctness Oρισμός: Βάθος (depth) ενός συνόλου διαλέξεων (ανοικτών διαστημάτων) είναι ο μέγιστος αριθμός τους που περιέχει την ίδια χρονική στιγμή. ΠΑΡΑΤΗΡΗΣΗ 2: ελάχιστος # αιθουσών βάθος 21
Interval Partitioning Correctness ΠΑΡΑΤΗΡΗΣΗ 1: Ο αλγόριθμος δεν αναθέτει δύο επικαλυπτόμενες διαλέξεις στην ίδια αίθουσα ΠΑΡΑΤΗΡΗΣΗ 2: ελάχιστος # αιθουσών βάθος Η επιλογή κάθε φορά της εργασίας που τελειώνει πρώτη οδηγεί στη βέλτιστη λύση Απόδειξη O αλγόριθμος ESF επιστρέφει d αίθουσες Η αίθουσα d άνοιξε γιατί μία διάλεξη j ήταν ασύμβατη με ΟΛΕΣ τις d-1 άλλες αίθουσες (ήταν γεμάτες τη χρονική στιγμή s j +ε) Έχουμε άρα d διαλέξεις που επικαλύπτονται τη χρονική στιγμή s j +ε Άρα βάθος =d Αλλά, ελάχιστος # αιθουσών βάθος Άρα ο ESF είναι βέλτιστος 22
Interval Partitioning Complexity Greedy ESF (EarliestSrartingFirst); Sort intervals so that s 1 s 2 s n d = 0 for j = 1 to n if (lecture j is compatible with some classroom k): schedule lecture j in classroom k else: allocate a new classroom d + 1 schedule lecture j in classroom d + 1 d = d + 1 Για κάθε αίθουσα αποθηκεύουμε το χρόνο που τελειώνει η τελευταία εργασία που αποθηκεύτηκε σε αυτή την αίθουσα ΥΛΟΠΟΙΗΣΗ? Πίνακας: O(n 2 ) Ουρά Προτεραιότητας (Heap) (πράξεις σε χρόνο O(log n) ): O(n logn) 23