αλγοριθμος ευκλειδη
-
Upload
ble-nature -
Category
Education
-
view
136 -
download
3
Transcript of αλγοριθμος ευκλειδη
ΕΥΡΕΣΗΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ
(ΑΛΓΟΡΙΘΜΟΙ, Sanjoy Dasgupta, Christos Papadimitriou, Umesh
Vazirani, σελ. 15-39)
Εύρεση Μέγιστου Κοινού Διαιρέτη
Το πρόβλημα:• Δεδομένα: δύο ακέραιοι a και b • Ζητούμενο: ο μέγιστος ακέραιος που διαιρεί καιτους δύο δοσμένους αριθμούς, γνωστός ωςΜέγιστος Κοινός Διαιρέτης τους (Greatest Common Divisor – GCD)
Εύρεση Μέγιστου Κοινού Διαιρέτη
• Έστω a=27 και b=9• Οι διαιρέτες του 27 είναι: 1,3,9,27• Οι διαιρέτες του 9 είναι: 1,3,9• Ο μεγαλύτερος διαιρέτης κοινός και στις 2 λίστεςείναι ο 9
• Επομένως, ο μέγιστος κοινός διαιρέτης (GCD)των αριθμών 27 και 9 είναι ο 9
Εύρεση Μέγιστου Κοινού Διαιρέτη
• Ένας συστηματικός τρόπος για να υπολογίζουμετο μέγιστο κοινό διαιρέτη δύο αριθμών είναι– να αναλύσουμε τους δύο αριθμούς σε γινόμενοπρώτων παραγόντων και
– να πολλαπλασιάσουμε τους κοινούς τους παράγοντεςώστε να πάρουμε το μέγιστο κοινό διαιρέτη τους
• Έστω a=1035 και b=759– 1035=32*5*23– 759=3*11*23– Μέγιστος κοινός διαιρέτης των 1035 και 759 είναι ο
3*23=69
Εύρεση Μέγιστου Κοινού Διαιρέτη
• Ένας συστηματικός τρόπος για να υπολογίζουμετο μέγιστο κοινό διαιρέτη δύο αριθμών είναι– να αναλύσουμε τους δύο αριθμούς σε γινόμενοπρώτων παραγόντων και
– να πολλαπλασιάσουμε τους κοινούς τους παράγοντεςώστε να πάρουμε το μέγιστο κοινό διαιρέτη τους
• Έστω a=1035 και b=759– 1035=32*5*23– 759=3*11*23– Μέγιστος κοινός διαιρέτης των 1035 και 759 είναι ο
3*23=69
ΔΕΝ γνωρίζουμε τρόπο για να το κάνουμε αποδοτικά!!!!!!
Εύρεση Μέγιστου Κοινού Διαιρέτη
• Αποδοτικότερος τρόπος;;;;;;;;
• ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ– Ανακαλύφθηκε από τον Έλληνα μαθηματικόπερισσότερο από 2000 χρόνια πριν…
Εύρεση Μέγιστου Κοινού Διαιρέτη
Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ
a mod b σημαίνει: το υπόλοιπο που αφήνει η διαίρεση του a με το bΠ.χ., 5 mod 3=2, 6 mod 3=0 κ.ο.κ.
Εύρεση Μέγιστου Κοινού Διαιρέτη
Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ
Παραδείγματα εκτέλεσης του αλγορίθμου:GCD(18,9)=GCD(9,0) ⇒ GCD(18,9)=9GCD(37,11)=GCD(11,4) ⇒ GCD(4,3)=GCD(3,1)=GCD(1,0) ⇒ GCD(37,11)=1
Εύρεση Μέγιστου Κοινού Διαιρέτη
Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ
Παραδείγματα εκτέλεσης του αλγορίθμου:GCD(18,9)=GCD(9,0) ⇒ GCD(18,9)=9GCD(37,11)=GCD(11,4) ⇒ GCD(4,3)=GCD(3,1)=GCD(1,0) ⇒ GCD(37,11)=1
Αριθμοί όπως οι 37 και 11, που έχουν ΜΚΔ το 1 λέγονται σχετικά πρώτοι μεταξύτους.
Εύρεση Μέγιστου Κοινού Διαιρέτη
Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ
GCD(18,9)=GCD(9,0) ⇒ GCD(18,9)=9GCD(37,11)=GCD(11,4) ⇒ GCD(4,3)=GCD(3,1)=GCD(1,0) ⇒ GCD(37,11)=1*
Αλγόριθμος Ευκλείδη: ορθότηταΟ αλγόριθμος υλοποιεί ακριβώς τον παρακάτω κανόνα:
• Αν x και y θετικοί ακέραιοι με x≥y, τότε gcd(x,y) = gcd(x mod y,y)
Γιατί ισχύει αυτό;• Αρκεί να δείξουμε ότι gcd(x, y)=gcd(x-y, y) από όπου προκύπτει και
ο παραπάνω κανόνας αφαιρώντας συνεχώς τον y από τον x– Αν ένας αριθμός διαιρεί τους x και y τότε διαιρεί και τον x-y
• Κάθε ακέραιος a που διαιρεί και τον x(=ka) και τον y(=ma) διαιρεί επίσης καιτον x-y(=ka-ma=(k-m)a), επομένως gcd(x,y)=gcd(x-y,y).
– Αντίστροφα, αν ένας αριθμός διαιρεί τους x-y και y τότε διαιρεί και τον x• Όμοια, κάθε ακέραιος a που διαιρεί και τον x-y(=ka) και τον y(=ma) διαιρείεπίσης και τον x(=(m+k)a) και τον y(=ma).
• Επομένως gcd(x,y)=gcd(x-y,y)
Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης
• Για να υπολογίσουμε το χρόνο εκτέλεσης τουαλγορίθμου, πρέπει να δούμε πόσο γρήγοραμειώνονται οι αριθμοί (a,b) σε κάθε αναδρομικήκλήση
• Σε κάθε γύρο, οι αριθμοί (a,b) γίνονται (b,a modb): η σειρά τους αλλάζει, και ο μεγαλύτερος απόαυτούς, δηλ. ο a, μειώνεται σε a mod b
• Αυτή είναι μια σημαντική μείωση
Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης
Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο;• Αν a≥b τότε a mod b<a/2Απόδειξη• Ισχύει είτε b≤a/2 είτε b>a/2
ab
ab
Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης
Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο;• Αν a≥b τότε a mod b<a/2Απόδειξη• Ισχύει είτε b≤a/2 είτε b>a/2
– Αν b≤a/2 τότε a mod b < b ≤ a/2
ab
Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης
Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο;• Αν a≥b τότε a mod b<a/2Απόδειξη• Ισχύει είτε b≤a/2 είτε b>a/2
– Αν b>a/2 τότε a mod b=α-b<a/2
ab
Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης
• Αυτό σημαίνει ότι μετά από δύο διαδοχικούςγύρους, και οι δύο αριθμοί, a και b, είναιτουλάχιστον μισοί σε τιμή– δηλ., το μήκος του καθενός μειώνεται τουλάχιστονκατά 1 bit
• Αν αρχικά είναι n-bit ακέραιοι, τότε η βασικήπερίπτωση επιτυγχάνεται μετά από 2n αναδρομικές κλήσεις
• Και επειδή κάθε κλήση απαιτεί μία διαίρεση πουαπαιτεί τετραγωνικό χρόνο, ο συνολικός χρόνοςεκτέλεσης είναι O(n3)
Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης
• Αρχικά: gcd(a,b)• Βήμα 1: gcd(b,a mod b)• Βήμα 2: gcd(a mod b, b mod (a mod b))
• Έστω ότι οι αριθμοί a και b έχουν αρχικά n bits ο καθένας• Σε 2 βήματα, ο πρώτος αριθμός (το ίδιο ισχύει και για το δεύτερο) έχει
μειωθεί στο μισό– Μείωση στο μισό = έχει 1 bit λιγότερο
• Για να τερματίσει ο αλγόριθμος πρέπει ο δεύτερος αριθμός να γίνει 0 ⇒ ναχάσει n bits
– «κόβω» 1 bit σε 2 βήματα– «κόβω» n bits σε πόσα βήματα;– Σε 2*n βήματα, δηλ. σε πλήθος βημάτων της τάξης του n (ή O(n) βήματα)
• Μετά από 2 διαδοχικά βήματα μειώνω τον a σε a mod b, κάνοντας μίαδιαίρεση που κοστίζει της τάξης του n2 βήματα (ή Ο(n2) βήματα)
• Οπότε, συνολικά απαιτούνται: O(n) * Ο(n2) = Ο(n3) βήματα