Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ (συνέχεια)
2
Πολλαπλασιασμός: μπορούμε καλύτερα;
Διαισθητικά, επειδή ο πολλαπλασιασμός φαίνεται να απαιτεί άθροιση περίπου n πολλαπλασίων μιας από τις εισόδους, και δεδομένου ότι κάθε πρόσθεση απαιτεί γραμμικό χρόνο, φαίνεται οι n2 bit λειτουργίες να μη γίνεται να μειωθούν Παραδόξως: μπορούμε να κάνουμε πολύ καλύτερα!
3
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
Χρησιμοποιούμε (1) την τεχνική διαίρει και βασίλευε (divide and conquer) 1. Σπάμε το πρόβλημα σε υποπροβλήματα που αποτελούν μικρότερου μεγέθους στιγμιότυπα του δοσμένου προβλήματος 2. Αναδρομικά λύνουμε τα υποπροβλήματα 3. Συνδυάζουμε κατάλληλα τις λύσεις τους για να πάρουμε τη λύση του αρχικού προβλήματος Φανταστείτε ότι έχω να πλύνω μια στολή που αποτελείται από πουκάμισο, γιλέκο και παντελόνι… και (2) το θεώρημα του Gauss bc + ad = (a + b)(c + d)-ac-bd
4
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
Δίνονται n-bit ακέραιοι αριθμοί x, y και ζητείται το x*y Χωρίζουμε τους x, y στο αριστερό και δεξί τους τμήμα (το καθένα έχει n/2 bits) Τότε:
5
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
Δίνονται n-bit ακέραιοι αριθμοί x, y και ζητείται το x*y Χωρίζουμε τους x, y στο αριστερό και δεξί τους τμήμα (το καθένα έχει n/2 bits) Τότε: Αν x = τότε xL = 1011 και xR = 0110 και x = 1011*
6
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
Δίνονται n-bit ακέραιοι αριθμοί x, y και ζητείται το x*y Χωρίζουμε τους x, y στο αριστερό και δεξί τους τμήμα (το καθένα έχει n/2 bits) Τότε: Αν x = τότε xL = 1011 και xR = 0110 και x = 1011* Γραμμικός χρόνος: Ο(n)
7
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
Δίνονται n-bit ακέραιοι αριθμοί x, y και ζητείται το x*y Χωρίζουμε τους x, y στο αριστερό και δεξί τους τμήμα (το καθένα έχει n/2 bits) Τότε: Αν x = τότε xL = 1011 και xR = 0110 και x = 1011* Γραμμικός χρόνος: Ο(n) Xρόνος: 4*T(n/2) Συνολικός χρόνος: 4*Τ(n/2)+O(n)=O(n2) με τη γνωστή τεχνική πολλαπλασιασμού…
8
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
Δίνονται n-bit ακέραιοι αριθμοί x, y και ζητείται το x*y Χωρίζουμε τους x, y στο αριστερό και δεξί τους τμήμα (το καθένα έχει n/2 bits) Τότε: Αν x = τότε xL = 1011 και xR = 0110 και x = 1011* Γραμμικός χρόνος: Ο(n) Xρόνος: 3*T(n/2) Συνολικός χρόνος: 3*Τ(n/2)+O(n)O(n1.59) με χρήση της τεχνικής του Gauss…
9
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος
ΑΛΓΟΡΙΘΜΟΣ ΓΙΑ ΠΟΛΛΑΠΛΑΣΙΑΣΜΟ ΜΕ ΧΡΗΣΗ ΤΗΣ ΤΕΧΝΙΚΗΣ ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ
10
Κάθε πρόβλημα διαιρείται σε 3 υποπροβλήματα
Η αναδρομική διαδικασία k=0 k=logn Τελικά: 3k υποπροβλήματα, μεγέθους το καθένα n/2k: χρόνος 3k *Ο(n/2k)= (3/2)k*O(n)
11
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος (τεχνική διαίρει και βασίλευε)
Δεδομένα: 2 ακέραιοι a και b με n ψηφία ο καθένας Ζητούμενο: γινόμενο a επί b Παράδειγμα: Με βάση τον αλγόριθμο για πολλαπλασιασμό που είδαμε ήδη και απαιτεί χρόνο O(n2) 1980 = a x 2315 = b 9900 1980 5940 = a x b
12
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος (τεχνική διαίρει και βασίλευε)
Διαιρούμε το πρόβλημα: Χωρίζουμε τους ακεραίους στα δύο τους μισά: Ο αλγόριθμος πρέπει να υπολογίσει τα 4 γινόμενα και μετά να τα αθροίσει, δηλ., 15*80+(15*19+23*80)*102+23*19*104= = Απαιτούμενος χρόνος: T(n) 4*T(n / 2) + O(n) T(n) = O(n2) * * *100
13
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος (τεχνική διαίρει και βασίλευε)
Διαιρούμε το πρόβλημα: Χωρίζουμε τους ακεραίους στα δύο τους μισά: Με λίγη εξυπνάδα… ο αλγόριθμος μπορεί να υπολογίσει μόνο 3 γινόμενα: x1 = aL*bL, x2 = aR*bR και x3 = (aL + aR)*(bL + bR) Αφού: aL aR x bL bR aL bL aL bR + aR bL aR bR x x3 - x1 - x x2 Τώρα ο αλγόριθμος πρέπει να υπολογίσει 3 γινόμενα: x1, x2, και x3, να υπολογίσει το x3 - x1 - x2, και να αθροίσει: x1*104 + (x3 - x1 – x2)*102 + x2 = 437*104 + ( – 1200)* = 437* * = Απαιτούμενος χρόνος: T(n) 3*T(n / 2) + O(n) T(n) O(n1.59) * * *100 Αλγόριθμος Karatsuba
14
Πολλαπλασιασμός: βελτιωμένος αλγόριθμος (τεχνική διαίρει και βασίλευε)
(aL+aR)*(bL+bR)=aL*bL+aL*b*R+aR*bL+aR*bR aL*b*R+aR*bL=(aL+aR)*(bL+bR)-aL*bL-aR*bR aL*b*R+aR*bL=x3-x1-x2 Διαιρούμε το πρόβλημα: Χωρίζουμε τους ακεραίους στα δύο τους μισά: Με λίγη εξυπνάδα… ο αλγόριθμος μπορεί να υπολογίσει μόνο 3 γινόμενα: x1 = aL*bL, x2 = aR*bR και x3 = (aL + aR)*(bL + bR) Αφού: aL aR x bL bR aL bL aL bR + aR bL aR bR x x3 - x1 - x x2 Τώρα ο αλγόριθμος πρέπει να υπολογίσει 3 γινόμενα: x1, x2, και x3, να υπολογίσει το x3 - x1 - x2, και να αθροίσει: x1*104 + (x3 - x1 – x2)*102 + x2 = 437*104 + ( – 1200)* = 437* * = Απαιτούμενος χρόνος: T(n) 3*T(n / 2) + O(n) T(n) O(n1.59) * * *100 Αλγόριθμος Karatsuba
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.