Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

361 visualizaciones

Publicado el

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

Publicado en: Educación
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

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

  1. 1. ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ (ΑΛΓΟΡΙΘΜΟΙ, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani, σελ. 15-39)
  2. 2. Εύρεση Μέγιστου Κοινού Διαιρέτη Το πρόβλημα: • Δεδομένα: δύο ακέραιοι a και b • Ζητούμενο: ο μέγιστος ακέραιος που διαιρεί και τους δύο δοσμένους αριθμούς, γνωστός ως Μέγιστος Κοινός Διαιρέτης τους (Greatest Common Divisor – GCD)
  3. 3. Εύρεση Μέγιστου Κοινού Διαιρέτη • Έστω a=27 και b=9 • Οι διαιρέτες του 27 είναι: 1,3,9,27 • Οι διαιρέτες του 9 είναι: 1,3,9 • Ο μεγαλύτερος διαιρέτης κοινός και στις 2 λίστες είναι ο 9 • Επομένως, ο μέγιστος κοινός διαιρέτης (GCD) των αριθμών 27 και 9 είναι ο 9
  4. 4. Εύρεση Μέγιστου Κοινού Διαιρέτη • Ένας συστηματικός τρόπος για να υπολογίζουμε το μέγιστο κοινό διαιρέτη δύο αριθμών είναι – να αναλύσουμε τους δύο αριθμούς σε γινόμενο πρώτων παραγόντων και – να πολλαπλασιάσουμε τους κοινούς τους παράγοντες ώστε να πάρουμε το μέγιστο κοινό διαιρέτη τους • Έστω a=1035 και b=759 – 1035=32*5*23 – 759=3*11*23 – Μέγιστος κοινός διαιρέτης των 1035 και 759 είναι ο 3*23=69
  5. 5. Εύρεση Μέγιστου Κοινού Διαιρέτη • Ένας συστηματικός τρόπος για να υπολογίζουμε το μέγιστο κοινό διαιρέτη δύο αριθμών είναι – να αναλύσουμε τους δύο αριθμούς σε γινόμενο πρώτων παραγόντων και – να πολλαπλασιάσουμε τους κοινούς τους παράγοντες ώστε να πάρουμε το μέγιστο κοινό διαιρέτη τους • Έστω a=1035 και b=759 – 1035=32*5*23 – 759=3*11*23 – Μέγιστος κοινός διαιρέτης των 1035 και 759 είναι ο 3*23=69 ΔΕΝ γνωρίζουμε τρόπο για να το κάνουμε αποδοτικά!!!!!!
  6. 6. Εύρεση Μέγιστου Κοινού Διαιρέτη • Αποδοτικότερος τρόπος;;;;;;;; • ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ – Ανακαλύφθηκε από τον Έλληνα μαθηματικό περισσότερο από 2000 χρόνια πριν…
  7. 7. Εύρεση Μέγιστου Κοινού Διαιρέτη Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ a mod b σημαίνει: το υπόλοιπο που αφήνει η διαίρεση του a με το b Π.χ., 5 mod 3=2, 6 mod 3=0 κ.ο.κ.
  8. 8. Εύρεση Μέγιστου Κοινού Διαιρέτη Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ Παραδείγματα εκτέλεσης του αλγορίθμου: GCD(18,9)=GCD(9,0) ⇒ GCD(18,9)=9 GCD(37,11)=GCD(11,4) ⇒ GCD(4,3)=GCD(3,1)=GCD(1,0) ⇒ GCD(37,11)=1
  9. 9. Εύρεση Μέγιστου Κοινού Διαιρέτη Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ Παραδείγματα εκτέλεσης του αλγορίθμου: GCD(18,9)=GCD(9,0) ⇒ GCD(18,9)=9 GCD(37,11)=GCD(11,4) ⇒ GCD(4,3)=GCD(3,1)=GCD(1,0) ⇒ GCD(37,11)=1 Αριθμοί όπως οι 37 και 11, που έχουν ΜΚΔ το 1 λέγονται σχετικά πρώτοι μεταξύ τους.
  10. 10. Εύρεση Μέγιστου Κοινού Διαιρέτη Ο ΑΛΓΟΡΙΘΜΟΣ ΤΟΥ ΕΥΚΛΕΙΔΗ ΓΙΑ ΤΗΝ ΕΥΡΕΣΗ ΤΟΥ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ GCD(18,9)=GCD(9,0) ⇒ GCD(18,9)=9 GCD(37,11)=GCD(11,4) ⇒ GCD(4,3)=GCD(3,1)=GCD(1,0) ⇒ GCD(37,11)=1 *
  11. 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)
  12. 12. Αλγόριθμος Ευκλείδη: χρόνος εκτέλεσης • Για να υπολογίσουμε το χρόνο εκτέλεσης του αλγορίθμου, πρέπει να δούμε πόσο γρήγορα μειώνονται οι αριθμοί (a,b) σε κάθε αναδρομική κλήση • Σε κάθε γύρο, οι αριθμοί (a,b) γίνονται (b,a mod b): η σειρά τους αλλάζει, και ο μεγαλύτερος από αυτούς, δηλ. ο a, μειώνεται σε a mod b • Αυτή είναι μια σημαντική μείωση
  13. 13. Αλγόριθμος Ευκλείδη: χρόνος εκτέλεσης Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο; • Αν a≥b τότε a mod b<a/2 Απόδειξη • Ισχύει είτε b≤a/2 είτε b>a/2 a b a b
  14. 14. Αλγόριθμος Ευκλείδη: χρόνος εκτέλεσης Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο; • Αν a≥b τότε a mod b<a/2 Απόδειξη • Ισχύει είτε b≤a/2 είτε b>a/2 – Αν b≤a/2 τότε a mod b < b ≤ a/2 a b
  15. 15. Αλγόριθμος Ευκλείδη: χρόνος εκτέλεσης Πόσο μικρότεροι γίνονται οι αριθμοί σε κάθε γύρο; • Αν a≥b τότε a mod b<a/2 Απόδειξη • Ισχύει είτε b≤a/2 είτε b>a/2 – Αν b>a/2 τότε a mod b=α-b<a/2 a b
  16. 16. Αλγόριθμος Ευκλείδη: χρόνος εκτέλεσης • Αυτό σημαίνει ότι μετά από δύο διαδοχικούς γύρους, και οι δύο αριθμοί, a και b, είναι τουλάχιστον μισοί σε τιμή – δηλ., το μήκος του καθενός μειώνεται τουλάχιστον κατά 1 bit • Αν αρχικά είναι n-bit ακέραιοι, τότε η βασική περίπτωση επιτυγχάνεται μετά από 2n αναδρομικές κλήσεις • Και επειδή κάθε κλήση απαιτεί μία διαίρεση που απαιτεί τετραγωνικό χρόνο, ο συνολικός χρόνος εκτέλεσης είναι O(n3)
  17. 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) βήματα

×