L04 · D&C II — Inversions, Dominant Colour & Karatsuba
Τι θα δούμε
Στο L03 γνωρίσαμε το σχήμα «διαίρει και κυρίευε»: σπάσε το πρόβλημα σε μικρότερα ίδια κομμάτια, λύσε τα αναδρομικά, ένωσε τις λύσεις. Το εφαρμόσαμε σε ένα πρόβλημα — την ταξινόμηση.
Εδώ θα κάνουμε κάτι πιο διδακτικό: θα πάρουμε το ίδιο ακριβώς σχήμα και θα δούμε ότι λύνει τρία προβλήματα που, με την πρώτη ματιά, δεν έχουν καμία σχέση μεταξύ τους.
- Μέτρηση αντιστροφών σε έναν πίνακα — από πέφτουμε σε .
- Κυρίαρχο χρώμα σε μια σκακιέρα — από πέφτουμε σε .
- Πολλαπλασιασμός τεράστιων αριθμών — από πέφτουμε σε , με τον αλγόριθμο Karatsuba.
Και στις τρεις περιπτώσεις η δύσκολη δουλειά δεν είναι το σπάσιμο και δεν είναι η αναδρομή — αυτά είναι μηχανικά. Η δύσκολη δουλειά είναι το βήμα συνδυασμού: πώς ενώνω τις λύσεις των κομματιών γρήγορα. Σε κάθε πρόβλημα θα ψάξουμε ένα έξυπνο, φθηνό combine — κι αυτό είναι όλο το παιχνίδι.
Το εργαλείο: Master Theorem σε μία ματιά
Επειδή θα το χρησιμοποιήσουμε τρεις φορές σήμερα, ας το ξαναστήσουμε γρήγορα. Από το L03: αν ένας αναδρομικός αλγόριθμος έχει χρόνο
τότε η λύση δίνεται από μία απλή σύγκριση:
Δες ξανά τη μηχανική με τα χέρια σου — άλλαξε ή πάτησε ένα έτοιμο παράδειγμα, και πρόσεξε ποια περίπτωση προκύπτει και γιατί:
Κάθε επίπεδο του δέντρου αναδρομής κοστίζει το ίδιο, και υπάρχουν περίπου logᵦn επίπεδα — γι’ αυτό εμφανίζεται ο παράγοντας log n.
Ζέσταμα: πέντε αναδρομές
Πριν προχωρήσουμε, λύσε νοερά τις παρακάτω — είναι το είδος της «προθέρμανσης» που εμφανίζεται και στην εξέταση:
- — όχι Master Theorem (το πρόβλημα μικραίνει κατά σταθερά, όχι σε λόγο ). Τηλεσκόπιο → .
- — όχι Master Theorem. Ξεδιπλώνεται σε — όπως ο πύργος του Hanoi.
- — εδώ ναι: . Αφού , περίπτωση 1 → .
- — όχι Master Theorem (άνισος διαχωρισμός — δεν υπάρχει κοινό ). Με δέντρο αναδρομής → .
- — όχι Master Theorem. Με αλλαγή μεταβλητής → .
Πρόβλημα 1 · Μέτρηση Αντιστροφών
Νιώσε: τι μετράμε, στ' αλήθεια
Φαντάσου ότι εσύ κι ένας φίλος ακούσατε τα ίδια πέντε τραγούδια και το καθένα το βαθμολογήσατε. Εσύ τα κατατάσσεις 1ο, 2ο, 3ο, 4ο, 5ο. Ο φίλος σου τα βάζει σε άλλη σειρά. Πόσο μοιάζουν τα γούστα σας;
Ένας πολύ φυσικός τρόπος να το μετρήσεις: κοίτα κάθε ζευγάρι τραγουδιών και ρώτα «το βάλαμε στην ίδια σχετική σειρά ή ανάποδα;». Κάθε ζευγάρι που το βάλατε ανάποδα είναι μία διαφωνία. Μηδέν διαφωνίες σημαίνει πανομοιότυπο γούστο· πολλές διαφωνίες σημαίνει εντελώς αντίθετο.
Αν αριθμήσουμε τα τραγούδια με τη δική σου σειρά ως , τότε η κατάταξη του φίλου σου γίνεται μια μετάθεση αυτών των αριθμών — και κάθε «διαφωνία» γίνεται ακριβώς ένα ζευγάρι αριθμών που εμφανίζονται ανάποδα μέσα στον πίνακα. Αυτό το ζευγάρι έχει ένα όνομα: αντιστροφή.
Παράδειγμα. Στον πίνακα οι αντιστροφές είναι:
- — το βρίσκεται πριν από το , αλλά είναι μεγαλύτερο.
- — όμοια.
- — όμοια.
Σύνολο: 3 αντιστροφές.
Γιατί μας νοιάζει στην πράξη
Η μέτρηση αντιστροφών είναι το πρότυπο μέτρο ομοιότητας δύο κατατάξεων:
| Τραγούδι Α | Β | Γ | Δ | Ε | |
|---|---|---|---|---|---|
| Η δική σου σειρά | 1 | 2 | 3 | 4 | 5 |
| Η σειρά του φίλου | 1 | 3 | 5 | 2 | 4 |
- Συστήματα συστάσεων (Netflix, Spotify): «βρες χρήστες με γούστο σαν το δικό σου» σημαίνει «βρες κατατάξεις με λίγες αντιστροφές ως προς τη δική σου».
- Θεωρία ψηφοφορίας — η απόσταση Kendall tau ανάμεσα σε δύο προτιμήσεις είναι ακριβώς ο αριθμός αντιστροφών.
- Μηχανές αναζήτησης — πόσο άλλαξε η σειρά των αποτελεσμάτων μετά από μια αλλαγή στον αλγόριθμο κατάταξης.
Η αφελής λύση:
Ο ορισμός σχεδόν γράφει μόνος του τον πρώτο αλγόριθμο — εξέτασε κάθε δυνατό ζευγάρι.
- Είσοδος:
- πίνακας A με n αριθμούς
- Έξοδος:
- το πλήθος των αντιστροφών
Με λόγια. Δύο φωλιασμένοι βρόχοι. Ο εξωτερικός διαλέγει την πρώτη θέση · ο εσωτερικός διατρέχει όλες τις θέσεις δεξιά της. Για κάθε ζευγάρι ελέγχουμε αν είναι ανάποδα, κι αν ναι αυξάνουμε έναν μετρητή.
Πολυπλοκότητα. Ο διπλός βρόχος εξετάζει ζευγάρια → .
Σωστό, αλλά αργό. Για στοιχεία μιλάμε για ελέγχους — πρακτικά αδύνατο. Χρειαζόμαστε κάτι ουσιαστικά γρηγορότερο.
Η ιδέα D&C: τρία είδη αντιστροφών
Εφαρμόζουμε το σχήμα του L03. Σπάμε τον πίνακα στη μέση, σε ένα αριστερό μισό κι ένα δεξί . Τώρα κάθε αντιστροφή — κάθε ζευγάρι θέσεων — ανήκει υποχρεωτικά σε ένα ακριβώς από τρία είδη, ανάλογα με το πού πέφτουν οι δύο θέσεις:
- ① μέσα στο : και οι δύο θέσεις στο αριστερό μισό.
- ② μέσα στο : και οι δύο θέσεις στο δεξί μισό.
- ③ μικτές: μία θέση στο , μία στο .
Δες το να συμβαίνει σε έναν πραγματικό πίνακα. Πάτα Επόμενο και θα διατρέξεις και τα 28 δυνατά ζευγάρια — κάθε ένα θα προσγειωθεί σε ακριβώς ένα από τα τρία είδη, και οι τρεις μετρητές θα κρατούν παράλληλα τα δικά τους ποσά:
Η διάσπαση είναι ακριβής: κάθε ζευγάρι έπεσε σε ένα και μόνο ένα κουτί, και τα τρία κουτιά αθροισμένα δίνουν ΟΛΕΣ τις αντιστροφές. Άρα:
Τα δύο πρώτα είδη είναι δωρεάν: είναι ακριβώς το ίδιο πρόβλημα σε μικρότερη είσοδο, οπότε τα αναλαμβάνει η αναδρομή. Όλο το βάρος πέφτει στο τρίτο: πώς μετράμε τις μικτές αντιστροφές γρήγορα;
Το κλειδί: μικτές αντιστροφές σε γραμμικό χρόνο
Αν μετρούσαμε τις μικτές μία-μία, θα ξαναπέφταμε στο — δεν θα κερδίζαμε τίποτα. Χρειαζόμαστε ένα κόλπο. Και το κόλπο κρύβεται σε μία απαίτηση:
Γιατί δουλεύει αυτό; Σάρωσε τα δύο ταξινομημένα μισά με δύο δείκτες, πάνω από το αριστερό και πάνω από το δεξί, και κάθε φορά κατέβαζε στο αποτέλεσμα το μικρότερο από τα δύο μπροστινά στοιχεία. Παρατήρησε τι σημαίνει το να «κερδίσει» το δεξί:
Αν το μπροστινό στοιχείο του δεξιού μισού είναι μικρότερο από το μπροστινό του αριστερού, τότε — επειδή το αριστερό μισό είναι ταξινομημένο — είναι μικρότερο και από όλα τα υπόλοιπα στοιχεία του αριστερού. Καθένα τους είναι μεγαλύτερο και βρίσκεται σε προγενέστερη θέση: καθένα τους σχηματίζει μία μικτή αντιστροφή με αυτό το δεξί στοιχείο.
Αν στο αριστερό μισό μένουν στοιχεία, αυτό το ένα δεξί στοιχείο προσθέτει αντιστροφές με μία πράξη — όχι με ελέγχους. Εκεί ακριβώς εξαφανίζεται ο τετραγωνικός χρόνος.
Πάτα Επόμενο και δες το να συμβαίνει. Πρόσεξε ειδικά τις στιγμές που ανάβουν κόκκινα στοιχεία στο αριστερό μισό — εκεί μετριέται μια ολόκληρη παρτίδα αντιστροφών μονομιάς:
Τα δύο μισά φτάνουν εδώ ήδη ταξινομημένα από την αναδρομή.
Ο αλγόριθμος
Πρώτα το βήμα συνδυασμού — η merge-and-count. Είναι η merge της mergesort με μία μόνο επιπλέον γραμμή.
- Είσοδος:
- δύο ταξινομημένοι πίνακες a (m στοιχεία) και b (n στοιχεία)
- Έξοδος:
- ο ταξινομημένος συνδυασμός c, και το πλήθος r των μικτών αντιστροφών
Με λόγια. Δύο δείκτες, στο και στο , ξεκινούν από την αρχή. Σε κάθε βήμα συγκρίνουμε τα μπροστινά στοιχεία και κατεβάζουμε το μικρότερο στο αποτέλεσμα . Αν κατεβάσουμε στοιχείο του — καμία αντιστροφή. Αν κατεβάσουμε στοιχείο του , τότε όλα τα στοιχεία του που δεν έχουμε χρησιμοποιήσει ακόμα (αυτά είναι το πλήθος) είναι μεγαλύτερά του και προηγούνται — προσθέτουμε ακριβώς στον μετρητή.
Πολυπλοκότητα. Μία γραμμική σάρωση: ο βρόχος τρέχει φορές με σταθερή δουλειά ανά βήμα → .
Με τη merge-and-count έτοιμη, ο πλήρης αλγόριθμος είναι σχεδόν τετριμμένος — ακριβώς η mergesort, που τυχαίνει να μετράει και αντιστροφές στην πορεία.
- Είσοδος:
- πίνακας A
- Έξοδος:
- ζεύγος (πλήθος αντιστροφών του A, ο A ταξινομημένος)
Με λόγια. Βάση: ένας πίνακας με ένα στοιχείο έχει αντιστροφές και είναι ήδη ταξινομημένος. Αλλιώς: σπάσε στη μέση· κάλεσε αναδρομικά τον εαυτό σου στα δύο μισά — κάθε κλήση γυρίζει πίσω τον αριθμό αντιστροφών και το μισό ταξινομημένο· συγχώνευσε τα δύο ταξινομημένα μισά με merge-and-count, που δίνει τις μικτές. Το σύνολο είναι το άθροισμα των τριών.
Πολυπλοκότητα
Δύο αναδρομικές κλήσεις σε μισό μέγεθος, συν μια γραμμική συγχώνευση:
Αυτή είναι η ίδια ακριβώς αναδρομή με τη mergesort. Master Theorem με : αφού , είμαστε στην περίπτωση 2:
Από σε — και ουσιαστικά δωρεάν, αφού ο αλγόριθμος δεν είναι παρά η mergesort με μία γραμμή παραπάνω.
Πρόβλημα 2 · Κυρίαρχο Χρώμα
Νιώσε: ποιος έχει την απόλυτη πλειοψηφία
Σκέψου μια εκλογή. Δεν ρωτάμε «ποιος βγήκε πρώτος» — ρωτάμε κάτι αυστηρότερο: πήρε κάποιος απόλυτη πλειοψηφία, δηλαδή πάνω από τους μισούς ψήφους; Μπορεί ναι, μπορεί και κανείς.
Το ίδιο πρόβλημα, ντυμένο σαν σκακιέρα:
Παραδείγματα. Σε σκακιέρα (16 πλακίδια): 9 κόκκινα → το κόκκινο είναι κυρίαρχο, αφού . Αλλά 8 κόκκινα → όχι κυρίαρχο, γιατί — η ανισότητα είναι αυστηρή.
Η αφελής λύση:
Αφού δεν ξέρουμε ποια χρώματα να ψάξουμε, ας τα δοκιμάσουμε όλα. Για κάθε ένα από τα πλακίδια, πάρε το χρώμα του ως υποψήφιο και μέτρησε σε ολόκληρη τη σκακιέρα πόσες φορές εμφανίζεται — αυτό είναι ένα πέρασμα . Αν κάποιο ξεπεράσει το , το βρήκαμε.
Σωστό, αλλά πολύ αργό. Για μια σκακιέρα μιλάμε για πράξεις.
Η λύση D&C:
Διαίρει. Σπάσε τη σκακιέρα σε 4 υποσκακιέρες — τα τέσσερα τεταρτημόρια.
Κυρίευσε. Κάλεσε αναδρομικά τον εαυτό σου σε καθεμία. Κάθε υποσκακιέρα γυρίζει πίσω έναν υποψήφιο: το δικό της κυρίαρχο χρώμα (ή «κανένα»).
Συνδύασε. Εδώ είναι όλη η ουσία — και στηρίζεται σε μία παρατήρηση:
Η παρατήρηση ακούγεται «προφανής» — δεν είναι. Λέει κάτι πολύ συγκεκριμένο: ένα χρώμα δεν μπορεί να έχει διάσπαρτη πλειοψηφία σε όλη τη σκακιέρα χωρίς να συγκεντρώνεται κάπου. Πριν την αποδείξουμε με μολύβι, παίξε με τους τέσσερις slider — καθένας ανεβάζει πόσες φορές εμφανίζεται το κόκκινο σε ένα τεταρτημόριο, κλειδωμένο στο «όχι κυρίαρχο εδώ» (δηλαδή το πολύ ). Σπρώξε τους όλους στο μέγιστο και κοίτα το συνολικό μετρητή:
Υπόθεσε ότι το κόκκινο κυριαρχεί στη μεγάλη σκακιέρα. Αν δεν κυριαρχεί σε κανένα τεταρτημόριο, τότε σε καθένα εμφανίζεται το πολύ 2 φορές (= ½ · (n/2)²). Σπρώξε τους τέσσερις slider στο μέγιστο και κοίτα τι κάνει το σύνολο.
Τι μόλις είδες: όσο και να σπρώξεις τους τέσσερις slider, το σύνολο δεν φτάνει ποτέ το . Επομένως αν το ήταν κυρίαρχο στη μεγάλη σκακιέρα (δηλαδή εμφανίσεις), τότε δεν γίνεται να μην κυριαρχεί σε τουλάχιστον ένα τεταρτημόριο. Σε μαθηματικά:
— το αριστερό μέρος είναι το «πάνω όριο αν δεν κυριαρχεί πουθενά», το δεξί είναι το «κατώφλι κυριαρχίας»: ίσα. Άρα αν θέλεις αυστηρά , τουλάχιστον ένας slider πρέπει να σπάσει το όριο — δηλαδή να κυριαρχήσει σε κάποιο τεταρτημόριο.
Η συνέπεια είναι καθοριστική: οι μόνοι πιθανοί υποψήφιοι για κυρίαρχο της μεγάλης σκακιέρας είναι τα (το πολύ) 4 χρώματα που γυρίζουν οι 4 αναδρομικές κλήσεις. Δεν χρειάζεται να σκεφτούμε κανένα άλλο.
Δες τον αλγόριθμο να τρέχει
Στη σκακιέρα παρακάτω, διάλεξε ένα από τα τρία σενάρια (ή πάτα «Ζωγράφισε» και φτιάξε δικό σου χρωματισμό), και πάτα Επόμενο για να σπάσει σε 4 τεταρτημόρια, να βγάλει αναδρομικά τους ≤ 4 υποψήφιους, να μετρήσει το καθένα σε ολόκληρη τη σκακιέρα, και να εκδώσει ετυμηγορία. Πρόσεξε ότι στο σενάριο «Σφιχτό 8 vs 8», 8 κόκκινα δεν είναι κυρίαρχα — η ανισότητα είναι αυστηρά μεγαλύτερο, όχι μεγαλύτερο-ή-ίσο:
Για κάθε ένα από αυτά τα (το πολύ) 4 χρώματα, μετράμε σε ολόκληρη τη σκακιέρα πόσες φορές εμφανίζεται — ένα πέρασμα το καθένα. Τέσσερα περάσματα → συνολικός χρόνος συνδυασμού.
- Είσοδος:
- σκακιέρα B μεγέθους n × n, n = 2^k
- Έξοδος:
- το κυρίαρχο χρώμα, ή «κανένα»
Με λόγια. Βάση: μια σκακιέρα έχει προφανώς ως κυρίαρχο το χρώμα του μοναδικού της πλακιδίου. Αλλιώς, σπάσε στα 4 τεταρτημόρια και πάρε αναδρομικά τον υποψήφιο καθενός. Μετά, για κάθε διαφορετικό χρώμα ανάμεσα σε αυτούς τους ≤ 4 υποψήφιους, μέτρησέ το σε όλη τη σκακιέρα· αν κάποιο ξεπερνά το , αυτό είναι το κυρίαρχο. Αν κανένα δεν το ξεπερνά, δεν υπάρχει κυρίαρχο χρώμα.
Πολυπλοκότητα
Τέσσερις αναδρομικές κλήσεις σε σκακιέρες μισής πλευράς, συν ένα combine :
Master Theorem με : αφού , περίπτωση 2:
Από σε — δύο ολόκληρες τάξεις μεγέθους κέρδος.
Πρόβλημα 3 · Πολλαπλασιασμός Ακεραίων — Karatsuba
Νιώσε: πόσο κοστίζει ο πολλαπλασιασμός
Στο δημοτικό μάθαμε να πολλαπλασιάζουμε «με τη σειρά»: γράφεις τους δύο αριθμούς, πολλαπλασιάζεις ψηφίο με ψηφίο, προσθέτεις. Για μικρούς αριθμούς δεν μας απασχολεί το κόστος. Αλλά η κρυπτογραφία (π.χ. RSA) πολλαπλασιάζει αριθμούς με χιλιάδες ψηφία — αριθμούς που δεν χωράνε σε καμία int64 και αναπαρίστανται ως πίνακες ψηφίων. Εκεί το κόστος μετράει.
Ας μετρήσουμε. Με τον σχολικό τρόπο:
| Πράξη | Κόστος |
|---|---|
| Πρόσθεση/πολλαπλασιασμός μονοψήφιων | |
| Πρόσθεση δύο -ψήφιων αριθμών | |
| Πολλαπλασιασμός δύο -ψήφιων αριθμών |
Το του πολλαπλασιασμού είναι ο εχθρός μας: κάθε ψηφίο του ενός αριθμού πολλαπλασιάζεται με κάθε ψηφίο του άλλου — μονοψήφιοι πολλαπλασιασμοί. Δες το στο :
Η ερώτηση: μπορούμε να πολλαπλασιάσουμε πιο γρήγορα από ;
Πρώτη προσπάθεια D&C — και γιατί αποτυγχάνει
Δοκιμάζουμε το σχήμα του L03. Σπάμε κάθε αριθμό στα μισά του ψηφία:
Γενικά, για -ψήφιους και :
όπου έχουν ψηφία το καθένα. Κάνοντας την πράξη:
Για να υπολογίσω το χρειάζομαι τέσσερις πολλαπλασιασμούς μικρότερων αριθμών: , , , — και μετά μερικές προσθέσεις και μετατοπίσεις, που κοστίζουν . Άρα:
Master Theorem με : αφού , είμαστε στην περίπτωση 3:
«Πληθαίνει πολύ γρήγορα» δεν είναι σχήμα λόγου — είναι αυτό που βλέπεις παρακάτω. Στα αριστερά, το δέντρο της αφελούς διάσπασης (): κάθε κόμβος γεννά 4 παιδιά, οπότε σε κάθε επίπεδο τα υποπροβλήματα τετραπλασιάζονται. Στα δεξιά, το δέντρο που θα φτιάξουμε σε λίγο (). Πάτα Παίξε και άσε τα δύο επίπεδα να γεμίσουν παράλληλα — στο τελευταίο επίπεδο, μεταξύ των δύο δέντρων ανοίγει ένας πραγματικά τεράστιος λόγος:
Με μία μόνο λιγότερη αναδρομική κλήση ανά κόμβο (4 → 3), το πλήθος φύλλων πέφτει από σε — και τα φύλλα κυβερνούν τη συνολική δουλειά. Όλο το ζητούμενο, λοιπόν, είναι: πώς γίνεται 3 αντί για 4;
Το έξυπνο τρικ του Karatsuba (1962)
Κοίτα ξανά τι θέλουμε από τον τύπο: τρεις ποσότητες — το , το , και το μεσαίο . Αν καταφέρναμε να τις βρούμε με τρεις αντί για τέσσερις πολλαπλασιασμούς, η αναδρομή θα γινόταν — και, όπως θα δούμε, αυτό αλλάζει τα πάντα.
Το και το τα θέλουμε ούτως ή άλλως — αυτά είναι δύο από τους τρεις πολλαπλασιασμούς. Το πρόβλημα είναι το μεσαίο , που μοιάζει να απαιτεί δύο ακόμη πολλαπλασιασμούς ( και ξεχωριστά). Το κόλπο: ξεκίνα από το γινόμενο των αθροισμάτων και άσε την άλγεβρα να σου χαρίσει το μεσαίο.
Μέσα του κρύβεται ολόκληρο το μεσαίο μας. Αφαίρεσε τα δύο γινόμενα που ήδη έχουμε:
Άρα οι μόνοι τρεις πολλαπλασιασμοί που χρειαζόμαστε είναι:
και ο τελικός τύπος γίνεται:
Δες την ταυτότητα να γίνεται αριθμοί. Στο πάνω επίπεδο της αναδρομής για , ο Karatsuba σπάει σε , κάνει 3 πολλαπλασιασμούς (), και τραβάει το μεσαίο ως απλή αφαίρεση. Πάτα Επόμενο και πρόσεξε τη στιγμή του ελέγχου ταυτότητας — όπου ο τύπος (αφελής, με 2 πολλαπλασιασμούς) γίνεται (μία αφαίρεση) και τα δύο νούμερα ταιριάζουν:
Ο αλγόριθμος Karatsuba
- Είσοδος:
- δύο ακέραιοι x, y με n ψηφία
- Έξοδος:
- το γινόμενο x · y
Με λόγια. Βάση: μονοψήφιοι αριθμοί πολλαπλασιάζονται απευθείας. Αλλιώς, σπάσε και στα μισά τους ψηφία ώστε και . Κάνε τρεις αναδρομικούς πολλαπλασιασμούς — , , και . Το μεσαίο γινόμενο προκύπτει ως . Συνάρμοσε το αποτέλεσμα με μετατοπίσεις κατά και .
Πολυπλοκότητα
Τρεις αναδρομικές κλήσεις σε μισό μέγεθος, συν combine :
Master Theorem με : είναι , άρα περίπτωση 3:
Το ότι μειώσαμε τις αναδρομικές κλήσεις από 4 σε 3 δεν είναι μικρό «κούρεμα» — αλλάζει τον εκθέτη: από σε . Για ψηφία, αυτό είναι περίπου λιγότερη δουλειά.
Τι ακολούθησε τον Karatsuba
Ο Karatsuba ήταν η πρώτη βελτίωση στο σχολικό μετά από αιώνες — και άνοιξε ολόκληρο ερευνητικό πεδίο. Η αναζήτηση του γρηγορότερου πολλαπλασιασμού κράτησε δεκαετίες:
| Έτος | Αλγόριθμος | Πολυπλοκότητα |
|---|---|---|
| ~αρχαιότητα | Σχολικός | |
| 1962 | Karatsuba–Ofman | |
| 1963 | Toom–Cook (-way) | |
| 1971 | Schönhage–Strassen (FFT) | |
| 2007 | Fürer | |
| 2019 | Harvey–van der Hoeven |
Το πρόβλημα έκλεισε το 2019: αποδείχθηκε ότι ο πολλαπλασιασμός γίνεται σε — που πιάνει το θεωρητικό κάτω φράγμα. Στην πράξη όμως, για ρεαλιστικά μεγέθη, ο Karatsuba παραμένει από τους πιο αποδοτικούς λόγω των χαμηλών σταθερών του — γι' αυτό χρησιμοποιείται σε βιβλιοθήκες όπως η GMP.
Κλείδωσε τη γνώση
Πρώτα η σκελετική δομή του Karatsuba — βάλε τα βήματα στη σωστή σειρά:
Τώρα οι τρεις κεντρικές ιδέες της διάλεξης — συμπλήρωσε τα κενά χωρίς να κοιτάς πίσω:
Μοτίβο σκέψης
Τι μάθαμε
Τι κρατάμε από αυτή τη διάλεξη
- Ένα σχήμα, τρία προβλήματα. Το «διαίρει και κυρίευε» δεν είναι αλγόριθμος — είναι μέθοδος σχεδίασης. Το σπάσιμο και η αναδρομή είναι μηχανικά· η ουσία είναι πάντα το βήμα συνδυασμού.
- Μέτρηση αντιστροφών → . Τρία είδη αντιστροφών (A₁ / A₂ / μικτές). Απαίτησε ταξινομημένα μισά, και η
merge-and-countμετράει τις μικτές σε ένα γραμμικό πέρασμα — mergesort συν μία γραμμή. - Κυρίαρχο χρώμα → . Η παρατήρηση «κυρίαρχο στη μεγάλη ⇒ κυρίαρχο σε ≥ 1 υποσκακιέρα» περιορίζει τους υποψήφιους σε 4, κάνοντας το combine .
- Karatsuba → . Ο πρώτος αλγόριθμος που έσπασε το του πολλαπλασιασμού. 3 αντί για 4 αναδρομικές κλήσεις, χάρη στην ταυτότητα .
- Το Master Theorem κάνει την ανάλυση μηχανική. Βρες , σύγκρινε με , διάλεξε περίπτωση — και τις τρεις φορές σήμερα δούλεψε σε μία γραμμή.
Ασκήσεις από εξετάσεις
Από τη θεωρία στην εξεταστική
8 άσκησεις που χρησιμοποιούν ως τελευταίο εργαλείο αυτή τη διάλεξη. Οι πρόσφατες εξεταστικές (2024/2025) φέρουν badge προτεραιότητας.
Ιούνιος 2024 · Θέμα 2 — Πλειοψηφικό στοιχείο σε O(n log n)
Ένας πίνακας στοιχείων έχει ένα πλειοψηφικό στοιχείο αν γνήσια πάνω από τα μισά του στοιχεία είναι ίδια. Τα στοιχεία δεν είναι μεταξύ τους συγκρίσιμα (π.χ. ιερογλυφικά ή χρώματα), αλλά μπορούμε σε σταθερό χρόνο να αποφασίσουμε αν δύο στοιχεία είναι ίδια. Περίγραψε έναν αλγόριθμο που βρίσκει το πλειοψηφικό στοιχείο σε χρόνο και αιτιολόγησε την ορθότητά του.
Φροντιστηριακό Σετ #4 · Άσκηση 5 — Ύποπτη κάρτα (πλειοψηφικό στοιχείο) με D&C
Υποθέστε ότι είστε σύμβουλοι σε μία τράπεζα που την ενδιαφέρει ο εντοπισμός οικονομικών εγκλημάτων. Έχουν μία συλλογή από τραπεζικές κάρτες που έχουν κατάσχει, επειδή υποπτεύονται ότι χρησιμοποιούνται σε απάτες. Κάθε κάρτα αντιστοιχεί σε ένα μοναδικό τραπεζικό λογαριασμό, ένας λογαριασμός μπορεί να έχει πολλές κάρτες, και δύο κάρτες λέγονται ισοδύναμες αν αντιστοιχούν στον ίδιο λογαριασμό.
Ο λογαριασμός δεν διαβάζεται άμεσα από την κάρτα, όμως η τράπεζα διαθέτει μία «συσκευή ελέγχου ισοδυναμίας» που δέχεται δύο κάρτες και σε χρόνο επιστρέφει TRUE αν είναι ισοδύναμες, αλλιώς FALSE. Είναι η μόνη επιτρεπτή λειτουργία.
Ερώτημα: σε ένα σύνολο από κάρτες, υπάρχει ένα σύνολο με περισσότερες από κάρτες ισοδύναμες μεταξύ τους (άρα ύποπτες); Ο απλοϊκός αλγόριθμος που συγκρίνει κάθε κάρτα με όλες τις υπόλοιπες κοστίζει και δεν γίνεται δεκτός. Σχεδιάστε σε φυσική γλώσσα έναν πιο αποδοτικό αλγόριθμο «διαίρει και βασίλευε» που επιστρέφει μία ύποπτη κάρτα αν υπάρχει τέτοιο σύνολο, ή NIL αλλιώς.
Φροντιστηριακό Σετ #4 · Άσκηση 6 — Ταξινόμηση 3 χρωμάτων (σημαία της Ολλανδίας)
Δίνονται ένα ρομπότ και ένα καλάθι με χρωματιστές σφαίρες. Κάθε σφαίρα έχει ένα από τα χρώματα: κόκκινο , μπλε , πράσινο . Θέλουμε το ρομπότ να τις ταξινομήσει χρωματικά, βάζοντας πρώτα τις κόκκινες, μετά τις μπλε και τέλος τις πράσινες.
(α) Σχεδιάστε γραμμικό, επιτόπιο αλγόριθμο για το πρόβλημα. (β) Εξηγήστε πώς μια λύση αυτού του προβλήματος μπορεί να χρησιμοποιηθεί στον αλγόριθμο quicksort.
Φροντιστηριακό Σετ #4 · Άσκηση 8 — Διάμεσος δύο ταξινομημένων πινάκων
Έστω δύο πίνακες και , με καθέναν να έχει ταξινομημένους αριθμούς. Δώσε αλγόριθμο «διαίρει και βασίλευε» με χρόνο για την εύρεση της διάμεσης τιμής των δύο πινάκων μαζί.
Φροντιστηριακό Σετ #4 · Άσκηση 9 — Τομές ευθύγραμμων τμημάτων = αντιστροφές
Έχουμε 2 σύνολα σημείων: ένα σύνολο στη γραμμή και ένα άλλο στη γραμμή . Δημιουργούνται ευθύγραμμα τμήματα, καθένα ενώνοντας το με το .
Περίγραψε έναν αλγόριθμο «διαίρει και βασίλευε» που υπολογίζει πόσα ζεύγη τμημάτων τέμνονται, σε χρόνο . (Οι τιμές και είναι διακριτές.)
Φροντιστηριακό Σετ #5 · Άσκηση 2 — Ταίριασμα βιδών με παξιμάδια
Δίνονται βίδες και αντίστοιχα παξιμάδια, διαφορετικού διαμετρήματος. Μπορεί να ελεγχθεί αν ένα επιλεγμένο ζεύγος βίδας και παξιμαδιού ταιριάζει, με μία δοκιμή ταιριάσματος (που λέει «ταιριάζει» / «η βίδα είναι μικρότερη» / «μεγαλύτερη»). Δεν επιτρέπεται απευθείας σύγκριση δύο βιδών ή δύο παξιμαδιών.
Σχεδίασε αλγόριθμο που ταιριάζει όλες τις βίδες με τα παξιμάδια, με αποδοτικότητα μέσης περίπτωσης .
Φροντιστηριακό Σετ #5 · Άσκηση 3 — Προστασία της Quicksort από σαμποτάζ
Ένα σύστημα χρησιμοποιεί την Quicksort για να επεξεργαστεί δεδομένα που λαμβάνει από ένα δίκτυο. Θέλουμε να το προστατεύσουμε από «σαμποτάζ»: ένας κακόβουλος μπορεί να στείλει δεδομένα ειδικά διαμορφωμένα ώστε η Quicksort να εμφανίσει τη χειρότερη επίδοσή της.
1. Αν η Quicksort διαλέγει πάντα το πρώτο στοιχείο ως pivot, τι δεδομένα θα έστελνε ο κακόβουλος; 2. Πρότεινε μια απλή στρατηγική γραμμικού χρόνου που εγγυάται ανεξάρτητα από τα δεδομένα — χωρίς να αλλάξεις τον τρόπο επιλογής pivot.
Φροντιστηριακό Σετ #12 — υπό μεταγραφή
Εκφώνηση δεν έχει ακόμα μεταγραφεί.