L03 · D&C I — Mergesort & Master Theorem
Τι θα δούμε
Στα L01 και L02 μάθαμε να αποτιμούμε και να συγκρίνουμε αλγορίθμους. Από εδώ και πέρα αλλάζουμε ερώτηση: πώς σχεδιάζουμε έναν καλό αλγόριθμο από το μηδέν;
Αυτή η διάλεξη είναι η πρώτη τεχνική σχεδίασης του μαθήματος. Στόχοι:
- Να καταλάβουμε το «διαίρει και κυρίευε» ως σχήμα — όχι έναν αλγόριθμο, αλλά μια ολόκληρη οικογένεια αλγορίθμων που χτίζονται με τον ίδιο τρόπο.
- Να δούμε το αστέρι της οικογένειας, τη συγχωνευτική ταξινόμηση (mergesort), και να αποδείξουμε ότι τρέχει σε — με τέσσερις διαφορετικούς τρόπους, γιατί καθένας διδάσκει μια χρήσιμη τεχνική.
- Να βγάλουμε ένα γενικό εργαλείο, το Master Theorem, που λύνει μια ολόκληρη οικογένεια αναδρομικών σχέσεων χωρίς απόδειξη από την αρχή.
- Να δούμε, με τον πύργο του Hanoi, ότι το σχήμα D&C από μόνο του δεν εγγυάται γρήγορο αλγόριθμο.
Γρήγορη υπενθύμιση από το L02
Όλη η διάλεξη μιλάει για χρόνους εκτέλεσης, οπότε ας ξανασυμφωνήσουμε στη γλώσσα. Από το L02:
- — άνω φράγμα: η δεν αυξάνεται γρηγορότερα από την .
- — κάτω φράγμα: δεν αυξάνεται πιο αργά.
- — ακριβές φράγμα: ίδιος ρυθμός, και από τις δύο μεριές.
Και η κλίμακα πολυπλοκοτήτων, που θα χρησιμοποιήσουμε διαρκώς:
Όσα είναι αριστερά (πολυωνυμικά) είναι «καλά»· όσα είναι δεξιά (εκθετικά) είναι «κακά». Κράτα ειδικά στο μυαλό σου τη θέση του — ανάμεσα στο γραμμικό και στο τετραγωνικό. Εκεί ζει η mergesort.
Ζέσταμα: το μέγιστο ενός πίνακα
Πριν επιτεθούμε στο σύνθετο πρόβλημα της ταξινόμησης, ένα μίνι πρόβλημα για να ξαναβρούμε τον ρυθμό της ανάλυσης. Δοθέντος πίνακα , βρες το μέγιστο στοιχείο.
Η πιο φυσική ιδέα: κράτα έναν «τρέχοντα νικητή» και διέτρεξε τον πίνακα μία φορά.
Πόσες συγκρίσεις; Ακριβώς — μία για κάθε στοιχείο πέρα από το πρώτο, ανεξάρτητα από την είσοδο. Άρα .
Υπάρχει και μια δεύτερη ιδέα: σάρωσε τα γειτονικά ζευγάρια κι αντάλλασσε ώστε το μεγαλύτερο να «σπρώχνεται» προς το τέλος· στο τέλος, το είναι το μέγιστο. Πάλι συγκρίσεις, πάλι .
Το πρόβλημα: ταξινόμηση
Πρόβλημα. Δοθέντος πίνακα στοιχείων, να τα διατάξουμε σε αύξουσα σειρά (ως προς κάποιο κριτήριο σύγκρισης).
Γιατί ξοδεύουμε ολόκληρη διάλεξη στην ταξινόμηση; Γιατί είναι παντού. Οι προφανείς χρήσεις — μια αλφαβητική λίστα, μια playlist, αρχεία ταξινομημένα κατά ημερομηνία — είναι μόνο η αρχή. Το πραγματικό κέρδος είναι ότι μια ταξινομημένη λίστα ξεκλειδώνει δεκάδες άλλα προβλήματα:
- Δυαδική αναζήτηση σε αντί για — όπως είδαμε στο L01.
- Μεσαίο στοιχείο σε , ακραίες τιμές στις άκρες, διπλότυπα σε ένα γραμμικό πέρασμα (τα ίσα στοιχεία στέκονται πλέον δίπλα-δίπλα).
- Πλησιέστερο ζευγάρι αριθμών: σε ταξινομημένη λίστα είναι κάποιο γειτονικό ζευγάρι — .
Και αμέτρητα προβλήματα χρησιμοποιούν την ταξινόμηση ως κρυφό υποπρόβλημα: συμπίεση δεδομένων (Huffman, L12), γραφικά, υπολογιστική βιολογία, ο αλγόριθμος Kruskal για ελάχιστα συνδετικά δέντρα (L09) που απαιτεί ταξινομημένες ακμές.
Πρώτη προσπάθεια: bubble & insertion sort
Πριν δούμε το «έξυπνο» mergesort, ας δούμε τι μας δίνει η πιο αφελής σκέψη — δύο κλασικοί απλοί αλγόριθμοι.
Με λόγια. Διατρέχεις τον πίνακα συγκρίνοντας γειτονικά ζευγάρια· όποτε βρεις δύο σε λάθος σειρά, τα αντάλλασσεις. Μετά από ένα πλήρες πέρασμα, το μεγαλύτερο στοιχείο έχει «κυλήσει» μέχρι το τέλος. Επαναλαμβάνεις για το υπόλοιπο — μετά από περάσματα όλα είναι στη θέση τους.
Πολυπλοκότητα. Διπλά φωλιασμένος βρόχος: .
Με λόγια. Κρατάς το αριστερό κομμάτι του πίνακα πάντα ταξινομημένο. Παίρνεις το επόμενο στοιχείο και το «κατεβάζεις» προς τα αριστερά, ολισθαίνοντας τα μεγαλύτερα στοιχεία ένα βήμα δεξιά, ώσπου να βρει τη θέση του.
Πολυπλοκότητα. Στη χείριστη περίπτωση (αντίστροφα ταξινομημένος πίνακας) κάθε νέο στοιχείο κατεβαίνει σε όλο το ταξινομημένο πρόθεμα → . Στη βέλτιστη περίπτωση (ήδη ταξινομημένος) κάθε στοιχείο μένει επιτόπου → μόνο .
Πριν δούμε γιατί, ας τη νιώσουμε. Πατώντας ▶ τρέχεις και τους τρεις αλγορίθμους στον ίδιο πίνακα 10 στοιχείων· κάθε αλγόριθμος έχει τον δικό του μετρητή συγκρίσεων, και βλέπεις πόσο γρηγορότερα γεμίζει ο της mergesort. Άλλαξε σε «Αντίστροφος» για να δεις τη χειρότερη είσοδο της insertion (όπου ισοφαρίζει την bubble) και σε «Σχεδόν ταξινομημένος» για τη βέλτιστη (όπου η insertion γίνεται σχεδόν γραμμική):
Δύο πράγματα να προσέξεις. Η bubble sort είναι ανεπηρέαστη: 45 συγκρίσεις και στις τρεις περιπτώσεις, γιατί ο εξωτερικός βρόχος δεν «βλέπει» τι έγινε μέσα. Η insertion sort είναι έξυπνη: για σχεδόν-ταξινομημένη είσοδο τελειώνει σε πολύ λιγότερες συγκρίσεις. Αλλά καμιά από τις δύο δεν είναι κοντά στη mergesort όταν η είσοδος είναι τυχαία ή αντίστροφη — και η απόσταση ανοίγει όσο μεγαλώνει το , ακριβώς όπως λέει το vs .
Η μεγάλη ιδέα: διαίρει και κυρίευε
Πρέπει να σπάσουμε το φράγμα του . Από πού πιάνεται κανείς; Από μια πολύ ανθρώπινη ιδέα.
Divide et impera!
(λατινικό: «διαίρει και βασίλευε»)
Η τεχνική διαίρει και κυρίευε (D&C) βασίζεται σε τρία βήματα:
- Διαίρει τα δεδομένα σε μικρότερα υποπροβλήματα χωρίς κοινά στοιχεία (ξένα μεταξύ τους).
- Κυρίευσε κάθε υποπρόβλημα ξεχωριστά και αναδρομικά — εφαρμόζοντας ξανά τον ίδιο αλγόριθμο.
- Συνδύασε τις επιμέρους λύσεις σε λύση του αρχικού προβλήματος.
Γιατί δουλεύει: είναι επαγωγή μεταμφιεσμένη
Η D&C δεν είναι ένα κόλπο που «τυχαίνει» να δουλεύει — είναι επαγωγική κατασκευή της λύσης. Για να σχεδιάσεις έναν τέτοιο αλγόριθμο, αρκεί (και χρειάζεται) να ξέρεις δύο πράγματα:
- Βάση: πώς λύνεται το πρόβλημα για πολύ μικρή, σταθερή είσοδο — π.χ. .
- Επαγωγικό βήμα: πώς συνδυάζονται οι ορθές λύσεις των μικρότερων υποπροβλημάτων σε μία ορθή λύση για όλη την είσοδο.
Συγχωνευτική ταξινόμηση: η ιδέα
Ας ντύσουμε την αναλογία της στοίβας με γραπτά σε αλγόριθμο. Πώς ταξινομούμε με D&C;
- Βάση. Πίνακας με ένα στοιχείο είναι ήδη ταξινομημένος — τον επιστρέφουμε ως έχει.
- Αλλιώς: διαίρεσε τον πίνακα στη μέση· ταξινόμησε αναδρομικά καθένα από τα δύο μισά· συγχώνευσε τις δύο ταξινομημένες λίστες σε μία.
Όλο το βάρος της σκέψης είναι: «αν ξέρω να συγχωνεύω δύο ταξινομημένες λίστες, τότε ξέρω να ταξινομώ τα πάντα» — η αναδρομή αναλαμβάνει το υπόλοιπο. Πριν γράψουμε γραμμή ψευδοκώδικα, πάτα Επόμενο και δες το να συμβαίνει — πρώτα η φάση Διαίρει μέχρι τους πίνακες ενός στοιχείου, μετά η φάση Συγχώνευσε προς τα πάνω:
Πρόσεξε αυτό που μετράει το «Δουλειά συγχώνευσης ανά επίπεδο»: κάθε επίπεδο συγχώνευσης κοστίζει περίπου πράξεις, και τα επίπεδα είναι λίγα — όσα και τα μισαρίσματα μέχρι το 1. Κράτα το· είναι ολόκληρη η απόδειξη του σε μία εικόνα.
Η συγχώνευση δύο ταξινομημένων πινάκων
Είδαμε ότι η mergesort στηρίζεται όλη πάνω σε μία πράξη: τη συγχώνευση. Ας τη χτίσουμε προσεκτικά — είναι το «επαγωγικό βήμα» του αλγορίθμου.
Σκέψου δύο ουρές στο supermarket που πρέπει να γίνουν μία ταξινομημένη ουρά: κρατάς δύο δείκτες και , έναν στην αρχή κάθε ουράς, κοιτάς τα δύο πρώτα στοιχεία, παίρνεις το μικρότερο και προχωράς τον αντίστοιχο δείκτη. Επανάληψη, μέχρι να αδειάσουν και οι δύο ουρές. Πάτα Επόμενο και δες ακριβώς αυτό να συμβαίνει — ή πέρασε σε «Δοκίμασε εσύ» για να διαλέξεις μόνος σου ποια μεριά να τραβήξεις:
Δύο παρατηρήσεις που θα μας χρησιμεύσουν αμέσως μετά: (1) κάθε βήμα προχωρά ακριβώς έναν δείκτη, οπότε ο συνολικός αριθμός βημάτων είναι το πολύ · (2) η συγχώνευση εκμεταλλεύεται το ότι οι δύο είσοδοι είναι ήδη ταξινομημένες — το μικρότερο στοιχείο που δεν έχει γραφτεί ακόμα είναι σίγουρα κάποιο από τα δύο «πάνω-πάνω».
- Είσοδος:
- δύο ήδη ταξινομημένοι πίνακες a (m στοιχεία) και b (n στοιχεία)
- Έξοδος:
- ένας ταξινομημένος πίνακας c με όλα τα m + n στοιχεία
Με λόγια. Κράτα έναν δείκτη στην αρχή του και έναν δείκτη στην αρχή του . Κάθε δείκτης δείχνει το πρώτο στοιχείο που δεν έχεις χρησιμοποιήσει ακόμη. Σε κάθε βήμα κοιτάς τα δύο στοιχεία και , παίρνεις το μικρότερο και το βάζεις στο αποτέλεσμα, και προχωράς μόνο τον δείκτη που χρησιμοποίησες. Επειδή και οι δύο πίνακες είναι ήδη ταξινομημένοι, το μικρότερο μη-χρησιμοποιημένο στοιχείο όλων είναι σίγουρα ένα από αυτά τα δύο. Σαν δύο ταξινομημένες ουρές στο supermarket που γίνονται μία.
Πολυπλοκότητα. Ο βρόχος εκτελείται ακριβώς φορές, και κάθε επανάληψη κάνει σταθερή δουλειά (μία σύγκριση, μία ανάθεση, μία αύξηση δείκτη). Άρα — γραμμικός στο σύνολο των στοιχείων.
Ο αλγόριθμος mergesort
Με τη συγχώνευση έτοιμη, ο πλήρης αλγόριθμος είναι σχεδόν τετριμμένος — γι' αυτό άλλωστε δουλεύει το D&C: μόλις λύσεις το «επαγωγικό βήμα», ο αλγόριθμος γράφεται μόνος του.
- Είσοδος:
- πίνακας A και όρια p, r (αρχικά p = 1, r = n)
- Έξοδος:
- το τμήμα A[p..r] ταξινομημένο
Με λόγια. Αν το τμήμα έχει ένα στοιχείο (), είναι ήδη ταξινομημένο — αυτή είναι η βάση που σταματά την αναδρομή. Αλλιώς, βρίσκουμε το μεσαίο σημείο , καλούμε αναδρομικά τη mergesort στο αριστερό και στο δεξί μισό, και τέλος συγχωνεύουμε τα δύο ταξινομημένα μισά. Την κάθε αναδρομική κλήση τη θεωρούμε «μαύρο κουτί»: εμπιστευόμαστε ότι επιστρέφει το μισό ταξινομημένο — αυτό ακριβώς εγγυάται η επαγωγική υπόθεση.
Το δέντρο αναδρομής
Πριν αποδείξουμε τυπικά ότι , ας δούμε πού πάει η δουλειά. Ζωγραφίζουμε το δέντρο αναδρομής: η ρίζα είναι η αρχική κλήση, και κάθε κλήση κρεμάει από κάτω τις δύο αναδρομικές κλήσεις της. Για :
Το κλειδί είναι μία παρατήρηση: κάθε επίπεδο του δέντρου κάνει συνολικά συγκρίσεις. Γιατί;
- Στο επίπεδο 1 έχουμε 2 υποπροβλήματα μεγέθους . Η συγχώνευση καθενός κοστίζει → σύνολο .
- Στο επίπεδο 2 έχουμε 4 υποπροβλήματα μεγέθους , κόστος το καθένα → σύνολο .
- Σε γενικό επίπεδο έχουμε υποπροβλήματα μεγέθους → σύνολο πάλι .
Τα υποπροβλήματα πληθαίνουν, αλλά ταυτόχρονα μικραίνουν στον ίδιο ρυθμό — οπότε το γινόμενο μένει σταθερό. Και πόσα επίπεδα υπάρχουν; Όσα τα μισαρίσματα του μέχρι το 1, δηλαδή . Άρα:
Αυτή είναι η διαίσθηση. Τώρα ας τη μετατρέψουμε σε αυστηρή απόδειξη — και μάλιστα με τέσσερις τρόπους.
Η αναδρομική σχέση της mergesort
Ορίζουμε ως την πολυπλοκότητα της mergesort για είσοδο μεγέθους . Διαβάζοντας τον ψευδοκώδικα:
Σε λόγια: για καμία σύγκριση· για , το κόστος του αριστερού μισού συν του δεξιού μισού συν για τη συγχώνευση.
Στόχος: να δείξουμε ότι . Θα το κάνουμε τέσσερις φορές, με διαφορετική τεχνική κάθε φορά — κάθε τεχνική επιστρέφει σε άλλες αναδρομικές σχέσεις παρακάτω στο μάθημα.
Απόδειξη #1 — διαίρεση με n (τηλεσκόπιο)
Υποθέτουμε ότι το είναι δύναμη του 2, οπότε δεν χρειάζονται πατώματα/οροφές και η σχέση γίνεται καθαρά:
Το τέχνασμα: διαιρούμε και τα δύο μέλη με .
Αν θέσουμε , η σχέση απλοποιείται σε κάτι πανεύκολο:
Εφαρμόζοντας την ίδια ταυτότητα ξανά και ξανά, οι όροι τηλεσκοπούν:
Όταν φτάσουμε στο , μένει , άρα:
Απόδειξη #2 — επαγωγή στον διπλασιασμό
Επαγωγή πάνω στο (πάλι με ). Θέλουμε να δείξουμε .
Βάση. . ✓
Επαγωγική υπόθεση. Έστω ότι ισχύει .
Επαγωγικό βήμα. Δείχνουμε ότι ισχύει και για τον διπλάσιο :
Χρησιμοποιήσαμε (με ) και την ταυτότητα .
Απόδειξη #3 — πολλαπλασιασμός γραμμών
Πιο γενική εκδοχή του τηλεσκοπίου, που δουλεύει για οποιαδήποτε σταθερά : αν , τότε .
Πώς. Γράφουμε τη σχέση επανειλημμένα, πολλαπλασιάζοντας κάθε γραμμή με , ώστε οι μεσαίοι όροι να ταιριάξουν:
Προσθέτουμε όλες τις γραμμές. Κάθε όρος της μορφής εμφανίζεται μία φορά αριστερά και μία δεξιά — τηλεσκοπεί — και μένει:
Για (άρα ) και :
Άρα .
Απόδειξη #4 — η γενική περίπτωση (με οροφές)
Οι τρεις πρώτες αποδείξεις υπέθεσαν . Τι γίνεται αν το είναι οποιοσδήποτε αριθμός (π.χ. 100, 1000, 13.547);
Θεώρημα. Για τη σχέση
ισχύει .
Απόδειξη με ισχυρή επαγωγή στο .
Βάση (): . ✓
Επαγωγική υπόθεση. Η σχέση ισχύει για κάθε .
Επαγωγικό βήμα. Θέτουμε και . Ισχύει και .
Δικαιολόγηση του . Από τον ορισμό της οροφής, , άρα:
Παίρνοντας λογάριθμο, · και επειδή το δεξί μέλος είναι ακέραιος, ισχύει και με οροφή: .
Γιατί «στη μέση»; Και τι μετράει πραγματικά για την πολυπλοκότητα;
Τώρα μπορούμε να απαντήσουμε στην ερώτηση που αφήσαμε ανοιχτή — και μάλιστα να την επεκτείνουμε. Δύο διαφορετικά «λάθος» διαχωρίσματα:
- Αναλογικός αλλά άνισος, π.χ. 60/40 ή 90/10. Το ένα κομμάτι είναι μεγαλύτερο, αλλά είναι πάντα σταθερό ποσοστό του γονικού.
- Σταθερό κομμάτι, π.χ. « και ». Το μικρό κομμάτι έχει σταθερό μέγεθος, ανεξάρτητο από το .
Η διαίσθηση που μετράει είναι το βάθος του δέντρου αναδρομής — γιατί η δουλειά ανά επίπεδο μένει έτσι κι αλλιώς (τα κομμάτια καλύπτουν όλη την είσοδο), οπότε το συνολικό κόστος είναι «βάθος × ». Δοκίμασε και τα δύο και πρόσεξε το σχήμα του δέντρου:
Ο σταθερός διαχωρισμός γεννά μια καμπύλη — ένα μακρόστενο δέντρο όπου κάθε επίπεδο μειώνεται μόνο κατά — άρα χρειάζεται επίπεδα. Πολλαπλασίασε με τα ανά επίπεδο και βγαίνει . Είναι ακριβώς το ίδιο πρόβλημα με την bubble sort, χωρίς καμιά βελτίωση.
Με μαθηματικά: για διαχωρισμό « και » η αναδρομή γίνεται , και ξεδιπλώνοντας: Για διαχωρισμό (που είναι αναλογικός, απλώς όχι ισόρροπος) η αναδρομή είναι . Το βαθύτερο μονοπάτι ακολουθεί το μεγάλο κομμάτι: , φτάνει στο 1 σε βήματα — ακόμη λογαριθμικό. Κάθε επίπεδο πάλι → , ίδια τάξη με την ισόρροπη mergesort.
Όταν το D&C ΔΕΝ είναι γρήγορο: ο πύργος του Hanoi
Μέχρι τώρα το D&C φαίνεται μαγικό. Ένα διάσημο παράδειγμα δείχνει ότι δεν είναι — το σχήμα από μόνο του δεν εγγυάται τίποτα.
Πρόβλημα. Υπάρχουν 3 στύλοι (A, B, C) και δίσκοι στοιβαγμένοι στον στύλο A σε κωνική μορφή (μεγάλος κάτω, μικρός πάνω). Θέλουμε να τους μεταφέρουμε όλους στον C, με κανόνες: (1) μετακινούμε έναν δίσκο κάθε φορά, (2) παίρνουμε πάντα τον κορυφαίο δίσκο ενός στύλου, (3) ποτέ δεν βάζουμε δίσκο πάνω σε μικρότερό του.
Το D&C το ξεκλειδώνει σε τρεις γραμμές. Παρατήρησε: για να μετακινήσεις τον μεγαλύτερο δίσκο, πρέπει πρώτα να έχεις «αδειάσει» τους από πάνω του στον βοηθητικό στύλο.
- Είσοδος:
- n δίσκοι στον στύλο «από»
- Έξοδος:
- και οι n δίσκοι στον στύλο «προς», με τη σωστή σειρά
Με λόγια. Η βάση: για δεν υπάρχει τίποτα να γίνει. Για δίσκους, υποθέτουμε (επαγωγική υπόθεση) ότι ξέρουμε να λύνουμε για , και χτίζουμε τη λύση σε τρία βήματα: μετακινούμε αναδρομικά τους πάνω δίσκους στον βοηθητικό στύλο· μετακινούμε τον μεγαλύτερο δίσκο κατευθείαν στον στόχο· μετακινούμε αναδρομικά πάλι τους δίσκους πάνω του.
Δες το να δουλεύει — και κυρίως πέρασε στην καρτέλα «Δες την έκρηξη» για να καταλάβεις γιατί αυτή η όμορφη D&C σχεδίαση γεννά εκθετικό κόστος:
Πολυπλοκότητα. Έστω ο αριθμός κινήσεων. Οι δύο αναδρομικές κλήσεις κοστίζουν η καθεμία, συν 1 κίνηση για τον μεγάλο δίσκο:
Λύνοντας (ξεδιπλώνοντας τη σχέση): . (Έλεγχος: , , . ✓)
Το Master Theorem
Παρατήρησε ένα μοτίβο: αναδρομικές σχέσεις της μορφής προκύπτουν συνέχεια στους αλγορίθμους D&C. Αντί να τις λύνουμε από την αρχή κάθε φορά, υπάρχει ένα έτοιμο θεώρημα που τις λύνει.
Τα τρία σύμβολα: = πόσα υποπροβλήματα φτιάχνεις, = πόσες φορές μικραίνει το καθένα, = ο εκθέτης του κόστους του συνδυαστικού βήματος . Όλη η ουσία είναι μια σύγκριση: ο εκθέτης (κόστος συνδυασμού) εναντίον του (ρυθμός που πληθαίνει το δέντρο). Ό,τι είναι μεγαλύτερο, κυριαρχεί.
Διαισθητική απόδειξη μέσω δέντρου αναδρομής
Από πού βγαίνουν οι τρεις περιπτώσεις; Ξαναγυρνάμε στο δέντρο αναδρομής. Στο επίπεδο :
- υπάρχουν υποπροβλήματα,
- καθένα έχει μέγεθος ,
- καθένα απαιτεί συνδυαστική δουλειά.
Άρα η συνολική δουλειά στο επίπεδο είναι:
Όλο εξαρτάται από τον λόγο — πόσο αλλάζει η δουλειά από επίπεδο σε επίπεδο. Αθροίζοντας για όλα τα επίπεδα:
Αυτό είναι ένα γεωμετρικό άθροισμα, και η συμπεριφορά του εξαρτάται απόλυτα από το :
- (ισοδύναμα ): η δουλειά φθίνει· το άθροισμα συγκλίνει σε σταθερά → η ρίζα κυριαρχεί → .
- (ισοδύναμα ): κάθε επίπεδο ίδιο· το άθροισμα είναι → .
- (ισοδύναμα ): η δουλειά αυξάνει· το άθροισμα κυριαρχείται από τον τελευταίο όρο → τα φύλλα κυριαρχούν → .
(Για την τρίτη περίπτωση: , και το μπροστά απλοποιεί τον παρονομαστή.)
Δοκίμασέ το μόνος σου. Διάλεξε — ή πάτησε ένα έτοιμο παράδειγμα — και δες ποια περίπτωση προκύπτει και γιατί (η ράβδος δείχνει τη δουλειά ανά επίπεδο):
Κάθε επίπεδο του δέντρου αναδρομής κοστίζει το ίδιο, και υπάρχουν περίπου logᵦn επίπεδα — γι’ αυτό εμφανίζεται ο παράγοντας log n.
Εφαρμογές του Master Theorem
Τέσσερις γνωστές αναδρομές, λυμένες σε μία γραμμή η καθεμία:
| Αλγόριθμος | Αναδρομή | vs | Αποτέλεσμα | |
|---|---|---|---|---|
| Mergesort | → Περ. 2 | |||
| Δυαδική αναζήτηση | → Περ. 2 | |||
| Karatsuba (L04) | → Περ. 3 | |||
| Γραμμική επιλογή | → Περ. 1 |
Δύο πράγματα αξίζουν προσοχή. Το Master Theorem δίνει για τη mergesort το ίδιο αποτέλεσμα με τις τέσσερις αποδείξεις παραπάνω — σε μία γραμμή. Και για τον Karatsuba προβλέπει , που είναι καλύτερο από το αφελές του πολλαπλασιασμού — γι' αυτό το κόλπο αξίζει, και θα το δούμε αναλυτικά στο L04.
Πότε ΔΕΝ εφαρμόζεται το Master Theorem
Το θεώρημα είναι ισχυρό αλλά όχι παντοδύναμο. Δεν καλύπτει:
- Άνισο διαχωρισμό — π.χ. . Τα κομμάτια δεν έχουν κοινό . → Λύσε με δέντρο αναδρομής (το κάναμε ήδη παραπάνω: ).
- Μη πολυωνυμικό — π.χ. . Το δεν είναι της μορφής . → Χρειάζεται γενικευμένη εκδοχή.
- ή — δεν έχει νόημα στο μοντέλο (δεν υπάρχει «μισό υποπρόβλημα», το πρόβλημα πρέπει να μικραίνει).
Σε αυτές τις περιπτώσεις επιστρέφουμε στις τεχνικές #1–#4 — γι' αυτό αξίζει να τις ξέρεις, παρά την ύπαρξη του Master Theorem.
Είναι τελικά η mergesort η καλύτερη δυνατή;
Κλείνουμε με μια ερώτηση που ανοίξαμε στο L02: η mergesort τρέχει σε — μπορεί κανείς να κάνει καλύτερα;
Για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις στοιχείων, η απάντηση είναι όχι:
Θεώρημα (κάτω φράγμα). Κάθε αλγόριθμος ταξινόμησης που βασίζεται μόνο σε συγκρίσεις απαιτεί συγκρίσεις στη χείριστη περίπτωση.
Η απόδειξη είναι μια γεωμετρική παρατήρηση. Φαντάσου τον αλγόριθμό σου σαν ένα δέντρο απόφασης: η ρίζα είναι η πρώτη σύγκριση που θα κάνει, οι δύο ακμές είναι «ναι»/«όχι», και κάθε επόμενος εσωτερικός κόμβος είναι η επόμενη σύγκριση. Το βάθος της εκτέλεσης = ο αριθμός των συγκρίσεων που θα κάνει. Το ύψος του δέντρου = η χείριστη περίπτωση.
Δες το πραγματικά να συμβαίνει — διάλεξε μια διάταξη και φωτίζεται το μονοπάτι που πρέπει να ακολουθήσει κάθε αλγόριθμος για να την εντοπίσει:
Η ουσία σε δύο σειρές: διαφορετικές διατάξεις πρέπει να καταλήγουν σε διαφορετικά φύλλα· ένα δυαδικό δέντρο με φύλλα έχει ύψος . Άρα η mergesort, που δίνει άνω φράγμα, ακουμπάει το κάτω φράγμα — είναι ασυμπτωτικά βέλτιστη.
Κλείδωσε τη γνώση
Πρώτα η σκελετική δομή της mergesort — βάλε τα βήματα στη σωστή σειρά:
Τώρα το Master Theorem — συμπλήρωσε τα κενά χωρίς να κοιτάς πίσω:
Τι μάθαμε
Τι κρατάμε από αυτή τη διάλεξη
- D&C ως σχήμα: διαίρεσε σε ξένα υποπροβλήματα → κυρίευσε αναδρομικά → συνδύασε. Είναι επαγωγή μεταμφιεσμένη, και η ορθότητα αποδεικνύεται με επαγωγή.
- Mergesort: σπάσε στη μέση, ταξινόμησε αναδρομικά, συγχώνευσε με γραμμικό κόστος → . Κάθε επίπεδο του δέντρου κοστίζει , και τα επίπεδα είναι .
- Τέσσερις αποδείξεις του — μάθε τουλάχιστον δύο. Το τηλεσκόπιο (#1, #3) είναι το πιο ευέλικτο.
- Γιατί «στη μέση»: μόνο ο αναλογικός διαχωρισμός δίνει βάθος . Το « και » εκφυλίζει τον αλγόριθμο σε .
- Πύργος Hanoi: D&C με εκθετικό κόστος (). Το σχήμα από μόνο του δεν εγγυάται γρήγορο αλγόριθμο — μετράει το κόστος του συνδυασμού.
- Master Theorem: για , σύγκρινε με → τρεις περιπτώσεις. Γρήγορο, όταν εφαρμόζεται.
- Η mergesort είναι ασυμπτωτικά βέλτιστη για ταξινόμηση με συγκρίσεις — το κάτω φράγμα ακουμπάει το άνω φράγμα της.
Ασκήσεις από εξετάσεις
Από τη θεωρία στην εξεταστική
22 άσκησεις που χρησιμοποιούν ως τελευταίο εργαλείο αυτή τη διάλεξη. Οι πρόσφατες εξεταστικές (2024/2025) φέρουν badge προτεραιότητας.
Ιούνιος 2025 · Θέμα 1.4 — Αναδρομή T(n) = T(√n) + 1
Αν , κύκλωσε ποια ισχύουν:
- (i)
- (ii)
- (iii)
- (iv)
Ιούνιος 2025 · Θέμα 1.5 — Master Theorem
Αν , κύκλωσε ποια ισχύουν:
- (i)
- (ii)
- (iii)
- (iv)
Ιούνιος 2025 · Θέμα 4 — Γρήγορη ύψωση σε δύναμη
Σχεδίασε έναν αποδοτικό αλγόριθμο που, δοσμένων δύο θετικών ακεραίων και , υπολογίζει την τιμή , και αιτιολόγησε την ορθότητα και την πολυπλοκότητά του. Για ευκολία θεώρησε ότι και ότι το γινόμενο δύο ακεραίων γίνεται σε σταθερό χρόνο.
Σεπτέμβριος 2025 · Θέμα 1.3 — Master Theorem (περίπτωση 3)
Αν , κύκλωσε ποια ισχύουν: (i) · (ii) · (iii) · (iv) .
Σεπτέμβριος 2025 · Θέμα 1.4 — Αναδρομή T(n) = 2T(√n) + 1
Αν , κύκλωσε ποια ισχύουν:
- (i)
- (ii)
- (iii)
- (iv)
Σεπτέμβριος 2024 · Θέμα 1.4 — Σ/Λ: T(n) = 2T(n−1) + Θ(n)
Χαρακτήρισε (Σ)ωστό ή (Λ)άθος: «Αν , τότε .»
Σεπτέμβριος 2024 · Θέμα 3 — Πλήθος μηδενικών σε 1ᵐ0ⁿ με δυαδική αναζήτηση
Δοσμένης μιας δυαδικής συμβολοσειράς της μορφής (όπου τα και είναι άγνωστα, αλλά το γνωστό), περίγραψε σε φυσική γλώσσα έναν αλγόριθμο που βρίσκει το — το πλήθος των εμφανίσεων του — σε χρόνο, και δικαιολόγησε την ορθότητα και την πολυπλοκότητά του.
Υπόδειξη: ποια αναδρομική σχέση πρέπει να διέπει την ώστε να ισχύει ;
Φροντιστηριακό Σετ #3 · Άσκηση 1 — Κλειστός τύπος των αριθμών Fibonacci
Δίνεται η ακολουθία των αριθμών Fibonacci:
Λύσε την αναδρομική σχέση (βρες κλειστό τύπο για το ) και προσδιόρισε την ασυμπτωτική της τάξη.
Φροντιστηριακό Σετ #3 · Άσκηση 10 — Αναδρομή T(n) = T(√n) + 1
Λύσε την αναδρομική εξίσωση με αρχική συνθήκη , και δώσε την ασυμπτωτική τάξη της .
Φροντιστηριακό Σετ #3 · Άσκηση 2 — Αναδρομή με διπλή ρίζα
Λύσε την αναδρομική σχέση:
Φροντιστηριακό Σετ #3 · Άσκηση 4 — Αναδρομή T(n) = T(n−1) + 2ⁿ
Λύσε την αναδρομική σχέση με αρχική συνθήκη , και δώσε την ασυμπτωτική της τάξη.
Φροντιστηριακό Σετ #3 · Άσκηση 7 — Σύγκριση τριών αλγορίθμων D&C
Μια ομάδα προγραμματιστών εργάζεται για την επίλυση ενός υπολογιστικού προβλήματος και έχει δημιουργήσει 3 διαφορετικούς αλγορίθμους «διαίρει και βασίλευε»:
- Τον αλγόριθμο που διασπά το αρχικό πρόβλημα μεγέθους σε 4 υποπροβλήματα μεγέθους , τα επιλύει και στη συνέχεια συνθέτει τις λύσεις τους σε χρόνο .
- Τον αλγόριθμο που διασπά το αρχικό πρόβλημα μεγέθους σε 3 υποπροβλήματα μεγέθους , τα επιλύει και στη συνέχεια συνθέτει τις λύσεις τους σε χρόνο .
- Τον αλγόριθμο που διασπά το αρχικό πρόβλημα μεγέθους σε 27 υποπροβλήματα μεγέθους , τα επιλύει και στη συνέχεια συνθέτει τις λύσεις τους σε χρόνο .
(Α) Γράψε τις αναδρομικές εξισώσεις που δίνουν τον χρόνο εκτέλεσης των και λύσε τες με το Θεώρημα της Κυριαρχίας (Master Theorem).
(Β) Ποιος είναι ο ασυμπτωτικά αποδοτικότερος αλγόριθμος για το πρόβλημα ; Δικαιολόγησε την απάντηση.
Φροντιστηριακό Σετ #3 · Άσκηση 8 — Απόδειξη T(n) = n log n με επαγωγή
Δείξε με τη βοήθεια της μαθηματικής επαγωγής ότι, όταν το είναι ακριβής δύναμη του , η λύση της αναδρομής
είναι .
Φροντιστηριακό Σετ #3 · Άσκηση 9 — Master Theorem με λογαριθμικό όρο
Λύσε την αναδρομική εξίσωση με το Θεώρημα της Κυριαρχίας (Master Theorem).
Φροντιστηριακό Σετ #4 · Άσκηση 1 — Αναδρομή T(n) = √n·T(√n) + n
Βρες την ασυμπτωτική τάξη της όταν .
Φροντιστηριακό Σετ #4 · Άσκηση 10 — Master Theorem με λογαριθμικό όρο
Λύσε την αναδρομική εξίσωση, προσδιορίζοντας την τάξη της (), με : .
Φροντιστηριακό Σετ #4 · Άσκηση 2 — Ακριβής λύση με τη μέθοδο αντικατάστασης
Βρες την ακριβή λύση της αναδρομής με τη μέθοδο της αντικατάστασης:
Φροντιστηριακό Σετ #4 · Άσκηση 3 — Άνω φράγμα και το «κόλπο» της ενίσχυσης
Βρες ένα άνω φράγμα () για την αναδρομή με τη μέθοδο της αντικατάστασης.
Φροντιστηριακό Σετ #4 · Άσκηση 4 — Άνω φράγμα για άνιση αναδρομή
Βρες ένα άνω φράγμα για την αναδρομή .
Φροντιστηριακό Σετ #4 · Άσκηση 7 — Ο χαμένος όρος αριθμητικής προόδου
Δίνεται πίνακας . Τα στοιχεία του αντιστοιχούν σε όρους αριθμητικής προόδου, διατεταγμένα κατά αύξουσα σειρά. Ένας όρος απουσιάζει. Δώσε έναν αποδοτικό αλγόριθμο για την εύρεση του «χαμένου» όρου.
Φροντιστηριακό Σετ #5 · Άσκηση 1 — Stooge Sort: ορθότητα & πολυπλοκότητα
Δίνεται ο αναδρομικός αλγόριθμος ταξινόμησης Stooge Sort (ταξινομεί τον πίνακα από τον δείκτη έως τον ):
Stooge Sort(A, l, r): if A[l] > A[r] then Swap(A[l], A[r]) if l + 1 > r then return k := ⌊(r - l + 1) / 3⌋ Stooge Sort(A, l, r - k) // πρώτα 2/3 Stooge Sort(A, l + k, r ) // τελευταία 2/3 Stooge Sort(A, l, r - k) // ξανά τα πρώτα 2/3
(α) Απόδειξε ότι η κλήση ταξινομεί σωστά έναν πίνακα μήκους . (β) Γράψε την αναδρομική εξίσωση του χειρότερου χρόνου και την ακριβή τάξη ().
Ιούνιος 2023 · Θέμα 2Β — Δύο αλγόριθμοι D&C με Master Theorem
Ένα πρόβλημα επιλύεται με τους παρακάτω δύο αναδρομικούς αλγορίθμους για στιγμιότυπα μεγέθους :
- Ο διασπά το πρόβλημα σε 9 υποπροβλήματα μεγέθους και συνθέτει τις λύσεις σε χρόνο .
- Ο διασπά το πρόβλημα σε 2 υποπροβλήματα μεγέθους και συνθέτει τις λύσεις σε χρόνο για κάποια σταθερά .
Γράψε τις αναδρομικές εξισώσεις χρόνου εκτέλεσης των και λύσε τες με το Θεώρημα Κυριαρχίας.