Αλγοριθμικές Τεχνικές Παύλος Εφραιμίδης, Λέκτορας http://pericles.ee.duth.gr Αλγοριθμικές Τεχνικές 1
Τεχνικές Σχεδιασμού Αλγορίθμων Ορισμένες γενικές αρχές για τον σχεδιασμό αλγορίθμων είναι: Διαίρει και Βασίλευε (Divide and Conquer) Δυναμικός Προγραμματισμός (Dynamic Programming) Απληστία (Greedy) Αλγοριθμικές Τεχνικές 2
Brute Force Ας ξεκινήσουμε με μία προφανή τεχνική επίλυσης υπολογιστικών προβλημάτων: Δεδομένου ενός προβλήματος, εξετάζουμε μία - μία όλες τις πιθανές λύσεις του προβλήματος για να βρούμε τη σωστή ή βέλτιστη λύση. Η μέθοδος αυτή ονομάζεται brute force. Κατά κανόνα τα συνδυαστικά προβλήματα έχουν ένα πολύ μεγάλο (εκθετικό) αριθμό πιθανών λύσεων και επομένως η τεχνική αυτή δεν μπορεί να λύσει στιγμιότυπα πέρα από κάποιο μέγεθος. Παρατήρηση: Ητεχνικήbrute force δεν αξιοποιεί τα χαρακτηριστικά και τη δομή του προβλήματος για να μειώσει το απαιτούμενο υπολογιστικό έργο Αλγοριθμικές Τεχνικές 3
Διαίρει και Βασίλευε Διαίρει (Divide): Το πρόβλημα διαιρείται σε ένα πλήθος b υποπροβλημάτων (συνήθως b=2) όσο δυνατόν ιδίου μεγέθους ή δυσκολίας Βασίλευε (Conquer): Κάθε πρόβλημα επιλύεται με αναδρομικό τρόπο (Στην πράξη πρέπει να είμαστε προσεκτικοί με την υλοποίηση της αναδρομής) Συνδύασε (Combine): Οι επιμέρους λύσεις συνδυάζονται για την επίλυση του αρχικού προβλήματος Αλγοριθμικές Τεχνικές 4
Παράδειγμα Ταξινόμηση Συγχώνευσης (MergeSort): Διαίρει: Το πρόβλημα μεγέθους N (με N αριθμούς) διαιρείται σε 2 υποπροβλήματα μεγέθους N/2 το καθένα Βασίλευε: Ταξινόμησε κάθε υποπρόβλημα εφαρμόζοντας αναδρομικά πάλι MergeSort Συνδύασε: Συγχώνευσε τους ταξινομημένους υποπίνακες σε έναν ενιαίο ταξινομημένο πίνακα Αλγοριθμικές Τεχνικές 5
Παράδειγμα MergeSort 10 11 13 7 8 9 10 2 10 11 13 7 8 9 10 2 10 11 13 7 8 9 10 2 3 1 2 4 8 10 10 11 7 13 6 5 8 9 7 10 11 13 2 8 9 10 7 9 12 11 2 10 βήμα 13 2 7 8 9 10 10 11 13 Αλγοριθμικές Τεχνικές 6
Δυναμικός Προγραμματισμός Δυναμικός Προγραμματισμός: Γενική σχεδιαστική στρατηγική για την επίλυση υπολογιστικών προβλημάτων Εφαρμογές: Χρησιμοποιείται κυρίως για προβλήματα βελτιστοποίησης Βασική Ιδέα: Βασίζεται στην επίλυση υποπροβλημάτων για να επιλύσει το αρχικό πρόβλημα Ας ξεκινήσουμε με ένα παράδειγμα Αλγοριθμικές Τεχνικές 7
Χαρακτηριστικά Ομοιότητα με Διαίρει και Βασίλευε Διάσπαση αρχικού προβλήματος σε μικρότερου μεγέθους υποπροβλήματα τα οποία επιλύονται αναδρομικά Διαφορά με Διαίρει και Βασίλευε Τα υποπροβλήματα δεν είναι ανεξάρτητα μεταξύ τους αλλά είναι δυνατόν να διαμοιράζονται κοινά μικρότερα υποπροβλήματα Λύσεις Υποπροβλημάτων Κάθε υποπρόβλημα επιλύεται μόνο μία φορά και η λύση του αποθηκεύεται, για συνακόλουθη χρήση, σε έναν πίνακα Αλγοριθμικές Τεχνικές 8
Βασικές Έννοιες Τυπικά χαρακτηριστικά: Απλά υποπροβλήματα: το πρόβλημα διασπάται σε ένα σύνολο υποπροβλημάτων, συνήθως, με περισσότερους του ενός τρόπους Αρχή του βέλτιστου: η ολική βέλτιστη λύση είναι αποτέλεσμα συνδυασμού βέλτιστων λύσεων υποπροβλημάτων Επικάλυψη υποπροβλημάτων: καθώς φαινομενικά ασυσχέτιστα υποπροβλήματα είναι δυνατόν να διαμοιράζονται βέλτιστες λύσεις κοινών υποπροβλημάτων, κάθε βέλτιστη λύση αποθηκεύεται για μελλοντική ενδεχόμενη χρήση Αλγοριθμικές Τεχνικές 9
Ανάπτυξη ενός αλγορίθμου δυναμικού προγραμματισμού Βασικά Βήματα 1. Χαρακτηρισμός της δομής μιας βέλτιστης λύσης 2. Αναδρομικός ορισμός της τιμής μιας βέλτιστης λύσης 3. Υπολογισμόςτηςτιμήςτηςβέλτιστηςλύσηςμε bottom-up (από κάτω προς τα επάνω) τρόπο 4. Σύνθεση της βέλτιστης λύσης από τα αποτελέσματα των υπολογισμών Αλγοριθμικές Τεχνικές 10
Πολλαπλασιασμός Αλυσίδας Πινάκων Το πρόβλημα: Δίνεται μια ακολουθία πινάκων Α 0,Α 1,...,Α n-1 και να ζητείται να βρεθεί ο βέλτιστος, από άποψη πολυπλοκότητας χρόνου, τρόπος υπολογισμού του γινομένου Α 0 Α 1 Α n-1 Παραδοχή: Θεωρούμε ότι εάν ο Α i είναι d i d i+1, το κόστος του γινομένου Α i Α i+1 είναι d i d i+1 d i+2 Αλγοριθμικές Τεχνικές 11
Παράδειγμα (1) Δίνονται τρεις πίνακες Α 0 : διαστάσεων 5 4 Α 1 : διαστάσεων 4 6 Α 2 : διαστάσεων 6 2 και ζητείται να υπολογιστεί το γινόμενο Α 0 Α 1 Α 2 Αλγοριθμικές Τεχνικές 12
Παράδειγμα (2) Πιθανές Λύσεις: Ο πολλαπλασιασμός πινάκων είναι προσεταιριστική πράξη και επομένως 1. Α 0 Α 1 Α 2 = Α 0 (Α 1 Α 2 ), και 2. Α 0 Α 1 Α 2 = (Α 0 Α 1 ) Α 2 Ποια από τις δύο πιθανές λύσεις να προτιμήσουμε; Πολυπλοκότητα: Η πολυπλοκότητα κάθε λύσης είναι 1. Α 0 (Α 1 Α 2 ) με κόστος 4 6 2+ 5 4 2=88 2. (Α 0 Α 1 ) Α 2 με κόστος 5 4 6+ 5 6 2=180 Βέλτιστη Λύση: Επομένως η βέλτιστη ακολουθία για την εκτέλεση των υπολογισμών είναι η 1: Α 0 (Α 1 Α 2 ) Αλγοριθμικές Τεχνικές 13
Πολλαπλασιασμός Αλυσίδας Πινάκων. Ας σχεδιάσουμε έναν αλγόριθμο... Αλγοριθμικές Τεχνικές 14
Πρώτη Προσπάθεια: Αναδρομή Έστω αλυσίδα πινάκων Α 0 Α 1 Α n-1 Τα πιθανά σενάρια για το τελευταίο πολλαπλασιασμό πινάκων που θα εκτελεστεί: (Α 0 ) (Α 1 Α 2 Α n-1 ) (Α 0 Α 1 ) (Α 2 Α n-1 )... (Α 0 Α 1 Α k-1 ) (Α k Α k+1 Α n-1 )... (Α 0 Α 1 Α n-2 ) (Α n-1 ) Στη βέλτιστη λύση θα εκτελεστεί ένας από τους παραπάνω πολλαπλασιασμούς Έστω Π(n) η πολυπλοκότητα χρόνου για την εύρεση της καλύτερης ακολουθίας εκτέλεσης των πολλαπλασιασμών για n πίνακες Σημείωση: Μας ενδιαφέρει να προσδιορίσουμε την πολυπολοκότητα χρόνου για την εύρεση της βέλτιστης ακολουθίας πολλαπλασιασμών, και όχι το κόστος τις εκτέλεσης των πολλαπλασιασμών αυτής της ακολουθίας Αναδρομική Σχέση Μπορούμε να διατυπώσουμε μια αναδρομική σχέση Τ(n) = ; Αλγοριθμικές Τεχνικές 15
Αναδρομική Σχέση Ας υποθέσουμε ότι ότι το ξεκίνημα κάθε αναδρομικής κλήσης απαιτεί τουλάχιστον χρόνο 1 και η επιλογή του σημείου διαίρεσης μιας ακολουθίας πινάκων σε 2 υποακολουθίες απαιτεί και αυτό τουλάχιστον χρόνο 1. Τότε: Τ(n) 1 + ( Τ(1) + Τ(n-1) + 1 ) + ( Τ(2) + Τ(n-2) + 1 ) +... + ( Τ(n-1) + Τ(1) + 1 ) Τ(n) 1 + Σ 1 k n (Τ(k) + Τ(n-k) + 1) Η λύση της αναδρομικής αυτή σχέσης δίνει: Τ(n) 2 n-1, δηλαδή εκθετικό χρόνο Συμπέρασμα: Με τον αναδρομικό αλγόριθμο που αναλύσαμε απαιτείται εκθετικός χρόνος για την εύρεση της βέλτιστης ακολουθίας εκτέλεσης των πολλαπλασιασμών πινάκων Αλγοριθμικές Τεχνικές 16
εύτερη Προσπάθεια: Με χρήση υναμικού Προγραμματισμού Αλγοριθμικές Τεχνικές 17
Αλγόριθμος με χρήση Δυναμικού Προγραμματισμού Η σωστή αντιμετώπιση: Έστω Α i,j = Α i Α i+1 Α j με κόστος Μ i,j Τότε Α 0,n-1 = Α 0,k-1 Α k,n-1 και Μ 0,n-1 = Μ 0,k-1 +M k,n-1 + d 0 d k d n Ισχύουν οι προϋποθέσεις του Δυναμικού Προγραμματισμού (εάν τα υποπροβλήματα δεν λύνονταν βέλτιστα ενώ η ολική λύση ήταν βέλτιστη, τότε με τοπική αντικατάσταση θα προέκυπτε καλύτερη λύση!) Αλγοριθμικές Τεχνικές 18
Παράδειγμα Αλυσίδα 5 πινάκων: A0 A1 A2 A3 A4 A0: 5x2 A1: 2x1 A2: 1x2 A3: 2x3 A4: 3x2 Αλγοριθμικές Τεχνικές 19
Αλγοριθμικές Τεχνικές 20 Παράδειγμα 0 4 12 0 3 12 6 0 2 16 12 4 0 1 32 31 20 10 0 0 4 3 2 1 0 4 4 4 3 3 4 3 2 2 2 2 2 1 1 2 2 2 1 0 0 4 3 2 1 0 4 3 2 1
Προγραμματισμός ; Δυναμικός Προγραμματισμός: Γιατί ο Δυναμικός Προγραμματισμός έχει αυτό το όνομα; Σχετίζεται με τον προγραμματισμό υπολογιστών, τις γλώσσες προγραμματισμού κτλ; ΟΧΙ: Η λέξη προγραμματισμός στον όρο «δυναμικός προγραμματισμός» δεν έχει σχέση με τον προγραμματισμό υπολογιστών Προγραμματισμός: Η λέξη προγραμματισμός εδώ χρησιμοποιείται γιαναπεριγράψειτηδιαδικασίαεπίλυσης Αλγοριθμικές Τεχνικές 21
Πρόβλημα Βελτιστοποίησης Πρόβλημα Βελτιστοποίησης: Δίνεται ένα πρόβλημα και ένα σύνολο αποδεκτών λύσεων Απότοσύνολοπιθανώνλύσεων, ποια είναι η καλύτερη; Δίνονται συνήθως ένα πλήθος περιορισμών που πρέπει να ικανοποιεί η λύση μια συνάρτηση κόστους ή κέρδους με την οποία κρίνεται πόσο καλή είναι η λύση Αλγοριθμικές Τεχνικές 22
Δυναμικός Προγραμματισμός vs Διαίρει και Βασίλευε Ο Δυναμικός Προγραμματισμός μοιάζει με την τεχνική του διαίρει και βασίλευε ΟΜΩΣ ΔΕΝ ΕΙΝΑΙτοίδιοπράγμα! Το αρχικό πρόβλημα διασπάται σε ένα σύνολο υποπροβλημάτων είναι πιθανό ένα πρόβλημα να διασπαστεί σε πολλούς διαφορετικούς συνδυασμούς υποπροβλημάτων η λύση κάθε υποπροβλήματος μπορεί να χρησιμοποιηθεί πολλές φορές στη διάρκεια της εκτέλεσης του αλγορίθμου Αλγοριθμικές Τεχνικές 23
Αρχή του Βέλτιστου Μια απαραίτητη προϋπόθεση για να μπορεί να εφαρμοστεί δυναμικός προγραμματισμός σε ένα υπολογιστικό πρόβλημα είναι η: Αρχή το Βέλτιστου (Principle of Optimality): Ηβέλτιστηλύσητων υποπροβλημάτων δίνει τη βέλτιστη λύση του συνολικού προβλήματος Αλγοριθμικές Τεχνικές 24
Επικάλυψη Υποπροβλημάτων Κατά την επίλυση ενός προβλήματος με δυναμικό προγραμματισμό, υποπροβλήματα που πρέπει να λυθούν μπορεί να μοιράζονται κοινά υπο-υποπροβλήματα, και επομένως η βέλτιστη λύση κάθε (υπο)- υποπροβλήματος (όταν βρεθεί) αποθηκεύεται για πιθανή μελλοντική χρήση Αλγοριθμικές Τεχνικές 25
Παράδειγμα: Το πρόβλημα του Σακιδίου (Knapsack) Αλγοριθμικές Τεχνικές 26
Καλοκαιράκι... Αλγοριθμικές Τεχνικές 27
Camping Αλγοριθμικές Τεχνικές 28
Τι να πάρει κανείς μαζί; Τα εντελώς απαραίτητα... Όμως...... και άλλα πολλά! Αλγοριθμικές Τεχνικές 29
Το Σακίδιο Το σακίδιο όποια και αν είναι η μορφή του, έχει πεπερασμένη χωρητικότητα. Και κάποιος θα πρέπει να το κουβαλάει! Ποια αντικείμενα να επιλέξουμε για να τα πάρουμε μαζί μας με το σακίδιο; Αλγοριθμικές Τεχνικές 30
Το πρόβλημα του σακιδίου Αντικείμενα: Έστω ένα σύνολο S με n αντικείμενα α 1,α 2,...,α n Βάρος και Αξία: Κάθε αντικείμενο i έχει ένα βάρος w i (αγνοούμε το θέμα του όγκου) και μια αξία u i Συνολικό Βάρος: Μπορούμε να πάρουμε αντικείμενα συνολικού βάρους το πολύ W. Συνολική Αξία: Ποια αντικείμενα να τοποθετήσουμε στο σακίδιο ώστε να έχουμε τη μέγιστη συνολική αξία χωρίς το συνολικό βάρος να ξεπερνά την τιμή W; Αλγοριθμικές Τεχνικές 31
Ένα παράδειγμα Τρία αντικείμενα: Αντικείμενο Βάρος w i Αξία α 1 4 2 α 2 5 4 α 3 6 6 Μπορούμε να πάρουμε αντικείμενα συνολικού βάρους το πολύ W=10 κιλά. Ποια αντικείμενα να επιλέξουμε; Αλγοριθμικές Τεχνικές 32
Ας σχεδιάσουμε έναν αλγόριθμο Πόσες είναι όλες οι πιθανές λύσεις; Έστω ότι έχουμε μια «γρήγορη» υπολογιστική πλατφόρμα στη διάθεσή μας. Αντί να ψάξουμε για κάποια καλή μέθοδο επίλυσης, ας δοκιμάσουμε όλες τις πιθανές λύσεις και ας επιλέξουμε την καλύτερη Η μέθοδος αυτή ονομάζεται γενικά brute force μέθοδος. Έστω ότι έχουμε τη δυνατότητα να εξετάζουμε 10 10 = 10000000000 συνδυασμούς αντικειμένων το δευτερόλεπτο. Πόσο χρόνο θα χρειαστούμε για να λύσουμε οποιοδήποτε στιγμιότυπο του προβλήματος; Πρέπει να εξετάσουμε ποιο είναι το πλήθος των πιθανών συνδυασμών Αλγοριθμικές Τεχνικές 33
Πλήθος συνδυασμών Έστω το παράδειγμα με τα τρία αντικείμενα Οι πιθανές λύσεις είναι 8:, {α 1 }, {α 2 }, {α 3 }, {α 1, α 2 }, {α 3, α 1 }, {α 2, α 3 }, {α 1, α 2, α 3 } Γενικά, για κάθε αντικείμενο έχουμε 2 επιλογές να το συμπεριλάβουμε στο σακίδιο να μην το συμπεριλάβουμε Επομένως για n αντικείμενα έχουμε 2 επιλογές για το πρώτο αντικείμενο επί 2 επιλογές για το δεύτερο αντικείμενο επί... 2 επιλογές για το n-οστό αντικείμενο. Σύνολο: 2 n επιλογές Αλγοριθμικές Τεχνικές 34
Χρόνος επίλυσης με brute force μέθοδο Έστω ότι εξετάζουμε 10 10 =10000000000 συνδυασμούς ανά δευτερόλεπτο n 10 30 50 500 Συνδυασμοί 2 10 =1024 (Kilo) 2 30 (Giga) 2 50 (Peta) 2 500 10 150 Χρόνος (προσεγγ.) 100nsec 0.1sec 2.77 ώρες 10 116 φορές την ηλικία του σύμπαντος* * Με βάση εκτίμηση από το βιβλίο Applied Cryptography, B. Schneier Αλγοριθμικές Τεχνικές 35
Αλγόριθμος με χρήση δυναμικού προγραμματισμού Για κάθε k=1,..n, έστω: S = { a, a,..., a } k 1 2 k Ορίζουμε το σύνολο: S kw, S k που επιτυγχάνει τη μέγιστη δυνατή ωφέλεια για συνολικό βάρος ακριβώς w. V kw, Τότε η βέλτιστη λύση ολόκληρου του προβλήματος είναι: v = max{ V } max nw, w W Αλγοριθμικές Τεχνικές 36
Αναδρομική Σχέση 0, k = 0 V = kw, V, k 1, w w< max{ V, V v }, k 1, w k 1, w w k w + διαφορετικά k k Αλγοριθμικές Τεχνικές 37
Πολυπλοκότητα Θεώρημα 2.2: Το πρόβλημα του σακιδίου 0-1 επιλύεται με δυναμικό προγραμματισμό εντός χρόνου O(nW). Οαλγόριθμοςέχειψευδοπολυωνυμική πολυπλοκότητα, διότι αν και εξαρτάται πολυωνυμικά από το μέγεθος του στιγμιοτύπου προβλήματος, εξαρτάται και από το μέγεθος του αριθμού W που εμφανίζεται στο στιγμιότυπο. Αλγοριθμικές Τεχνικές 38
Η αλγοριθμική τεχνική της ΑΠΛΗΣΤΙΑΣ Αλγοριθμικές Τεχνικές 39
Απληστία Η αρχή της απληστίας (greedy) : O αλγόριθμος σε κάθε βήμα να επιλέγει με κριτήριο τι είναι βέλτιστο για το συγκεκριμένο βήμα Γενική σχεδιαστική τεχνική: Μπορεί να οδηγήσει σε πολλούς διαφορετικούς αλγόριθμους για το ίδιο πρόβλημα Αλγοριθμικές Τεχνικές 40
Παραδείγματα Εύρεση ελάχιστου γεννητικού δέντρου Για παράδειγμα στον αλγόριθμο του Prim επιλέγουμε σε κάθε βήμα την ελαφρύτερη από τις υποψήφιες γειτονικές ακμές Αλγοριθμικές Τεχνικές 41
TSP Το Πρόβλημα του Πλανόδιου Πωλητή (Traveling Salesman Problem - TSP) Μια πιθανή εφαρμογή της αρχής της απληστίας στο πρόβλημα του Πλανόδιου Πωλητή είναι η εξής: Σε κάθε βήμα πήγαινε στην πλησιέστερη από τις πόλεις που δεν έχεις ακόμα επισκεφτεί Αλγοριθμικές Τεχνικές 42
Αναφορές-Πηγές Βιβλίο του μαθήματος: Κεφάλαιο 2 Introduction to Algorithms, Μέρος των κεφαλαίων 2, 15 και 16 Algorithm Design, Kleinberg and Tardos, Κεφάλαιο 6 Αλγοριθμικές Τεχνικές 43