Class Hub
Divide & Conquer·Διάλεξη 3·~55 min

L03 · D&C I — Mergesort & Master Theorem

Τι θα δούμε

Στα L01 και L02 μάθαμε να αποτιμούμε και να συγκρίνουμε αλγορίθμους. Από εδώ και πέρα αλλάζουμε ερώτηση: πώς σχεδιάζουμε έναν καλό αλγόριθμο από το μηδέν;

Αυτή η διάλεξη είναι η πρώτη τεχνική σχεδίασης του μαθήματος. Στόχοι:

  1. Να καταλάβουμε το «διαίρει και κυρίευε» ως σχήμα — όχι έναν αλγόριθμο, αλλά μια ολόκληρη οικογένεια αλγορίθμων που χτίζονται με τον ίδιο τρόπο.
  2. Να δούμε το αστέρι της οικογένειας, τη συγχωνευτική ταξινόμηση (mergesort), και να αποδείξουμε ότι τρέχει σε — με τέσσερις διαφορετικούς τρόπους, γιατί καθένας διδάσκει μια χρήσιμη τεχνική.
  3. Να βγάλουμε ένα γενικό εργαλείο, το Master Theorem, που λύνει μια ολόκληρη οικογένεια αναδρομικών σχέσεων χωρίς απόδειξη από την αρχή.
  4. Να δούμε, με τον πύργο του Hanoi, ότι το σχήμα D&C από μόνο του δεν εγγυάται γρήγορο αλγόριθμο.

Γρήγορη υπενθύμιση από το L02

Όλη η διάλεξη μιλάει για χρόνους εκτέλεσης, οπότε ας ξανασυμφωνήσουμε στη γλώσσα. Από το L02:

  • άνω φράγμα: η δεν αυξάνεται γρηγορότερα από την .
  • κάτω φράγμα: δεν αυξάνεται πιο αργά.
  • ακριβές φράγμα: ίδιος ρυθμός, και από τις δύο μεριές.

Και η κλίμακα πολυπλοκοτήτων, που θα χρησιμοποιήσουμε διαρκώς:

Όσα είναι αριστερά (πολυωνυμικά) είναι «καλά»· όσα είναι δεξιά (εκθετικά) είναι «κακά». Κράτα ειδικά στο μυαλό σου τη θέση του ανάμεσα στο γραμμικό και στο τετραγωνικό. Εκεί ζει η mergesort.

Ζέσταμα: το μέγιστο ενός πίνακα

Πριν επιτεθούμε στο σύνθετο πρόβλημα της ταξινόμησης, ένα μίνι πρόβλημα για να ξαναβρούμε τον ρυθμό της ανάλυσης. Δοθέντος πίνακα , βρες το μέγιστο στοιχείο.

Η πιο φυσική ιδέα: κράτα έναν «τρέχοντα νικητή» και διέτρεξε τον πίνακα μία φορά.

μέγιστο(a[1..n]):
v ← a[1]
για i = 2 έως n:
αν v < a[i]: v ← a[i]
επίστρεψε v
Στοιχειώδης πράξη: η σύγκριση v < a[i].

Πόσες συγκρίσεις; Ακριβώς — μία για κάθε στοιχείο πέρα από το πρώτο, ανεξάρτητα από την είσοδο. Άρα .

Υπάρχει και μια δεύτερη ιδέα: σάρωσε τα γειτονικά ζευγάρια κι αντάλλασσε ώστε το μεγαλύτερο να «σπρώχνεται» προς το τέλος· στο τέλος, το είναι το μέγιστο. Πάλι συγκρίσεις, πάλι .

Το πρόβλημα: ταξινόμηση

Πρόβλημα. Δοθέντος πίνακα στοιχείων, να τα διατάξουμε σε αύξουσα σειρά (ως προς κάποιο κριτήριο σύγκρισης).

Γιατί ξοδεύουμε ολόκληρη διάλεξη στην ταξινόμηση; Γιατί είναι παντού. Οι προφανείς χρήσεις — μια αλφαβητική λίστα, μια playlist, αρχεία ταξινομημένα κατά ημερομηνία — είναι μόνο η αρχή. Το πραγματικό κέρδος είναι ότι μια ταξινομημένη λίστα ξεκλειδώνει δεκάδες άλλα προβλήματα:

  • Δυαδική αναζήτηση σε αντί για — όπως είδαμε στο L01.
  • Μεσαίο στοιχείο σε , ακραίες τιμές στις άκρες, διπλότυπα σε ένα γραμμικό πέρασμα (τα ίσα στοιχεία στέκονται πλέον δίπλα-δίπλα).
  • Πλησιέστερο ζευγάρι αριθμών: σε ταξινομημένη λίστα είναι κάποιο γειτονικό ζευγάρι — .

Και αμέτρητα προβλήματα χρησιμοποιούν την ταξινόμηση ως κρυφό υποπρόβλημα: συμπίεση δεδομένων (Huffman, L12), γραφικά, υπολογιστική βιολογία, ο αλγόριθμος Kruskal για ελάχιστα συνδετικά δέντρα (L09) που απαιτεί ταξινομημένες ακμές.

Πρώτη προσπάθεια: bubble & insertion sort

Πριν δούμε το «έξυπνο» mergesort, ας δούμε τι μας δίνει η πιο αφελής σκέψη — δύο κλασικοί απλοί αλγόριθμοι.

ΑλγόριθμοςBubble sort — «η φυσαλίδα»
Θ(n²)
Σε κάθε πέρασμα, το μεγαλύτερο στοιχείο «αναδύεται» σαν φυσαλίδα στη σωστή θέση στο τέλος.

Με λόγια. Διατρέχεις τον πίνακα συγκρίνοντας γειτονικά ζευγάρια· όποτε βρεις δύο σε λάθος σειρά, τα αντάλλασσεις. Μετά από ένα πλήρες πέρασμα, το μεγαλύτερο στοιχείο έχει «κυλήσει» μέχρι το τέλος. Επαναλαμβάνεις για το υπόλοιπο — μετά από περάσματα όλα είναι στη θέση τους.

Πολυπλοκότητα. Διπλά φωλιασμένος βρόχος: .

ΑλγόριθμοςInsertion sort — «η ενθετική»
Θ(n²)
Όπως ταξινομείς τραπουλόχαρτα στο χέρι: κάθε νέο φύλλο μπαίνει στη σωστή θέση ανάμεσα στα ήδη ταξινομημένα.

Με λόγια. Κρατάς το αριστερό κομμάτι του πίνακα πάντα ταξινομημένο. Παίρνεις το επόμενο στοιχείο και το «κατεβάζεις» προς τα αριστερά, ολισθαίνοντας τα μεγαλύτερα στοιχεία ένα βήμα δεξιά, ώσπου να βρει τη θέση του.

Πολυπλοκότητα. Στη χείριστη περίπτωση (αντίστροφα ταξινομημένος πίνακας) κάθε νέο στοιχείο κατεβαίνει σε όλο το ταξινομημένο πρόθεμα → . Στη βέλτιστη περίπτωση (ήδη ταξινομημένος) κάθε στοιχείο μένει επιτόπου → μόνο .

Πριν δούμε γιατί, ας τη νιώσουμε. Πατώντας ▶ τρέχεις και τους τρεις αλγορίθμους στον ίδιο πίνακα 10 στοιχείων· κάθε αλγόριθμος έχει τον δικό του μετρητή συγκρίσεων, και βλέπεις πόσο γρηγορότερα γεμίζει ο της mergesort. Άλλαξε σε «Αντίστροφος» για να δεις τη χειρότερη είσοδο της insertion (όπου ισοφαρίζει την bubble) και σε «Σχεδόν ταξινομημένος» για τη βέλτιστη (όπου η insertion γίνεται σχεδόν γραμμική):

Bubble vs Insertion vs Mergesort — ο ίδιος πίνακας, τρεις αλγόριθμοι
n = 10
Bubble sortΘ(n²)
συγκρίσεις:0
5
2
8
1
9
3
7
4
10
6
Insertion sortO(n²), best Θ(n)
συγκρίσεις:0
5
2
8
1
9
3
7
4
10
6
MergesortO(n log n)
συγκρίσεις:0
5
2
8
1
9
3
7
4
10
6
βήμα 0 / 45

Δύο πράγματα να προσέξεις. Η bubble sort είναι ανεπηρέαστη: 45 συγκρίσεις και στις τρεις περιπτώσεις, γιατί ο εξωτερικός βρόχος δεν «βλέπει» τι έγινε μέσα. Η insertion sort είναι έξυπνη: για σχεδόν-ταξινομημένη είσοδο τελειώνει σε πολύ λιγότερες συγκρίσεις. Αλλά καμιά από τις δύο δεν είναι κοντά στη mergesort όταν η είσοδος είναι τυχαία ή αντίστροφη — και η απόσταση ανοίγει όσο μεγαλώνει το , ακριβώς όπως λέει το vs .

Η μεγάλη ιδέα: διαίρει και κυρίευε

Πρέπει να σπάσουμε το φράγμα του . Από πού πιάνεται κανείς; Από μια πολύ ανθρώπινη ιδέα.

Divide et impera!

(λατινικό: «διαίρει και βασίλευε»)

Η τεχνική διαίρει και κυρίευε (D&C) βασίζεται σε τρία βήματα:

  1. Διαίρει τα δεδομένα σε μικρότερα υποπροβλήματα χωρίς κοινά στοιχεία (ξένα μεταξύ τους).
  2. Κυρίευσε κάθε υποπρόβλημα ξεχωριστά και αναδρομικά — εφαρμόζοντας ξανά τον ίδιο αλγόριθμο.
  3. Συνδύασε τις επιμέρους λύσεις σε λύση του αρχικού προβλήματος.
Πρόβλημα μεγέθους n(αρχική είσοδος)① ΔιαίρειΥποπρόβλημα 1μεγέθους n/2Υποπρόβλημα 2μεγέθους n/2μικρότερου μεγέθους② Κυρίευε (αναδρομικά)Λύση 1Λύση 2③ Συνδύασε

Γιατί δουλεύει: είναι επαγωγή μεταμφιεσμένη

Η D&C δεν είναι ένα κόλπο που «τυχαίνει» να δουλεύει — είναι επαγωγική κατασκευή της λύσης. Για να σχεδιάσεις έναν τέτοιο αλγόριθμο, αρκεί (και χρειάζεται) να ξέρεις δύο πράγματα:

  1. Βάση: πώς λύνεται το πρόβλημα για πολύ μικρή, σταθερή είσοδο — π.χ. .
  2. Επαγωγικό βήμα: πώς συνδυάζονται οι ορθές λύσεις των μικρότερων υποπροβλημάτων σε μία ορθή λύση για όλη την είσοδο.

Συγχωνευτική ταξινόμηση: η ιδέα

Ας ντύσουμε την αναλογία της στοίβας με γραπτά σε αλγόριθμο. Πώς ταξινομούμε με D&C;

  1. Βάση. Πίνακας με ένα στοιχείο είναι ήδη ταξινομημένος — τον επιστρέφουμε ως έχει.
  2. Αλλιώς: διαίρεσε τον πίνακα στη μέση· ταξινόμησε αναδρομικά καθένα από τα δύο μισά· συγχώνευσε τις δύο ταξινομημένες λίστες σε μία.

Όλο το βάρος της σκέψης είναι: «αν ξέρω να συγχωνεύω δύο ταξινομημένες λίστες, τότε ξέρω να ταξινομώ τα πάντα» — η αναδρομή αναλαμβάνει το υπόλοιπο. Πριν γράψουμε γραμμή ψευδοκώδικα, πάτα Επόμενο και δες το να συμβαίνει — πρώτα η φάση Διαίρει μέχρι τους πίνακες ενός στοιχείου, μετά η φάση Συγχώνευσε προς τα πάνω:

Mergesort βήμα-βήμα — διαίρει ως το 1, μετά συγχώνευσε
Φάση: Διαίρει
5
2
8
1
9
3
7
4
1 κομμάτι × 8 στοιχεία
Αφετηρία: ολόκληρος ο πίνακας, αταξινόμητος. Η mergesort δεν ταξινομεί ακόμα — πρώτα διαιρεί.
Δουλειά συγχώνευσης ανά επίπεδοσύνολο: 0
≈ n = 8
≈ n = 8
≈ n = 8
Βήμα 1 / 7

Πρόσεξε αυτό που μετράει το «Δουλειά συγχώνευσης ανά επίπεδο»: κάθε επίπεδο συγχώνευσης κοστίζει περίπου πράξεις, και τα επίπεδα είναι λίγα — όσα και τα μισαρίσματα μέχρι το 1. Κράτα το· είναι ολόκληρη η απόδειξη του σε μία εικόνα.

Η συγχώνευση δύο ταξινομημένων πινάκων

Είδαμε ότι η mergesort στηρίζεται όλη πάνω σε μία πράξη: τη συγχώνευση. Ας τη χτίσουμε προσεκτικά — είναι το «επαγωγικό βήμα» του αλγορίθμου.

Σκέψου δύο ουρές στο supermarket που πρέπει να γίνουν μία ταξινομημένη ουρά: κρατάς δύο δείκτες και , έναν στην αρχή κάθε ουράς, κοιτάς τα δύο πρώτα στοιχεία, παίρνεις το μικρότερο και προχωράς τον αντίστοιχο δείκτη. Επανάληψη, μέχρι να αδειάσουν και οι δύο ουρές. Πάτα Επόμενο και δες ακριβώς αυτό να συμβαίνει — ή πέρασε σε «Δοκίμασε εσύ» για να διαλέξεις μόνος σου ποια μεριά να τραβήξεις:

Συγχώνευση δύο ταξινομημένων πινάκων — δείκτες i, j, k βήμα-βήμα
a[ ]i = 0
2
i
4
i
6
i
9
i
b[ ]j = 0
1
j
3
j
5
j
7
j
8
j
σύγκριση: a[0] = 2 > b[0] = 1 → τράβα από b
c[ ] (αποτέλεσμα)k = 0
βήμα 0 / 9

Δύο παρατηρήσεις που θα μας χρησιμεύσουν αμέσως μετά: (1) κάθε βήμα προχωρά ακριβώς έναν δείκτη, οπότε ο συνολικός αριθμός βημάτων είναι το πολύ · (2) η συγχώνευση εκμεταλλεύεται το ότι οι δύο είσοδοι είναι ήδη ταξινομημένες — το μικρότερο στοιχείο που δεν έχει γραφτεί ακόμα είναι σίγουρα κάποιο από τα δύο «πάνω-πάνω».

ΑλγόριθμοςΣυγχώνευση δύο ταξινομημένων πινάκων
O(m + n)
Δύο δείκτες σαρώνουν τους δύο πίνακες από την αρχή· κάθε φορά τραβάμε στο αποτέλεσμα το μικρότερο από τα δύο «κορυφαία» στοιχεία.
Είσοδος:
δύο ήδη ταξινομημένοι πίνακες a (m στοιχεία) και b (n στοιχεία)
Έξοδος:
ένας ταξινομημένος πίνακας c με όλα τα m + n στοιχεία

Με λόγια. Κράτα έναν δείκτη στην αρχή του και έναν δείκτη στην αρχή του . Κάθε δείκτης δείχνει το πρώτο στοιχείο που δεν έχεις χρησιμοποιήσει ακόμη. Σε κάθε βήμα κοιτάς τα δύο στοιχεία και , παίρνεις το μικρότερο και το βάζεις στο αποτέλεσμα, και προχωράς μόνο τον δείκτη που χρησιμοποίησες. Επειδή και οι δύο πίνακες είναι ήδη ταξινομημένοι, το μικρότερο μη-χρησιμοποιημένο στοιχείο όλων είναι σίγουρα ένα από αυτά τα δύο. Σαν δύο ταξινομημένες ουρές στο supermarket που γίνονται μία.

Πολυπλοκότητα. Ο βρόχος εκτελείται ακριβώς φορές, και κάθε επανάληψη κάνει σταθερή δουλειά (μία σύγκριση, μία ανάθεση, μία αύξηση δείκτη). Άρα — γραμμικός στο σύνολο των στοιχείων.

Ο αλγόριθμος mergesort

Με τη συγχώνευση έτοιμη, ο πλήρης αλγόριθμος είναι σχεδόν τετριμμένος — γι' αυτό άλλωστε δουλεύει το D&C: μόλις λύσεις το «επαγωγικό βήμα», ο αλγόριθμος γράφεται μόνος του.

ΑλγόριθμοςMergesort (συγχωνευτική ταξινόμηση)
O(n log n)
Σπάσε στη μέση, ταξινόμησε αναδρομικά τα δύο μισά, συγχώνευσέ τα.
Είσοδος:
πίνακας A και όρια p, r (αρχικά p = 1, r = n)
Έξοδος:
το τμήμα A[p..r] ταξινομημένο

Με λόγια. Αν το τμήμα έχει ένα στοιχείο (), είναι ήδη ταξινομημένο — αυτή είναι η βάση που σταματά την αναδρομή. Αλλιώς, βρίσκουμε το μεσαίο σημείο , καλούμε αναδρομικά τη mergesort στο αριστερό και στο δεξί μισό, και τέλος συγχωνεύουμε τα δύο ταξινομημένα μισά. Την κάθε αναδρομική κλήση τη θεωρούμε «μαύρο κουτί»: εμπιστευόμαστε ότι επιστρέφει το μισό ταξινομημένο — αυτό ακριβώς εγγυάται η επαγωγική υπόθεση.

Το δέντρο αναδρομής

Πριν αποδείξουμε τυπικά ότι , ας δούμε πού πάει η δουλειά. Ζωγραφίζουμε το δέντρο αναδρομής: η ρίζα είναι η αρχική κλήση, και κάθε κλήση κρεμάει από κάτω τις δύο αναδρομικές κλήσεις της. Για :

επίπεδο 0 (ρίζα)n = 8δουλειά: 8επίπεδο 1n/2 = 4n/2 = 42 × 4 = 8επίπεδο 2n/4 = 2n/4 = 2n/4 = 2n/4 = 24 × 2 = 8επίπεδο 3 (φύλλα)111111118 × 1 = 8Βάθος δέντρου: log₂(n) = 3Σύνολο: 8 × log₂(8) = 24 πράξεις — γενικά n × log n

Το κλειδί είναι μία παρατήρηση: κάθε επίπεδο του δέντρου κάνει συνολικά συγκρίσεις. Γιατί;

  • Στο επίπεδο 1 έχουμε 2 υποπροβλήματα μεγέθους . Η συγχώνευση καθενός κοστίζει → σύνολο .
  • Στο επίπεδο 2 έχουμε 4 υποπροβλήματα μεγέθους , κόστος το καθένα → σύνολο .
  • Σε γενικό επίπεδο έχουμε υποπροβλήματα μεγέθους → σύνολο πάλι .

Τα υποπροβλήματα πληθαίνουν, αλλά ταυτόχρονα μικραίνουν στον ίδιο ρυθμό — οπότε το γινόμενο μένει σταθερό. Και πόσα επίπεδα υπάρχουν; Όσα τα μισαρίσματα του μέχρι το 1, δηλαδή . Άρα:

Αυτή είναι η διαίσθηση. Τώρα ας τη μετατρέψουμε σε αυστηρή απόδειξη — και μάλιστα με τέσσερις τρόπους.

Η αναδρομική σχέση της mergesort

Ορίζουμε ως την πολυπλοκότητα της mergesort για είσοδο μεγέθους . Διαβάζοντας τον ψευδοκώδικα:

Σε λόγια: για καμία σύγκριση· για , το κόστος του αριστερού μισού συν του δεξιού μισού συν για τη συγχώνευση.

Στόχος: να δείξουμε ότι . Θα το κάνουμε τέσσερις φορές, με διαφορετική τεχνική κάθε φορά — κάθε τεχνική επιστρέφει σε άλλες αναδρομικές σχέσεις παρακάτω στο μάθημα.

Απόδειξη #1 — διαίρεση με n (τηλεσκόπιο)

Υποθέτουμε ότι το είναι δύναμη του 2, οπότε δεν χρειάζονται πατώματα/οροφές και η σχέση γίνεται καθαρά:

Το τέχνασμα: διαιρούμε και τα δύο μέλη με .

Αν θέσουμε , η σχέση απλοποιείται σε κάτι πανεύκολο:

Εφαρμόζοντας την ίδια ταυτότητα ξανά και ξανά, οι όροι τηλεσκοπούν:

Όταν φτάσουμε στο , μένει , άρα:

Απόδειξη #2 — επαγωγή στον διπλασιασμό

Επαγωγή πάνω στο (πάλι με ). Θέλουμε να δείξουμε .

Βάση. . ✓

Επαγωγική υπόθεση. Έστω ότι ισχύει .

Επαγωγικό βήμα. Δείχνουμε ότι ισχύει και για τον διπλάσιο :

Χρησιμοποιήσαμε (με ) και την ταυτότητα .

Απόδειξη #3 — πολλαπλασιασμός γραμμών

Πιο γενική εκδοχή του τηλεσκοπίου, που δουλεύει για οποιαδήποτε σταθερά : αν , τότε .

Πώς. Γράφουμε τη σχέση επανειλημμένα, πολλαπλασιάζοντας κάθε γραμμή με , ώστε οι μεσαίοι όροι να ταιριάξουν:

Προσθέτουμε όλες τις γραμμές. Κάθε όρος της μορφής εμφανίζεται μία φορά αριστερά και μία δεξιά — τηλεσκοπεί — και μένει:

Για (άρα ) και :

Άρα .

Απόδειξη #4 — η γενική περίπτωση (με οροφές)

Οι τρεις πρώτες αποδείξεις υπέθεσαν . Τι γίνεται αν το είναι οποιοσδήποτε αριθμός (π.χ. 100, 1000, 13.547);

Θεώρημα. Για τη σχέση

ισχύει .

Απόδειξη με ισχυρή επαγωγή στο .

Βάση (): . ✓

Επαγωγική υπόθεση. Η σχέση ισχύει για κάθε .

Επαγωγικό βήμα. Θέτουμε και . Ισχύει και .

Δικαιολόγηση του . Από τον ορισμό της οροφής, , άρα:

Παίρνοντας λογάριθμο, · και επειδή το δεξί μέλος είναι ακέραιος, ισχύει και με οροφή: .

Γιατί «στη μέση»; Και τι μετράει πραγματικά για την πολυπλοκότητα;

Τώρα μπορούμε να απαντήσουμε στην ερώτηση που αφήσαμε ανοιχτή — και μάλιστα να την επεκτείνουμε. Δύο διαφορετικά «λάθος» διαχωρίσματα:

  • Αναλογικός αλλά άνισος, π.χ. 60/40 ή 90/10. Το ένα κομμάτι είναι μεγαλύτερο, αλλά είναι πάντα σταθερό ποσοστό του γονικού.
  • Σταθερό κομμάτι, π.χ. « και ». Το μικρό κομμάτι έχει σταθερό μέγεθος, ανεξάρτητο από το .

Η διαίσθηση που μετράει είναι το βάθος του δέντρου αναδρομής — γιατί η δουλειά ανά επίπεδο μένει έτσι κι αλλιώς (τα κομμάτια καλύπτουν όλη την είσοδο), οπότε το συνολικό κόστος είναι «βάθος × ». Δοκίμασε και τα δύο και πρόσεξε το σχήμα του δέντρου:

Σχήμα δέντρου αναδρομής vs τρόπος διαχωρισμού — με n = 32
κλάσμα μεγάλου κομματιού α50 / 50
50/50 (ιδανικό)90/10 (πολύ άνισο)
321616888844444444222222222222222211111111111111111111111111111111
βάθος δέντρου
5
≈ log₁/(1−α) n ≈ 5.0…5.0
δουλειά ανά επίπεδο
≈ 32
τα κομμάτια καλύπτουν όλη την είσοδο
συνολική δουλειά
≈ 160 ≈ Θ(n log n)
βάθος × n = λογαριθμικό × n
Αρκεί να μην εξαρτάται το κομμάτι από το n. Με α = 50%, το βαθύτερο μονοπάτι ακολουθεί διαρκώς το μεγάλο κομμάτι — αλλά κάθε φορά μικραίνει κατά παράγοντα 1/α, οπότε φτάνει στο 1 σε ≈ log₁/α n βήματα — λογαριθμικό. Πολλαπλασίασε με την n δουλειά ανά επίπεδο → O(n log n). Ο διαχωρισμός 50/50 είναι ο γρηγορότερος, αλλά κάθε σταθερό κλάσμα δίνει την ίδια τάξη.

Ο σταθερός διαχωρισμός γεννά μια καμπύλη — ένα μακρόστενο δέντρο όπου κάθε επίπεδο μειώνεται μόνο κατά — άρα χρειάζεται επίπεδα. Πολλαπλασίασε με τα ανά επίπεδο και βγαίνει . Είναι ακριβώς το ίδιο πρόβλημα με την bubble sort, χωρίς καμιά βελτίωση.

Με μαθηματικά: για διαχωρισμό « και » η αναδρομή γίνεται , και ξεδιπλώνοντας: Για διαχωρισμό (που είναι αναλογικός, απλώς όχι ισόρροπος) η αναδρομή είναι . Το βαθύτερο μονοπάτι ακολουθεί το μεγάλο κομμάτι: , φτάνει στο 1 σε βήματα — ακόμη λογαριθμικό. Κάθε επίπεδο πάλι , ίδια τάξη με την ισόρροπη mergesort.

Όταν το D&C ΔΕΝ είναι γρήγορο: ο πύργος του Hanoi

Μέχρι τώρα το D&C φαίνεται μαγικό. Ένα διάσημο παράδειγμα δείχνει ότι δεν είναι — το σχήμα από μόνο του δεν εγγυάται τίποτα.

Πρόβλημα. Υπάρχουν 3 στύλοι (A, B, C) και δίσκοι στοιβαγμένοι στον στύλο A σε κωνική μορφή (μεγάλος κάτω, μικρός πάνω). Θέλουμε να τους μεταφέρουμε όλους στον C, με κανόνες: (1) μετακινούμε έναν δίσκο κάθε φορά, (2) παίρνουμε πάντα τον κορυφαίο δίσκο ενός στύλου, (3) ποτέ δεν βάζουμε δίσκο πάνω σε μικρότερό του.

Το D&C το ξεκλειδώνει σε τρεις γραμμές. Παρατήρησε: για να μετακινήσεις τον μεγαλύτερο δίσκο, πρέπει πρώτα να έχεις «αδειάσει» τους από πάνω του στον βοηθητικό στύλο.

ΑλγόριθμοςΠύργος του Hanoi (λύση D&C)
2ⁿ − 1 κινήσεις
Μετάφερε τους n−1 πάνω δίσκους στον βοηθητικό στύλο, μετά τον μεγάλο δίσκο στον στόχο, μετά πάλι τους n−1 από πάνω του.
Είσοδος:
n δίσκοι στον στύλο «από»
Έξοδος:
και οι n δίσκοι στον στύλο «προς», με τη σωστή σειρά

Με λόγια. Η βάση: για δεν υπάρχει τίποτα να γίνει. Για δίσκους, υποθέτουμε (επαγωγική υπόθεση) ότι ξέρουμε να λύνουμε για , και χτίζουμε τη λύση σε τρία βήματα: μετακινούμε αναδρομικά τους πάνω δίσκους στον βοηθητικό στύλο· μετακινούμε τον μεγαλύτερο δίσκο κατευθείαν στον στόχο· μετακινούμε αναδρομικά πάλι τους δίσκους πάνω του.

Δες το να δουλεύει — και κυρίως πέρασε στην καρτέλα «Δες την έκρηξη» για να καταλάβεις γιατί αυτή η όμορφη D&C σχεδίαση γεννά εκθετικό κόστος:

Πύργος του Hanoi — γιατί το D&C μπορεί και να εκραγεί
πλήθος δίσκων n3
1 (1 κίνηση)7 (127 κινήσεις)
ABC
κινήσεις ως τώρα
0
σύνολο 2ⁿ − 1
7
vs mergesort (n·log n)
5
συγχωνεύσεις σε ταξινόμηση n στοιχείων

Πολυπλοκότητα. Έστω ο αριθμός κινήσεων. Οι δύο αναδρομικές κλήσεις κοστίζουν η καθεμία, συν 1 κίνηση για τον μεγάλο δίσκο:

Λύνοντας (ξεδιπλώνοντας τη σχέση): . (Έλεγχος: , , . ✓)

Κάρτα μνήμηςMergesort
Λέξεις-κλειδιά
διαίρει στη μέσηαναδρομή στα δύο μισάγραμμική συγχώνευσηn δουλειά ανά επίπεδοlog n επίπεδα
Τα βήματα στο μυαλό σου
1Βάση: τμήμα με ≤ 1 στοιχείο → ήδη ταξινομημένο.
2Διαίρεσε τον πίνακα σε δύο ίσα μισά.
3Ταξινόμησε αναδρομικά καθένα από τα δύο μισά.
4Συγχώνευσε τα δύο ταξινομημένα μισά (γραμμικό κόστος O(n)).
Πολυπλοκότητα
O(n log n)
Κλασική παγίδα
Δύο παγίδες. (1) Η συγχώνευση δεν είναι in-place — θέλει βοηθητικό πίνακα O(n). (2) Ο διαχωρισμός πρέπει να είναι αναλογικός: «n−2 και 2» εκφυλίζει τον αλγόριθμο σε Θ(n²).

Το Master Theorem

Παρατήρησε ένα μοτίβο: αναδρομικές σχέσεις της μορφής προκύπτουν συνέχεια στους αλγορίθμους D&C. Αντί να τις λύνουμε από την αρχή κάθε φορά, υπάρχει ένα έτοιμο θεώρημα που τις λύνει.

Τα τρία σύμβολα: = πόσα υποπροβλήματα φτιάχνεις, = πόσες φορές μικραίνει το καθένα, = ο εκθέτης του κόστους του συνδυαστικού βήματος . Όλη η ουσία είναι μια σύγκριση: ο εκθέτης (κόστος συνδυασμού) εναντίον του (ρυθμός που πληθαίνει το δέντρο). Ό,τι είναι μεγαλύτερο, κυριαρχεί.

Σύγκρινε d με logₐ ar = a / b^dd > log_b a (r < 1)d = log_b a (r = 1)d < log_b a (r > 1)Περίπτωση 1«η ρίζα κυριαρχεί»Περίπτωση 2«ισορροπία»Περίπτωση 3«τα φύλλα κυριαρχούν»T(n) = O(n^d)O(n^d log n)O(n^(log_b a))

Διαισθητική απόδειξη μέσω δέντρου αναδρομής

Από πού βγαίνουν οι τρεις περιπτώσεις; Ξαναγυρνάμε στο δέντρο αναδρομής. Στο επίπεδο :

  • υπάρχουν υποπροβλήματα,
  • καθένα έχει μέγεθος ,
  • καθένα απαιτεί συνδυαστική δουλειά.

Άρα η συνολική δουλειά στο επίπεδο είναι:

Όλο εξαρτάται από τον λόγο — πόσο αλλάζει η δουλειά από επίπεδο σε επίπεδο. Αθροίζοντας για όλα τα επίπεδα:

Αυτό είναι ένα γεωμετρικό άθροισμα, και η συμπεριφορά του εξαρτάται απόλυτα από το :

  • (ισοδύναμα ): η δουλειά φθίνει· το άθροισμα συγκλίνει σε σταθερά → η ρίζα κυριαρχεί → .
  • (ισοδύναμα ): κάθε επίπεδο ίδιο· το άθροισμα είναι .
  • (ισοδύναμα ): η δουλειά αυξάνει· το άθροισμα κυριαρχείται από τον τελευταίο όρο → τα φύλλα κυριαρχούν → .

(Για την τρίτη περίπτωση: , και το μπροστά απλοποιεί τον παρονομαστή.)

Δοκίμασέ το μόνος σου. Διάλεξε — ή πάτησε ένα έτοιμο παράδειγμα — και δες ποια περίπτωση προκύπτει και γιατί (η ράβδος δείχνει τη δουλειά ανά επίπεδο):

Master Theorem — διάλεξε a, b, d και δες την περίπτωση
a — πλήθος υποπροβλημάτων2
b — παράγοντας σμίκρυνσης2
d — εκθέτης συνδυασμού1
T(n) = 2 · T(n/2) + O(n)
d = 1=log22 = 1
Περίπτωση 2 — ισορροπίαT(n) = O(n · log n)

Κάθε επίπεδο του δέντρου αναδρομής κοστίζει το ίδιο, και υπάρχουν περίπου logᵦn επίπεδα — γι’ αυτό εμφανίζεται ο παράγοντας log n.

Δουλειά ανά επίπεδο του δέντρουr = a/bᵈ = 1
0
1
2
3
4
5
επίπεδο δέντρου αναδρομής (0 = ρίζα · κάθε επίπεδο είναι r× του προηγουμένου)

Εφαρμογές του Master Theorem

Τέσσερις γνωστές αναδρομές, λυμένες σε μία γραμμή η καθεμία:

ΑλγόριθμοςΑναδρομή vs Αποτέλεσμα
Mergesort → Περ. 2
Δυαδική αναζήτηση → Περ. 2
Karatsuba (L04) → Περ. 3
Γραμμική επιλογή → Περ. 1

Δύο πράγματα αξίζουν προσοχή. Το Master Theorem δίνει για τη mergesort το ίδιο αποτέλεσμα με τις τέσσερις αποδείξεις παραπάνω — σε μία γραμμή. Και για τον Karatsuba προβλέπει , που είναι καλύτερο από το αφελές του πολλαπλασιασμού — γι' αυτό το κόλπο αξίζει, και θα το δούμε αναλυτικά στο L04.

Πότε ΔΕΝ εφαρμόζεται το Master Theorem

Το θεώρημα είναι ισχυρό αλλά όχι παντοδύναμο. Δεν καλύπτει:

  1. Άνισο διαχωρισμό — π.χ. . Τα κομμάτια δεν έχουν κοινό . → Λύσε με δέντρο αναδρομής (το κάναμε ήδη παραπάνω: ).
  2. Μη πολυωνυμικό — π.χ. . Το δεν είναι της μορφής . → Χρειάζεται γενικευμένη εκδοχή.
  3. ή — δεν έχει νόημα στο μοντέλο (δεν υπάρχει «μισό υποπρόβλημα», το πρόβλημα πρέπει να μικραίνει).

Σε αυτές τις περιπτώσεις επιστρέφουμε στις τεχνικές #1–#4 — γι' αυτό αξίζει να τις ξέρεις, παρά την ύπαρξη του Master Theorem.

Είναι τελικά η mergesort η καλύτερη δυνατή;

Κλείνουμε με μια ερώτηση που ανοίξαμε στο L02: η mergesort τρέχει σε — μπορεί κανείς να κάνει καλύτερα;

Για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις στοιχείων, η απάντηση είναι όχι:

Θεώρημα (κάτω φράγμα). Κάθε αλγόριθμος ταξινόμησης που βασίζεται μόνο σε συγκρίσεις απαιτεί συγκρίσεις στη χείριστη περίπτωση.

Η απόδειξη είναι μια γεωμετρική παρατήρηση. Φαντάσου τον αλγόριθμό σου σαν ένα δέντρο απόφασης: η ρίζα είναι η πρώτη σύγκριση που θα κάνει, οι δύο ακμές είναι «ναι»/«όχι», και κάθε επόμενος εσωτερικός κόμβος είναι η επόμενη σύγκριση. Το βάθος της εκτέλεσης = ο αριθμός των συγκρίσεων που θα κάνει. Το ύψος του δέντρου = η χείριστη περίπτωση.

Δες το πραγματικά να συμβαίνει — διάλεξε μια διάταξη και φωτίζεται το μονοπάτι που πρέπει να ακολουθήσει κάθε αλγόριθμος για να την εντοπίσει:

Δέντρο απόφασης — γιατί κάθε αλγόριθμος με συγκρίσεις χρειάζεται Ω(n log n)
Διάλεξε μια διάταξη των a, b, c. Το μονοπάτι από τη ρίζα στο φύλλο της φωτίζεται, και ο αριθμός συγκρίσεων είναι το βάθος εκείνου του μονοπατιού.
ναιόχιναιόχιναιόχιναιόχιναιόχιa < b ;b < c ;a < c ;a < b < ca < c ;b < a < cb < c ;a < c < bc < a < bb < c < ac < b < a
Διάλεξε μια διάταξη παραπάνω για να δεις το μονοπάτι και το βάθος του.

Η ουσία σε δύο σειρές: διαφορετικές διατάξεις πρέπει να καταλήγουν σε διαφορετικά φύλλα· ένα δυαδικό δέντρο με φύλλα έχει ύψος . Άρα η mergesort, που δίνει άνω φράγμα, ακουμπάει το κάτω φράγμα — είναι ασυμπτωτικά βέλτιστη.

Κάρτα μνήμηςMaster Theorem
Λέξεις-κλειδιά
T(n) = a·T(n/b) + O(nᵈ)σύγκρινε d με logᵦar = a/bᵈτρεις περιπτώσεις
Τα βήματα στο μυαλό σου
1Γράψε την αναδρομή στη μορφή a·T(n/b) + O(nᵈ).
2Υπολόγισε το logᵦa.
3Σύγκρινέ το με το d.
4d > logᵦa → O(nᵈ) · d = logᵦa → O(nᵈ log n) · d < logᵦa → O(n^logᵦa).
Πολυπλοκότητα
3 περιπτώσεις
Κλασική παγίδα
Δεν εφαρμόζεται σε άνισο διαχωρισμό (π.χ. T(n/3)+T(2n/3)) ούτε όταν το f(n) δεν είναι πολυωνυμικό (π.χ. n log n). Εκεί γύρνα σε δέντρο αναδρομής ή τηλεσκόπιο.

Κλείδωσε τη γνώση

Πρώτα η σκελετική δομή της mergesort — βάλε τα βήματα στη σωστή σειρά:

Βάλε τα βήματα στη σειρά
Τα βήματα της mergesort, από την πρώτη ενέργεια στην τελευταία.
Σύρε τις γραμμές για αναδιάταξη — ή χρησιμοποίησε τα βελάκια.
1.Βάση: αν το τμήμα έχει ≤ 1 στοιχείο, επίστρεψέ το ως έχει — είναι ήδη ταξινομημένο.
2.Συγχώνευσε τα δύο ταξινομημένα μισά σε έναν ταξινομημένο πίνακα.
3.Διαίρεσε τον πίνακα σε δύο μισά, σπάζοντάς τον στη μέση.
4.Κάλεσε αναδρομικά τη mergesort σε καθένα από τα δύο μισά.

Τώρα το Master Theorem — συμπλήρωσε τα κενά χωρίς να κοιτάς πίσω:

Συμπλήρωσε τα κενά
Πώς δουλεύει το Master Theorem, σε λέξεις.
Το Master Theorem λύνει αναδρομές της μορφής T(n) = a·T(n/b) + O(nᵈ). Συγκρίνουμε τον εκθέτη με το logᵦa. Αν το d είναι μεγαλύτερο, κυριαρχεί η του δέντρου αναδρομής. Αν είναι ίσα, κάθε επίπεδο κοστίζει το ίδιο κι εμφανίζεται ένας παράγοντας n. Αν το d είναι μικρότερο, κυριαρχούν τα και η απάντηση γίνεται O(n^logᵦa).

Τι μάθαμε

Τι κρατάμε από αυτή τη διάλεξη

  1. D&C ως σχήμα: διαίρεσε σε ξένα υποπροβλήματα → κυρίευσε αναδρομικά → συνδύασε. Είναι επαγωγή μεταμφιεσμένη, και η ορθότητα αποδεικνύεται με επαγωγή.
  2. Mergesort: σπάσε στη μέση, ταξινόμησε αναδρομικά, συγχώνευσε με γραμμικό κόστος → . Κάθε επίπεδο του δέντρου κοστίζει , και τα επίπεδα είναι .
  3. Τέσσερις αποδείξεις του — μάθε τουλάχιστον δύο. Το τηλεσκόπιο (#1, #3) είναι το πιο ευέλικτο.
  4. Γιατί «στη μέση»: μόνο ο αναλογικός διαχωρισμός δίνει βάθος . Το « και » εκφυλίζει τον αλγόριθμο σε .
  5. Πύργος Hanoi: D&C με εκθετικό κόστος (). Το σχήμα από μόνο του δεν εγγυάται γρήγορο αλγόριθμο — μετράει το κόστος του συνδυασμού.
  6. Master Theorem: για , σύγκρινε με → τρεις περιπτώσεις. Γρήγορο, όταν εφαρμόζεται.
  7. Η mergesort είναι ασυμπτωτικά βέλτιστη για ταξινόμηση με συγκρίσεις — το κάτω φράγμα ακουμπάει το άνω φράγμα της.
Επόμενο
L04 · D&C II — Inversions, dominant colour, multiplication

Ασκήσεις από εξετάσεις

Από τη θεωρία στην εξεταστική

22 άσκησεις που χρησιμοποιούν ως τελευταίο εργαλείο αυτή τη διάλεξη. Οι πρόσφατες εξεταστικές (2024/2025) φέρουν badge προτεραιότητας.

Παλαιό θέμαΙούνιος 2025Θέμα Εξετάσεων 2025Θέμα 1.43%Διαίρει & κυρίευεΔύσκολο

Ιούνιος 2025 · Θέμα 1.4 — Αναδρομή T(n) = T(√n) + 1

Αν , κύκλωσε ποια ισχύουν:

  • (i)
  • (ii)
  • (iii)
  • (iv)
Παλαιό θέμαΙούνιος 2025Θέμα Εξετάσεων 2025Θέμα 1.53%Διαίρει & κυρίευεΕύκολο

Ιούνιος 2025 · Θέμα 1.5 — Master Theorem

Αν , κύκλωσε ποια ισχύουν:

  • (i)
  • (ii)
  • (iii)
  • (iv)
Παλαιό θέμαΙούνιος 2025Θέμα Εξετάσεων 2025Θέμα 425%Διαίρει & κυρίευεΜέτριο

Ιούνιος 2025 · Θέμα 4 — Γρήγορη ύψωση σε δύναμη

Σχεδίασε έναν αποδοτικό αλγόριθμο που, δοσμένων δύο θετικών ακεραίων και , υπολογίζει την τιμή , και αιτιολόγησε την ορθότητα και την πολυπλοκότητά του. Για ευκολία θεώρησε ότι και ότι το γινόμενο δύο ακεραίων γίνεται σε σταθερό χρόνο.

Παλαιό θέμαΣεπτέμβριος 2025Θέμα Εξετάσεων 2025Θέμα 1.33%Διαίρει & κυρίευεΕύκολο

Σεπτέμβριος 2025 · Θέμα 1.3 — Master Theorem (περίπτωση 3)

Αν , κύκλωσε ποια ισχύουν: (i) · (ii) · (iii) · (iv) .

Παλαιό θέμαΣεπτέμβριος 2025Θέμα Εξετάσεων 2025Θέμα 1.43%Διαίρει & κυρίευεΔύσκολο

Σεπτέμβριος 2025 · Θέμα 1.4 — Αναδρομή T(n) = 2T(√n) + 1

Αν , κύκλωσε ποια ισχύουν:

  • (i)
  • (ii)
  • (iii)
  • (iv)
Παλαιό θέμαΣεπτέμβριος 2024Θέμα Εξετάσεων 2024Θέμα 1 — Πρόταση 44%Διαίρει & κυρίευεΜέτριο

Σεπτέμβριος 2024 · Θέμα 1.4 — Σ/Λ: T(n) = 2T(n−1) + Θ(n)

Χαρακτήρισε (Σ)ωστό ή (Λ)άθος: «Αν , τότε

Παλαιό θέμαΣεπτέμβριος 2024Θέμα Εξετάσεων 2024Θέμα 330%Διαίρει & κυρίευεΜέτριο

Σεπτέμβριος 2024 · Θέμα 3 — Πλήθος μηδενικών σε 1ᵐ0ⁿ με δυαδική αναζήτηση

Δοσμένης μιας δυαδικής συμβολοσειράς της μορφής (όπου τα και είναι άγνωστα, αλλά το γνωστό), περίγραψε σε φυσική γλώσσα έναν αλγόριθμο που βρίσκει το — το πλήθος των εμφανίσεων του — σε χρόνο, και δικαιολόγησε την ορθότητα και την πολυπλοκότητά του.

Υπόδειξη: ποια αναδρομική σχέση πρέπει να διέπει την ώστε να ισχύει ;

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 1Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #3 · Άσκηση 1 — Κλειστός τύπος των αριθμών Fibonacci

Δίνεται η ακολουθία των αριθμών Fibonacci:

Λύσε την αναδρομική σχέση (βρες κλειστό τύπο για το ) και προσδιόρισε την ασυμπτωτική της τάξη.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 10Διαίρει & κυρίευεΔύσκολο

Φροντιστηριακό Σετ #3 · Άσκηση 10 — Αναδρομή T(n) = T(√n) + 1

Λύσε την αναδρομική εξίσωση με αρχική συνθήκη , και δώσε την ασυμπτωτική τάξη της .

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 2Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #3 · Άσκηση 2 — Αναδρομή με διπλή ρίζα

Λύσε την αναδρομική σχέση:

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 4Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #3 · Άσκηση 4 — Αναδρομή T(n) = T(n−1) + 2ⁿ

Λύσε την αναδρομική σχέση με αρχική συνθήκη , και δώσε την ασυμπτωτική της τάξη.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 7Διαίρει & κυρίευεΔύσκολο

Φροντιστηριακό Σετ #3 · Άσκηση 7 — Σύγκριση τριών αλγορίθμων D&C

Μια ομάδα προγραμματιστών εργάζεται για την επίλυση ενός υπολογιστικού προβλήματος και έχει δημιουργήσει 3 διαφορετικούς αλγορίθμους «διαίρει και βασίλευε»:

  • Τον αλγόριθμο που διασπά το αρχικό πρόβλημα μεγέθους σε 4 υποπροβλήματα μεγέθους , τα επιλύει και στη συνέχεια συνθέτει τις λύσεις τους σε χρόνο .
  • Τον αλγόριθμο που διασπά το αρχικό πρόβλημα μεγέθους σε 3 υποπροβλήματα μεγέθους , τα επιλύει και στη συνέχεια συνθέτει τις λύσεις τους σε χρόνο .
  • Τον αλγόριθμο που διασπά το αρχικό πρόβλημα μεγέθους σε 27 υποπροβλήματα μεγέθους , τα επιλύει και στη συνέχεια συνθέτει τις λύσεις τους σε χρόνο .

(Α) Γράψε τις αναδρομικές εξισώσεις που δίνουν τον χρόνο εκτέλεσης των και λύσε τες με το Θεώρημα της Κυριαρχίας (Master Theorem).

(Β) Ποιος είναι ο ασυμπτωτικά αποδοτικότερος αλγόριθμος για το πρόβλημα ; Δικαιολόγησε την απάντηση.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 8Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #3 · Άσκηση 8 — Απόδειξη T(n) = n log n με επαγωγή

Δείξε με τη βοήθεια της μαθηματικής επαγωγής ότι, όταν το είναι ακριβής δύναμη του , η λύση της αναδρομής

είναι .

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 9Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #3 · Άσκηση 9 — Master Theorem με λογαριθμικό όρο

Λύσε την αναδρομική εξίσωση με το Θεώρημα της Κυριαρχίας (Master Theorem).

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 1Διαίρει & κυρίευεΔύσκολο

Φροντιστηριακό Σετ #4 · Άσκηση 1 — Αναδρομή T(n) = √n·T(√n) + n

Βρες την ασυμπτωτική τάξη της όταν .

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 10Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #4 · Άσκηση 10 — Master Theorem με λογαριθμικό όρο

Λύσε την αναδρομική εξίσωση, προσδιορίζοντας την τάξη της (), με : .

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 2Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #4 · Άσκηση 2 — Ακριβής λύση με τη μέθοδο αντικατάστασης

Βρες την ακριβή λύση της αναδρομής με τη μέθοδο της αντικατάστασης:

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 3Διαίρει & κυρίευεΔύσκολο

Φροντιστηριακό Σετ #4 · Άσκηση 3 — Άνω φράγμα και το «κόλπο» της ενίσχυσης

Βρες ένα άνω φράγμα () για την αναδρομή με τη μέθοδο της αντικατάστασης.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 4Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #4 · Άσκηση 4 — Άνω φράγμα για άνιση αναδρομή

Βρες ένα άνω φράγμα για την αναδρομή .

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 7Διαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #4 · Άσκηση 7 — Ο χαμένος όρος αριθμητικής προόδου

Δίνεται πίνακας . Τα στοιχεία του αντιστοιχούν σε όρους αριθμητικής προόδου, διατεταγμένα κατά αύξουσα σειρά. Ένας όρος απουσιάζει. Δώσε έναν αποδοτικό αλγόριθμο για την εύρεση του «χαμένου» όρου.

Από φροντιστήριοΦροντιστήριο 2023–24Άσκηση 1Διαίρει & κυρίευεΔύσκολο

Φροντιστηριακό Σετ #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Β10%Διαίρει & κυρίευεΜέτριο

Ιούνιος 2023 · Θέμα 2Β — Δύο αλγόριθμοι D&C με Master Theorem

Ένα πρόβλημα επιλύεται με τους παρακάτω δύο αναδρομικούς αλγορίθμους για στιγμιότυπα μεγέθους :

  • Ο διασπά το πρόβλημα σε 9 υποπροβλήματα μεγέθους και συνθέτει τις λύσεις σε χρόνο .
  • Ο διασπά το πρόβλημα σε 2 υποπροβλήματα μεγέθους και συνθέτει τις λύσεις σε χρόνο για κάποια σταθερά .

Γράψε τις αναδρομικές εξισώσεις χρόνου εκτέλεσης των και λύσε τες με το Θεώρημα Κυριαρχίας.

Φόρτωση σχολίων…
L03 · D&C I — Mergesort & Master Theorem · Algorithms Class Hub