αλγοριθμος ευκλειδη

17
ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ (ΑΛΓΟΡΙΘΜΟΙ, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani, σελ. 15-39)

Transcript of αλγοριθμος ευκλειδη

Page 1: αλγοριθμος ευκλειδη

ΕΥΡΕΣΗΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

(ΑΛΓΟΡΙΘΜΟΙ, Sanjoy Dasgupta, Christos Papadimitriou, Umesh

Vazirani, σελ. 15-39)

Page 2: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

Το πρόβλημα:• Δεδομένα: δύο ακέραιοι a και b • Ζητούμενο: ο μέγιστος ακέραιος που διαιρεί καιτους δύο δοσμένους αριθμούς, γνωστός ωςΜέγιστος Κοινός Διαιρέτης τους (Greatest Common Divisor – GCD)

Page 3: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

• Έστω a=27 και b=9• Οι διαιρέτες του 27 είναι: 1,3,9,27• Οι διαιρέτες του 9 είναι: 1,3,9• Ο μεγαλύτερος διαιρέτης κοινός και στις 2 λίστεςείναι ο 9

• Επομένως, ο μέγιστος κοινός διαιρέτης (GCD)των αριθμών 27 και 9 είναι ο 9

Page 4: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

• Ένας συστηματικός τρόπος για να υπολογίζουμετο μέγιστο κοινό διαιρέτη δύο αριθμών είναι– να αναλύσουμε τους δύο αριθμούς σε γινόμενοπρώτων παραγόντων και

– να πολλαπλασιάσουμε τους κοινούς τους παράγοντεςώστε να πάρουμε το μέγιστο κοινό διαιρέτη τους

• Έστω a=1035 και b=759– 1035=32*5*23– 759=3*11*23– Μέγιστος κοινός διαιρέτης των 1035 και 759 είναι ο

3*23=69

Page 5: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

• Ένας συστηματικός τρόπος για να υπολογίζουμετο μέγιστο κοινό διαιρέτη δύο αριθμών είναι– να αναλύσουμε τους δύο αριθμούς σε γινόμενοπρώτων παραγόντων και

– να πολλαπλασιάσουμε τους κοινούς τους παράγοντεςώστε να πάρουμε το μέγιστο κοινό διαιρέτη τους

• Έστω a=1035 και b=759– 1035=32*5*23– 759=3*11*23– Μέγιστος κοινός διαιρέτης των 1035 και 759 είναι ο

3*23=69

ΔΕΝ γνωρίζουμε τρόπο για να το κάνουμε αποδοτικά!!!!!!

Page 6: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

• Αποδοτικότερος τρόπος;;;;;;;;

• ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ– Ανακαλύφθηκε από τον Έλληνα μαθηματικόπερισσότερο από 2000 χρόνια πριν…

Page 7: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

a mod b σημαίνει: το υπόλοιπο που αφήνει η διαίρεση του a με το bΠ.χ., 5 mod 3=2, 6 mod 3=0 κ.ο.κ.

Page 8: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

Παραδείγματα εκτέλεσης του αλγορίθμου: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

Page 9: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

Παραδείγματα εκτέλεσης του αλγορίθμου: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 λέγονται σχετικά πρώτοι μεταξύτους.

Page 10: αλγοριθμος ευκλειδη

Εύρεση Μέγιστου Κοινού Διαιρέτη

Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ

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*

Page 11: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: ορθότηταΟ αλγόριθμος υλοποιεί ακριβώς τον παρακάτω κανόνα:

• Αν 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)

Page 12: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης

• Για να υπολογίσουμε το χρόνο εκτέλεσης τουαλγορίθμου, πρέπει να δούμε πόσο γρήγοραμειώνονται οι αριθμοί (a,b) σε κάθε αναδρομικήκλήση

• Σε κάθε γύρο, οι αριθμοί (a,b) γίνονται (b,a modb): η σειρά τους αλλάζει, και ο μεγαλύτερος απόαυτούς, δηλ. ο a, μειώνεται σε a mod b

• Αυτή είναι μια σημαντική μείωση

Page 13: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης

Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο;• Αν a≥b τότε a mod b<a/2Απόδειξη• Ισχύει είτε b≤a/2 είτε b>a/2

ab

ab

Page 14: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης

Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο;• Αν a≥b τότε a mod b<a/2Απόδειξη• Ισχύει είτε b≤a/2 είτε b>a/2

– Αν b≤a/2 τότε a mod b < b ≤ a/2

ab

Page 15: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης

Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο;• Αν a≥b τότε a mod b<a/2Απόδειξη• Ισχύει είτε b≤a/2 είτε b>a/2

– Αν b>a/2 τότε a mod b=α-b<a/2

ab

Page 16: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης

• Αυτό σημαίνει ότι μετά από δύο διαδοχικούςγύρους, και οι δύο αριθμοί, a και b, είναιτουλάχιστον μισοί σε τιμή– δηλ., το μήκος του καθενός μειώνεται τουλάχιστονκατά 1 bit

• Αν αρχικά είναι n-bit ακέραιοι, τότε η βασικήπερίπτωση επιτυγχάνεται μετά από 2n αναδρομικές κλήσεις

• Και επειδή κάθε κλήση απαιτεί μία διαίρεση πουαπαιτεί τετραγωνικό χρόνο, ο συνολικός χρόνοςεκτέλεσης είναι O(n3)

Page 17: αλγοριθμος ευκλειδη

Αλγόριθμος Ευκλείδη: χρόνοςεκτέλεσης

• Αρχικά: 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) βήματα