Class Hub
Divide & Conquer·Διάλεξη 4·~52 min

L04 · D&C II — Inversions, Dominant Colour & Karatsuba

Τι θα δούμε

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

Εδώ θα κάνουμε κάτι πιο διδακτικό: θα πάρουμε το ίδιο ακριβώς σχήμα και θα δούμε ότι λύνει τρία προβλήματα που, με την πρώτη ματιά, δεν έχουν καμία σχέση μεταξύ τους.

  1. Μέτρηση αντιστροφών σε έναν πίνακα — από πέφτουμε σε .
  2. Κυρίαρχο χρώμα σε μια σκακιέρα — από πέφτουμε σε .
  3. Πολλαπλασιασμός τεράστιων αριθμών — από πέφτουμε σε , με τον αλγόριθμο Karatsuba.

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

Το εργαλείο: Master Theorem σε μία ματιά

Επειδή θα το χρησιμοποιήσουμε τρεις φορές σήμερα, ας το ξαναστήσουμε γρήγορα. Από το L03: αν ένας αναδρομικός αλγόριθμος έχει χρόνο

τότε η λύση δίνεται από μία απλή σύγκριση:

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

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 (το πρόβλημα μικραίνει κατά σταθερά, όχι σε λόγο ). Τηλεσκόπιο → .
  • όχι Master Theorem. Ξεδιπλώνεται σε — όπως ο πύργος του Hanoi.
  • — εδώ ναι: . Αφού , περίπτωση 1.
  • όχι Master Theorem (άνισος διαχωρισμός — δεν υπάρχει κοινό ). Με δέντρο αναδρομής → .
  • όχι Master Theorem. Με αλλαγή μεταβλητής .

Πρόβλημα 1 · Μέτρηση Αντιστροφών

Νιώσε: τι μετράμε, στ' αλήθεια

Φαντάσου ότι εσύ κι ένας φίλος ακούσατε τα ίδια πέντε τραγούδια και το καθένα το βαθμολογήσατε. Εσύ τα κατατάσσεις 1ο, 2ο, 3ο, 4ο, 5ο. Ο φίλος σου τα βάζει σε άλλη σειρά. Πόσο μοιάζουν τα γούστα σας;

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

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

Παράδειγμα. Στον πίνακα οι αντιστροφές είναι:

  • — το βρίσκεται πριν από το , αλλά είναι μεγαλύτερο.
  • — όμοια.
  • — όμοια.

Σύνολο: 3 αντιστροφές.

Γιατί μας νοιάζει στην πράξη

Η μέτρηση αντιστροφών είναι το πρότυπο μέτρο ομοιότητας δύο κατατάξεων:

Τραγούδι ΑΒΓΔΕ
Η δική σου σειρά12345
Η σειρά του φίλου13524
  • Συστήματα συστάσεων (Netflix, Spotify): «βρες χρήστες με γούστο σαν το δικό σου» σημαίνει «βρες κατατάξεις με λίγες αντιστροφές ως προς τη δική σου».
  • Θεωρία ψηφοφορίας — η απόσταση Kendall tau ανάμεσα σε δύο προτιμήσεις είναι ακριβώς ο αριθμός αντιστροφών.
  • Μηχανές αναζήτησης — πόσο άλλαξε η σειρά των αποτελεσμάτων μετά από μια αλλαγή στον αλγόριθμο κατάταξης.

Η αφελής λύση:

Ο ορισμός σχεδόν γράφει μόνος του τον πρώτο αλγόριθμο — εξέτασε κάθε δυνατό ζευγάρι.

ΑλγόριθμοςΜέτρηση αντιστροφών — ωμή βία
Θ(n²)
Δοκίμασε κάθε ζευγάρι θέσεων (i, j) με i < j· μέτρα όσα είναι ανάποδα.
Είσοδος:
πίνακας A με n αριθμούς
Έξοδος:
το πλήθος των αντιστροφών

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

Πολυπλοκότητα. Ο διπλός βρόχος εξετάζει ζευγάρια → .

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

Η ιδέα D&C: τρία είδη αντιστροφών

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

  • ① μέσα στο : και οι δύο θέσεις στο αριστερό μισό.
  • ② μέσα στο : και οι δύο θέσεις στο δεξί μισό.
  • ③ μικτές: μία θέση στο , μία στο .

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

ΔιερευνητήςΤρία είδη αντιστροφών — βήμα-βήμαΒήμα 1 / 28
A₁ (αριστερό μισό)A₂ (δεξιό μισό)4θέση 12θέση 27θέση 31θέση 48θέση 53θέση 66θέση 75θέση 8
(i, j) = (1, 2)και τα δύο στο A₁✗ αντιστροφή
A[1] = 4 > A[2] = 2μεγαλύτερο μπροστά, μικρότερο πίσω → είναι αντιστροφή.
① μέσα στο A₁
Εξέτασα 1 / 6 ζευγάρια
1 αντιστροφές
② μέσα στο A₂
Εξέτασα 0 / 6 ζευγάρια
0 αντιστροφές
③ μικτές
Εξέτασα 0 / 16 ζευγάρια
0 αντιστροφές
σύνολο μέχρι τώρα = 1 + 0 + 0 = 1

Η διάσπαση είναι ακριβής: κάθε ζευγάρι έπεσε σε ένα και μόνο ένα κουτί, και τα τρία κουτιά αθροισμένα δίνουν ΟΛΕΣ τις αντιστροφές. Άρα:

Τα δύο πρώτα είδη είναι δωρεάν: είναι ακριβώς το ίδιο πρόβλημα σε μικρότερη είσοδο, οπότε τα αναλαμβάνει η αναδρομή. Όλο το βάρος πέφτει στο τρίτο: πώς μετράμε τις μικτές αντιστροφές γρήγορα;

Το κλειδί: μικτές αντιστροφές σε γραμμικό χρόνο

Αν μετρούσαμε τις μικτές μία-μία, θα ξαναπέφταμε στο — δεν θα κερδίζαμε τίποτα. Χρειαζόμαστε ένα κόλπο. Και το κόλπο κρύβεται σε μία απαίτηση:

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

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

Αν στο αριστερό μισό μένουν στοιχεία, αυτό το ένα δεξί στοιχείο προσθέτει αντιστροφές με μία πράξη — όχι με ελέγχους. Εκεί ακριβώς εξαφανίζεται ο τετραγωνικός χρόνος.

Πάτα Επόμενο και δες το να συμβαίνει. Πρόσεξε ειδικά τις στιγμές που ανάβουν κόκκινα στοιχεία στο αριστερό μισό — εκεί μετριέται μια ολόκληρη παρτίδα αντιστροφών μονομιάς:

merge-and-count — συγχώνευσε δύο ταξινομημένα μισά, μέτρα τις μικτές αντιστροφές
Συγχώνευση

Τα δύο μισά φτάνουν εδώ ήδη ταξινομημένα από την αναδρομή.

Αριστερό A₁
2
3
8
9
Δεξί A₂
1
5
6
7
Συγχωνευμένο
·
·
·
·
·
·
·
·
Μικτές αντιστροφές0
Δύο ταξινομημένα μισά, έτοιμα να συγχωνευθούν. Πάτα «Επόμενο»: σε κάθε βήμα συγκρίνουμε τα δύο μπροστινά στοιχεία, κατεβάζουμε το μικρότερο — και αν χάσει το αριστερό, μετράμε αντιστροφές.
Βήμα 0 / 8

Ο αλγόριθμος

Πρώτα το βήμα συνδυασμού — η merge-and-count. Είναι η merge της mergesort με μία μόνο επιπλέον γραμμή.

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

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

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

Με τη merge-and-count έτοιμη, ο πλήρης αλγόριθμος είναι σχεδόν τετριμμένος — ακριβώς η mergesort, που τυχαίνει να μετράει και αντιστροφές στην πορεία.

Αλγόριθμοςsort-and-count — ταξινόμηση που μετράει
O(n log n)
Σπάσε στη μέση· μέτρα αναδρομικά τις αντιστροφές κάθε μισού· συγχώνευσε με merge-and-count για τις μικτές· άθροισε τα τρία.
Είσοδος:
πίνακας A
Έξοδος:
ζεύγος (πλήθος αντιστροφών του A, ο A ταξινομημένος)

Με λόγια. Βάση: ένας πίνακας με ένα στοιχείο έχει αντιστροφές και είναι ήδη ταξινομημένος. Αλλιώς: σπάσε στη μέση· κάλεσε αναδρομικά τον εαυτό σου στα δύο μισά — κάθε κλήση γυρίζει πίσω τον αριθμό αντιστροφών και το μισό ταξινομημένο· συγχώνευσε τα δύο ταξινομημένα μισά με merge-and-count, που δίνει τις μικτές. Το σύνολο είναι το άθροισμα των τριών.

Πολυπλοκότητα

Δύο αναδρομικές κλήσεις σε μισό μέγεθος, συν μια γραμμική συγχώνευση:

Αυτή είναι η ίδια ακριβώς αναδρομή με τη mergesort. Master Theorem με : αφού , είμαστε στην περίπτωση 2:

Από σε — και ουσιαστικά δωρεάν, αφού ο αλγόριθμος δεν είναι παρά η mergesort με μία γραμμή παραπάνω.

Κάρτα μνήμηςΜέτρηση αντιστροφών
Λέξεις-κλειδιά
σπάσε στη μέσητρία είδη: A₁ / A₂ / μικτέςαπαίτησε ταξινομημένα μισάmerge-and-count+ (m − i + 1) ανά βήμα
Τα βήματα στο μυαλό σου
1Βάση: πίνακας 1 στοιχείου → 0 αντιστροφές, ήδη ταξινομημένος.
2Σπάσε στη μέση· μέτρα αναδρομικά τις αντιστροφές κάθε μισού — και πάρε πίσω τα μισά ταξινομημένα.
3Συγχώνευσε τα δύο ταξινομημένα μισά· όποτε κατεβαίνει στοιχείο του δεξιού, πρόσθεσε όσα μένουν στο αριστερό.
4Άθροισε: (μέσα στο A₁) + (μέσα στο A₂) + (μικτές).
Πολυπλοκότητα
O(n log n)
Κλασική παγίδα
Η αναδρομή ΠΡΕΠΕΙ να επιστρέφει και τον ταξινομημένο πίνακα. Χωρίς αυτό, η merge-and-count δεν μπορεί να πει «όλα τα υπόλοιπα αριστερά μετράνε» — και ξαναπέφτεις σε O(n²).

Πρόβλημα 2 · Κυρίαρχο Χρώμα

Νιώσε: ποιος έχει την απόλυτη πλειοψηφία

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

Το ίδιο πρόβλημα, ντυμένο σαν σκακιέρα:

Παραδείγματα. Σε σκακιέρα (16 πλακίδια): 9 κόκκινα → το κόκκινο είναι κυρίαρχο, αφού . Αλλά 8 κόκκινα → όχι κυρίαρχο, γιατί — η ανισότητα είναι αυστηρή.

Η αφελής λύση:

Αφού δεν ξέρουμε ποια χρώματα να ψάξουμε, ας τα δοκιμάσουμε όλα. Για κάθε ένα από τα πλακίδια, πάρε το χρώμα του ως υποψήφιο και μέτρησε σε ολόκληρη τη σκακιέρα πόσες φορές εμφανίζεται — αυτό είναι ένα πέρασμα . Αν κάποιο ξεπεράσει το , το βρήκαμε.

Σωστό, αλλά πολύ αργό. Για μια σκακιέρα μιλάμε για πράξεις.

Η λύση D&C:

Διαίρει. Σπάσε τη σκακιέρα σε 4 υποσκακιέρες — τα τέσσερα τεταρτημόρια.

Κυρίευσε. Κάλεσε αναδρομικά τον εαυτό σου σε καθεμία. Κάθε υποσκακιέρα γυρίζει πίσω έναν υποψήφιο: το δικό της κυρίαρχο χρώμα (ή «κανένα»).

Συνδύασε. Εδώ είναι όλη η ουσία — και στηρίζεται σε μία παρατήρηση:

Η παρατήρηση ακούγεται «προφανής» — δεν είναι. Λέει κάτι πολύ συγκεκριμένο: ένα χρώμα δεν μπορεί να έχει διάσπαρτη πλειοψηφία σε όλη τη σκακιέρα χωρίς να συγκεντρώνεται κάπου. Πριν την αποδείξουμε με μολύβι, παίξε με τους τέσσερις slider — καθένας ανεβάζει πόσες φορές εμφανίζεται το κόκκινο σε ένα τεταρτημόριο, κλειδωμένο στο «όχι κυρίαρχο εδώ» (δηλαδή το πολύ ). Σπρώξε τους όλους στο μέγιστο και κοίτα το συνολικό μετρητή:

ΑπόδειξηΓιατί η σφαιρική απάντηση κρύβεται σε ένα τεταρτημόριο

Υπόθεσε ότι το κόκκινο κυριαρχεί στη μεγάλη σκακιέρα. Αν δεν κυριαρχεί σε κανένα τεταρτημόριο, τότε σε καθένα εμφανίζεται το πολύ 2 φορές (= ½ · (n/2)²). Σπρώξε τους τέσσερις slider στο μέγιστο και κοίτα τι κάνει το σύνολο.

Q₁ (πάνω-αριστερά)0 / 4
cap 2
Q₂ (πάνω-δεξιά)0 / 4
cap 2
Q₃ (κάτω-αριστερά)0 / 4
cap 2
Q₄ (κάτω-δεξιά)0 / 4
cap 2
Σύνολο κόκκινων σε όλη τη σκακιέρα = 0 / 16κατώφλι κυριαρχίας: > 8 (= n²/2)
Σπρώξε όλους τους slider στο όριο — τότε φαίνεται καθαρά το φράγμα 4 · 2 = 8.

Τι μόλις είδες: όσο και να σπρώξεις τους τέσσερις slider, το σύνολο δεν φτάνει ποτέ το . Επομένως αν το ήταν κυρίαρχο στη μεγάλη σκακιέρα (δηλαδή εμφανίσεις), τότε δεν γίνεται να μην κυριαρχεί σε τουλάχιστον ένα τεταρτημόριο. Σε μαθηματικά:

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

Η συνέπεια είναι καθοριστική: οι μόνοι πιθανοί υποψήφιοι για κυρίαρχο της μεγάλης σκακιέρας είναι τα (το πολύ) 4 χρώματα που γυρίζουν οι 4 αναδρομικές κλήσεις. Δεν χρειάζεται να σκεφτούμε κανένα άλλο.

Δες τον αλγόριθμο να τρέχει

Στη σκακιέρα παρακάτω, διάλεξε ένα από τα τρία σενάρια (ή πάτα «Ζωγράφισε» και φτιάξε δικό σου χρωματισμό), και πάτα Επόμενο για να σπάσει σε 4 τεταρτημόρια, να βγάλει αναδρομικά τους ≤ 4 υποψήφιους, να μετρήσει το καθένα σε ολόκληρη τη σκακιέρα, και να εκδώσει ετυμηγορία. Πρόσεξε ότι στο σενάριο «Σφιχτό 8 vs 8», 8 κόκκινα δεν είναι κυρίαρχα — η ανισότητα είναι αυστηρά μεγαλύτερο, όχι μεγαλύτερο-ή-ίσο:

ΑλγόριθμοςΚυρίαρχο χρώμα — βήμα-βήμα σε σκακιέρα 4×4
n = 4 · σύνολο = 16 πλακίδια · κυρίαρχο ⇔ > 8 εμφανίσεις
Φάση 1 / 5 · Η σκακιέρα
Η σκακιέρα είναι έτοιμη. Δεν ξέρουμε ακόμα ποιο χρώμα κυριαρχεί — μπορεί και κανένα.
9 κόκκινα → κυρίαρχο. Μόνο 1 διακριτός υποψήφιος από τα 4 τεταρτημόρια.
Σενάριο: Έχει κυρίαρχο

Για κάθε ένα από αυτά τα (το πολύ) 4 χρώματα, μετράμε σε ολόκληρη τη σκακιέρα πόσες φορές εμφανίζεται — ένα πέρασμα το καθένα. Τέσσερα περάσματα → συνολικός χρόνος συνδυασμού.

ΑλγόριθμοςΚυρίαρχο χρώμα — διαίρει και κυρίευε
O(n² log n)
Σπάσε σε 4 τεταρτημόρια· πάρε αναδρομικά τον υποψήφιο καθενός· οι μόνοι υποψήφιοι της μεγάλης σκακιέρας είναι αυτοί οι ≤ 4.
Είσοδος:
σκακιέρα B μεγέθους n × n, n = 2^k
Έξοδος:
το κυρίαρχο χρώμα, ή «κανένα»

Με λόγια. Βάση: μια σκακιέρα έχει προφανώς ως κυρίαρχο το χρώμα του μοναδικού της πλακιδίου. Αλλιώς, σπάσε στα 4 τεταρτημόρια και πάρε αναδρομικά τον υποψήφιο καθενός. Μετά, για κάθε διαφορετικό χρώμα ανάμεσα σε αυτούς τους ≤ 4 υποψήφιους, μέτρησέ το σε όλη τη σκακιέρα· αν κάποιο ξεπερνά το , αυτό είναι το κυρίαρχο. Αν κανένα δεν το ξεπερνά, δεν υπάρχει κυρίαρχο χρώμα.

Πολυπλοκότητα

Τέσσερις αναδρομικές κλήσεις σε σκακιέρες μισής πλευράς, συν ένα combine :

Master Theorem με : αφού , περίπτωση 2:

Από σε — δύο ολόκληρες τάξεις μεγέθους κέρδος.

Κάρτα μνήμηςΚυρίαρχο χρώμα
Λέξεις-κλειδιά
σπάσε σε 4 τεταρτημόριακάθε ένα δίνει 1 υποψήφιοκυρίαρχο ⇒ κυρίαρχο σε ≥ 1το πολύ 4 υποψήφιοιμέτρα καθένα σε O(n²)
Τα βήματα στο μυαλό σου
1Βάση: σκακιέρα 1×1 → υποψήφιος είναι το χρώμα της.
2Σπάσε σε 4 υποσκακιέρες n/2 × n/2· πάρε αναδρομικά τον υποψήφιο καθεμίας.
3Για καθένα από τα ≤ 4 χρώματα, μέτρησέ το σε όλη τη σκακιέρα — O(n²) ανά χρώμα.
4Αν κάποιο ξεπερνά τα n²/2 → κυρίαρχο· αλλιώς «κανένα».
Πολυπλοκότητα
O(n² log n)
Κλασική παγίδα
Η παρατήρηση είναι μονόδρομη: «κυρίαρχο στη μεγάλη ⇒ κυρίαρχο σε ≥ 1 υποσκακιέρα», ΟΧΙ το αντίστροφο. Και «κυρίαρχο» σημαίνει αυστηρά > n²/2 — το ακριβώς n²/2 δεν μετράει.

Πρόβλημα 3 · Πολλαπλασιασμός Ακεραίων — Karatsuba

Νιώσε: πόσο κοστίζει ο πολλαπλασιασμός

Στο δημοτικό μάθαμε να πολλαπλασιάζουμε «με τη σειρά»: γράφεις τους δύο αριθμούς, πολλαπλασιάζεις ψηφίο με ψηφίο, προσθέτεις. Για μικρούς αριθμούς δεν μας απασχολεί το κόστος. Αλλά η κρυπτογραφία (π.χ. RSA) πολλαπλασιάζει αριθμούς με χιλιάδες ψηφία — αριθμούς που δεν χωράνε σε καμία int64 και αναπαρίστανται ως πίνακες ψηφίων. Εκεί το κόστος μετράει.

Ας μετρήσουμε. Με τον σχολικό τρόπο:

ΠράξηΚόστος
Πρόσθεση/πολλαπλασιασμός μονοψήφιων
Πρόσθεση δύο -ψήφιων αριθμών
Πολλαπλασιασμός δύο -ψήφιων αριθμών

Το του πολλαπλασιασμού είναι ο εχθρός μας: κάθε ψηφίο του ενός αριθμού πολλαπλασιάζεται με κάθε ψηφίο του άλλου — μονοψήφιοι πολλαπλασιασμοί. Δες το στο :

Η ερώτηση: μπορούμε να πολλαπλασιάσουμε πιο γρήγορα από ;

Πρώτη προσπάθεια D&C — και γιατί αποτυγχάνει

Δοκιμάζουμε το σχήμα του L03. Σπάμε κάθε αριθμό στα μισά του ψηφία:

Γενικά, για -ψήφιους και :

όπου έχουν ψηφία το καθένα. Κάνοντας την πράξη:

Για να υπολογίσω το χρειάζομαι τέσσερις πολλαπλασιασμούς μικρότερων αριθμών: , , , — και μετά μερικές προσθέσεις και μετατοπίσεις, που κοστίζουν . Άρα:

Master Theorem με : αφού , είμαστε στην περίπτωση 3:

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

Δέντρο4 αναδρομικές κλήσεις vs 3 — γιατί αλλάζει ο εκθέτης
n =βάθος δέντρου: log₂16 = 4
T(n) = 4 T(n/2) + cn
log₂ 4 = 2.000
k=0
4ᵏ · n/2ᵏ = 1 · 16 = 16
k=1
4ᵏ · n/2ᵏ = 4 · 8 = 32
k=2
4ᵏ · n/2ᵏ = 16 · 4 = 64
k=3
4ᵏ · n/2ᵏ = 64 · 2 = 128
k=4
4ᵏ · n/2ᵏ = 256 · 1 = 256
Σύνολο (μέχρι τα φύλλα κ = 4)496
Φύλλα: 4^log₂n = 256 = n^2.000
T(n) = O(n^log₂4) = O(n²) (εκθέτης: 2)
T(n) = 3 T(n/2) + cn
log₂ 3 = 1.585
k=0
3ᵏ · n/2ᵏ = 1 · 16 = 16
k=1
3ᵏ · n/2ᵏ = 3 · 8 = 24
k=2
3ᵏ · n/2ᵏ = 9 · 4 = 36
k=3
3ᵏ · n/2ᵏ = 27 · 2 = 54
k=4
3ᵏ · n/2ᵏ = 81 · 1 = 81
Σύνολο (μέχρι τα φύλλα κ = 4)211
Φύλλα: 3^log₂n = 81 = n^1.585
T(n) = O(n^log₂3) ≈ O(n^1.585) (εκθέτης: log₂ 3 ≈ 1.585)
Στο τρέχον επίπεδο k = 4:496 vs 211·λόγος ≈ 2.35×
Στα φύλλα η διαφορά έχει εκραγεί: 256 φύλλα στο 4-tree έναντι 81 στο 3-tree — δηλαδή n^2.00 έναντι n^1.58. Με μία λιγότερη αναδρομική κλήση σε κάθε κόμβο, ο εκθέτης πέφτει από 2 σε ≈ 1.585.
Επίπεδο 4 / 4

Με μία μόνο λιγότερη αναδρομική κλήση ανά κόμβο (4 → 3), το πλήθος φύλλων πέφτει από σε — και τα φύλλα κυβερνούν τη συνολική δουλειά. Όλο το ζητούμενο, λοιπόν, είναι: πώς γίνεται 3 αντί για 4;

Το έξυπνο τρικ του Karatsuba (1962)

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

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

Μέσα του κρύβεται ολόκληρο το μεσαίο μας. Αφαίρεσε τα δύο γινόμενα που ήδη έχουμε:

Άρα οι μόνοι τρεις πολλαπλασιασμοί που χρειαζόμαστε είναι:

και ο τελικός τύπος γίνεται:

Δες την ταυτότητα να γίνεται αριθμοί. Στο πάνω επίπεδο της αναδρομής για , ο Karatsuba σπάει σε , κάνει 3 πολλαπλασιασμούς (), και τραβάει το μεσαίο ως απλή αφαίρεση. Πάτα Επόμενο και πρόσεξε τη στιγμή του ελέγχου ταυτότητας — όπου ο τύπος (αφελής, με 2 πολλαπλασιασμούς) γίνεται (μία αφαίρεση) και τα δύο νούμερα ταιριάζουν:

ΠολλαπλασιασμόςKaratsuba — βήμα-βήμα στην ίδια πράξη
Στιγμιότυπο
x =1357α=13β=57
y =2468γ=24δ=68

z₁ =
z₂ =
z₃ =
μεσ. =

x·y =
Βήμα 1 / 6
Σπάσε τα ψηφία στα δύο μισά
Με m = 2, χωρίζουμε καθένα στα 2 πρώτα και τα 2 τελευταία ψηφία.
1357 = α = 13 · 10² + β = 57
2468 = γ = 24 · 10² + δ = 68
Στόχος: το γινόμενο 1357 · 2468 με 3 πολλαπλασιασμούς μικρότερων αριθμών, όχι 4.

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

ΑλγόριθμοςKaratsuba — πολλαπλασιασμός με 3 αναδρομικές κλήσεις
O(n^1.585)
Σπάσε κάθε αριθμό στα μισά ψηφία· κάνε 3 (όχι 4) αναδρομικούς πολλαπλασιασμούς· συνδύασε με προσθέσεις και μετατοπίσεις.
Είσοδος:
δύο ακέραιοι x, y με n ψηφία
Έξοδος:
το γινόμενο x · y

Με λόγια. Βάση: μονοψήφιοι αριθμοί πολλαπλασιάζονται απευθείας. Αλλιώς, σπάσε και στα μισά τους ψηφία ώστε και . Κάνε τρεις αναδρομικούς πολλαπλασιασμούς — , , και . Το μεσαίο γινόμενο προκύπτει ως . Συνάρμοσε το αποτέλεσμα με μετατοπίσεις κατά και .

Πολυπλοκότητα

Τρεις αναδρομικές κλήσεις σε μισό μέγεθος, συν combine :

Master Theorem με : είναι , άρα περίπτωση 3:

Το ότι μειώσαμε τις αναδρομικές κλήσεις από 4 σε 3 δεν είναι μικρό «κούρεμα» — αλλάζει τον εκθέτη: από σε . Για ψηφία, αυτό είναι περίπου λιγότερη δουλειά.

Κάρτα μνήμηςKaratsuba
Λέξεις-κλειδιά
σπάσε στα μισά ψηφία4 → 3 πολλαπλασιασμοίz₃ = (α+β)(γ+δ)μεσαίο = z₃ − z₁ − z₂T(n) = 3T(n/2) + O(n)
Τα βήματα στο μυαλό σου
1Βάση: μονοψήφιοι → πολλαπλασίασέ τους απευθείας.
2Σπάσε x = α·10ᵐ + β και y = γ·10ᵐ + δ στα μισά ψηφία.
3Τρεις αναδρομικοί πολλαπλασιασμοί: z₁ = αγ, z₂ = βδ, z₃ = (α+β)(γ+δ).
4Συνδύασε: x·y = z₁·10²ᵐ + (z₃ − z₁ − z₂)·10ᵐ + z₂.
Πολυπλοκότητα
O(n^1.585)
Κλασική παγίδα
Η αφελής διάσπαση δίνει 4 πολλαπλασιασμούς → T(n) = 4T(n/2) + O(n) = O(n²), κανένα κέρδος. Όλο το κέρδος κρέμεται από το να γίνουν 3 — μέσω της ταυτότητας (α+β)(γ+δ).

Τι ακολούθησε τον Karatsuba

Ο Karatsuba ήταν η πρώτη βελτίωση στο σχολικό μετά από αιώνες — και άνοιξε ολόκληρο ερευνητικό πεδίο. Η αναζήτηση του γρηγορότερου πολλαπλασιασμού κράτησε δεκαετίες:

ΈτοςΑλγόριθμοςΠολυπλοκότητα
~αρχαιότηταΣχολικός
1962Karatsuba–Ofman
1963Toom–Cook (-way)
1971Schönhage–Strassen (FFT)
2007Fürer
2019Harvey–van der Hoeven

Το πρόβλημα έκλεισε το 2019: αποδείχθηκε ότι ο πολλαπλασιασμός γίνεται σε — που πιάνει το θεωρητικό κάτω φράγμα. Στην πράξη όμως, για ρεαλιστικά μεγέθη, ο Karatsuba παραμένει από τους πιο αποδοτικούς λόγω των χαμηλών σταθερών του — γι' αυτό χρησιμοποιείται σε βιβλιοθήκες όπως η GMP.


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

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

Βάλε τα βήματα στη σειρά
Τα βήματα του αλγορίθμου Karatsuba, από την πρώτη ενέργεια στην τελευταία.
Σύρε τις γραμμές για αναδιάταξη — ή χρησιμοποίησε τα βελάκια.
1.Υπολόγισε αναδρομικά z₁ = α·γ και z₂ = β·δ.
2.Σπάσε κάθε αριθμό στα μισά ψηφία: x = α·10ᵐ + β και y = γ·10ᵐ + δ.
3.Βάση: αν οι αριθμοί είναι μονοψήφιοι, πολλαπλασίασέ τους απευθείας.
4.Βγάλε το μεσαίο γινόμενο ως διαφορά: z₃ − z₁ − z₂ = αδ + βγ.
5.Συνάρμοσε το αποτέλεσμα: x·y = z₁·10²ᵐ + (z₃−z₁−z₂)·10ᵐ + z₂.
6.Υπολόγισε αναδρομικά z₃ = (α+β)·(γ+δ) — τον τρίτο και τελευταίο πολλαπλασιασμό.

Τώρα οι τρεις κεντρικές ιδέες της διάλεξης — συμπλήρωσε τα κενά χωρίς να κοιτάς πίσω:

Συμπλήρωσε τα κενά
Μία λέξη-κλειδί για κάθε ένα από τα τρία προβλήματα.
Μέτρηση αντιστροφών: η merge-and-count μετράει τις μικτές αντιστροφές με ένα γραμμικό πέρασμα, επειδή τα δύο μισά φτάνουν από την αναδρομή ήδη . Κυρίαρχο χρώμα: αν ένα χρώμα κυριαρχεί σε όλη τη σκακιέρα, τότε κυριαρχεί σε τουλάχιστον υποσκακιέρα — άρα μένουν μόνο 4 υποψήφιοι. Karatsuba: γλιτώνουμε τον τέταρτο πολλαπλασιασμό αντικαθιστώντας τον με φθηνές , και έτσι η αναδρομή γίνεται 3T(n/2) + O(n).

Μοτίβο σκέψης

Τι μάθαμε

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

  1. Ένα σχήμα, τρία προβλήματα. Το «διαίρει και κυρίευε» δεν είναι αλγόριθμος — είναι μέθοδος σχεδίασης. Το σπάσιμο και η αναδρομή είναι μηχανικά· η ουσία είναι πάντα το βήμα συνδυασμού.
  2. Μέτρηση αντιστροφών. Τρία είδη αντιστροφών (A₁ / A₂ / μικτές). Απαίτησε ταξινομημένα μισά, και η merge-and-count μετράει τις μικτές σε ένα γραμμικό πέρασμα — mergesort συν μία γραμμή.
  3. Κυρίαρχο χρώμα. Η παρατήρηση «κυρίαρχο στη μεγάλη ⇒ κυρίαρχο σε ≥ 1 υποσκακιέρα» περιορίζει τους υποψήφιους σε 4, κάνοντας το combine .
  4. Karatsuba. Ο πρώτος αλγόριθμος που έσπασε το του πολλαπλασιασμού. 3 αντί για 4 αναδρομικές κλήσεις, χάρη στην ταυτότητα .
  5. Το Master Theorem κάνει την ανάλυση μηχανική. Βρες , σύγκρινε με , διάλεξε περίπτωση — και τις τρεις φορές σήμερα δούλεψε σε μία γραμμή.
Επόμενο
L05 · D&C III — Closest pair of points

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

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

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

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

Ιούνιος 2024 · Θέμα 2 — Πλειοψηφικό στοιχείο σε O(n log n)

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

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

Φροντιστηριακό Σετ #4 · Άσκηση 5 — Ύποπτη κάρτα (πλειοψηφικό στοιχείο) με D&C

Υποθέστε ότι είστε σύμβουλοι σε μία τράπεζα που την ενδιαφέρει ο εντοπισμός οικονομικών εγκλημάτων. Έχουν μία συλλογή από τραπεζικές κάρτες που έχουν κατάσχει, επειδή υποπτεύονται ότι χρησιμοποιούνται σε απάτες. Κάθε κάρτα αντιστοιχεί σε ένα μοναδικό τραπεζικό λογαριασμό, ένας λογαριασμός μπορεί να έχει πολλές κάρτες, και δύο κάρτες λέγονται ισοδύναμες αν αντιστοιχούν στον ίδιο λογαριασμό.

Ο λογαριασμός δεν διαβάζεται άμεσα από την κάρτα, όμως η τράπεζα διαθέτει μία «συσκευή ελέγχου ισοδυναμίας» που δέχεται δύο κάρτες και σε χρόνο επιστρέφει TRUE αν είναι ισοδύναμες, αλλιώς FALSE. Είναι η μόνη επιτρεπτή λειτουργία.

Ερώτημα: σε ένα σύνολο από κάρτες, υπάρχει ένα σύνολο με περισσότερες από κάρτες ισοδύναμες μεταξύ τους (άρα ύποπτες); Ο απλοϊκός αλγόριθμος που συγκρίνει κάθε κάρτα με όλες τις υπόλοιπες κοστίζει και δεν γίνεται δεκτός. Σχεδιάστε σε φυσική γλώσσα έναν πιο αποδοτικό αλγόριθμο «διαίρει και βασίλευε» που επιστρέφει μία ύποπτη κάρτα αν υπάρχει τέτοιο σύνολο, ή NIL αλλιώς.

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

Φροντιστηριακό Σετ #4 · Άσκηση 6 — Ταξινόμηση 3 χρωμάτων (σημαία της Ολλανδίας)

Δίνονται ένα ρομπότ και ένα καλάθι με χρωματιστές σφαίρες. Κάθε σφαίρα έχει ένα από τα χρώματα: κόκκινο , μπλε , πράσινο . Θέλουμε το ρομπότ να τις ταξινομήσει χρωματικά, βάζοντας πρώτα τις κόκκινες, μετά τις μπλε και τέλος τις πράσινες.

(α) Σχεδιάστε γραμμικό, επιτόπιο αλγόριθμο για το πρόβλημα. (β) Εξηγήστε πώς μια λύση αυτού του προβλήματος μπορεί να χρησιμοποιηθεί στον αλγόριθμο quicksort.

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

Φροντιστηριακό Σετ #4 · Άσκηση 8 — Διάμεσος δύο ταξινομημένων πινάκων

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

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

Φροντιστηριακό Σετ #4 · Άσκηση 9 — Τομές ευθύγραμμων τμημάτων = αντιστροφές

Έχουμε 2 σύνολα σημείων: ένα σύνολο στη γραμμή και ένα άλλο στη γραμμή . Δημιουργούνται ευθύγραμμα τμήματα, καθένα ενώνοντας το με το .

Περίγραψε έναν αλγόριθμο «διαίρει και βασίλευε» που υπολογίζει πόσα ζεύγη τμημάτων τέμνονται, σε χρόνο . (Οι τιμές και είναι διακριτές.)

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

Φροντιστηριακό Σετ #5 · Άσκηση 2 — Ταίριασμα βιδών με παξιμάδια

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

Σχεδίασε αλγόριθμο που ταιριάζει όλες τις βίδες με τα παξιμάδια, με αποδοτικότητα μέσης περίπτωσης .

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

Φροντιστηριακό Σετ #5 · Άσκηση 3 — Προστασία της Quicksort από σαμποτάζ

Ένα σύστημα χρησιμοποιεί την Quicksort για να επεξεργαστεί δεδομένα που λαμβάνει από ένα δίκτυο. Θέλουμε να το προστατεύσουμε από «σαμποτάζ»: ένας κακόβουλος μπορεί να στείλει δεδομένα ειδικά διαμορφωμένα ώστε η Quicksort να εμφανίσει τη χειρότερη επίδοσή της.

1. Αν η Quicksort διαλέγει πάντα το πρώτο στοιχείο ως pivot, τι δεδομένα θα έστελνε ο κακόβουλος; 2. Πρότεινε μια απλή στρατηγική γραμμικού χρόνου που εγγυάται ανεξάρτητα από τα δεδομένα — χωρίς να αλλάξεις τον τρόπο επιλογής pivot.

Από φροντιστήριοΦροντιστήριοΔιαίρει & κυρίευεΜέτριο

Φροντιστηριακό Σετ #12 — υπό μεταγραφή

Εκφώνηση δεν έχει ακόμα μεταγραφεί.

Φόρτωση σχολίων…
L04 · D&C II — Inversions, Dominant Colour, Karatsuba · Algorithms Class Hub