Der euklidische Algorithmus ist ein Algorithmus aus dem mathematischen Teilgebiet der Zahlentheorie. Mit ihm lässt sich der größte gemeinsame Teiler zweier natürlicher Zahlen berechnen. Das Verfahren ist nach dem griechischen Mathematiker Euklid benannt, der es in seinem Werk „Die Elemente“ beschrieben hat.
Der größte gemeinsame Teiler zweier Zahlen kann auch aus ihren Primfaktorzerlegungen ermittelt werden. Ist aber von keiner der beiden Zahlen die Primfaktorzerlegung bekannt, so ist der euklidische Algorithmus das schnellste Verfahren zur Berechnung des größten gemeinsamen Teilers.
Der euklidische Algorithmus lässt sich nicht nur auf natürliche Zahlen anwenden. Vielmehr kann damit der größte gemeinsame Teiler von zwei Elementen eines jeden euklidischen Rings berechnet werden. Dazu zählen beispielsweise Polynome über einem Körper.
Der euklidische Algorithmus ist der älteste bekannte nicht-triviale Algorithmus. Das Verfahren wurde von Euklid um 300 v. Chr. in seinem Werk „Die Elemente“ (Buch VII, Proposition 1 und 2) beschrieben. Er nannte es antepheiresis (Wechselwegnahme) und formulierte es als geometrisches Problem: Er suchte ein gemeinsames „Maß“ zweier Strecken. Das Verfahren wurde jedoch wahrscheinlich nicht von Euklid erfunden, sondern war schon bis zu 200 Jahre früher bekannt. Es war mit annähernder Sicherheit Eudoxos von Knidos (um 375 v. Chr.) bekannt und auch Aristoteles (um 330 v. Chr.) wies auf dieses Verfahren in seinem Werk „Topik“ (158b, 29-35) hin.Donald E. Knuth: The Art of Computer Programming. Volume 2: Seminumerical Algorithms. 3. Auflage. Addison-Wesley Professional, 1997, ISBN 0-201-89684-2, S. 334–337
Das Prinzip des euklidischen Algorithmus wird auch gegenseitige Wechselwegnahme genannt.
Wie aus dem obigen Zitat ersichtlich formulierte Euklid das Problem seinerzeit geometrisch. Er suchte nach einem gemeinsamen „Maß“ für die Längen zweier Linien. Euklid löste das Problem, indem er wiederholt die kleinere der beiden Längen von der größeren abzog.
Ist die Differenz von und sehr groß, sind unter Umständen sehr viele Subtraktionsschritte notwendig. Heutzutage wird in der Regel der weiter unten beschriebene Divisions-Algorithmus verwendet, bei dem die Schritte 2 und 3 dadurch ersetzt werden, dass man, an Stelle der Differenz von und , für den Rest bei der Division von durch nimmt. Ein weiterer Vorteil dieser Variante ist, dass man sie auf beliebige euklidische Ringe (zum Beispiel Polynomringe, siehe Ringtheorie) übertragen kann, in denen der klassische Algorithmus nicht funktioniert.
Der klassische Algorithmus hier in Pseudocode dargestellt:
EUCLID_OLD(a,b)
1 solange b ≠ 0
2 wenn a > b
3 dann a a - b
4 sonst b b - a
5 return a
Dieser Algorithmus kann auch in einer rekursiven Version angegeben werden:
EUCLID_OLD_RECURSIVE(a,b)
1 wenn b = 0
2 dann return a
3 sonst wenn a > b
4 dann return EUCLID_OLD_RECURSIVE(a - b, b)
5 sonst return EUCLID_OLD_RECURSIVE(a, b - a)
Heutzutage ersetzt man die im klassischen Algorithmus auftretenden wiederholten Subtraktionen eines Wertes jeweils durch eine einzige Division mit Rest. Der moderne euklidische Algorithmus führt nun in jedem Schritt solch eine Division mit Rest aus. Er beginnt mit den beiden Zahlen und deren größter gemeinsamer Teiler bestimmt werden soll.
Da sich die Zahlen in jedem Schritt mindestens halbieren, ist das Verfahren auch bei großen Zahlen extrem schnell.
Der größte gemeinsame Teiler von 1071 und 1029 wird mit dem Euklidischen Algorithmus wie folgt berechnet:
Im Folgenden wird der moderne Euklidische Algorithmus sowohl in einer rekursiven, als auch einer iterativen Variante beschrieben. Dabei sind und jeweils die beiden Zahlen deren größter gemeinsamer Teiler berechnet werden soll.
EUCLID(a,b)
1 wenn b = 0
2 dann return a
3 sonst return EUCLID(b, a mod b)
EUCLID(a,b)
1 solange b ≠ 0
2 h a mod b
3 a b
4 b h
5 return a
Der euklidische Algorithmus beruht auf folgenden Eigenschaften des größten gemeinsamen Teilers.
Mit dem euklidischen Algorithmus kann man den ggT mit verhältnismäßig geringem Aufwand (im Vergleich zur Berechnung der Primfaktorzerlegung der Zahlen a und b) berechnen. Bei der Laufzeitanalyse stellt sich interessanterweise heraus, dass der schlimmste Eingabefall zwei aufeinander folgende Fibonacci-Zahlen sind. Bei aufeinander folgenden Fibonacci-Zahlen ergibt sich als Rest immer die nächst kleinere Fibonacci-Zahl. Die Anzahl der benötigten Divisionen beträgt im schlimmsten Fall Θ(log(ab)), wobei log(ab) proportional zur Anzahl der Ziffern in der Eingabe ist (siehe Landau-Symbole). Da die für die Division zweier Zahlen benötigte Zeit wiederum von der Anzahl der Ziffern der Zahlen abhängt, ergibt sich eine tatsächliche Laufzeit von O(log(ab)²).
| 1071 | = 1 | × 1029 | + 42 |
| 1029 | = 24 | × 42 | + 21 |
| 42 | = 2 | × 21 | + 0 |
Dieses Verfahren lässt sich auch für jede beliebige reelle Zahl anwenden. Ist nicht rational, so endet der Algorithmus einfach nie. Die so gewonnene Folge an Quotienten stellt dann die unendliche Kettenbruchzerlegung von dar.
Polynome in einer Variable über einem Körper bilden einen euklidischen Ring. Die Polynomdivision ist für diese Polynome also eine Division mit Rest und der euklidische Algorithmus kann genauso wie bei den ganzen Zahlen durchgeführt werden. Die Berechnung des größten gemeinsamen Teilers der Polynome und gestaltet sich beispielweise folgendermaßen:
Wir halten einen faktoriellen Ring fest und betrachten Polynome aus dem Polynomring
In
Von Josef Stein stammt der nach ihm benannte Steinsche Algorithmus bei dem auf die aufwändigen Divisionen verzichtet werden kann. Lediglich auf einem Rechner leicht durchzuführende Divisionen durch Zwei sind noch notwendig. Deshalb wird dieser Algorithmus auch Binärer Euklidischer Algorithmus genannt.
Merkt man sich die Quotienten bei der Berechnung, so lässt sich damit eine Darstellung
Eine andere Erweiterung ist der Algorithmus, der hinter dem Quadratischen Reziprozitätsgesetz steckt. Damit lässt sich das Jacobi-Symbol effizient berechnen.
خوارزمية إقليدس | Алгоритъм на Евклид | Algorisme d'Euclides | Euklidův algoritmus | Euclidean algorithm | Algoritmo de Euclides | Eukleideen algoritmi | Algorithme d'Euclide | Euklidészi algoritmus | Algoritma Euklidean | Algoritmo di Euclide | ユークリッドの互除法 | 유클리드 호제법 | Euklido algoritmas | Algoritme van Euclides | Algorytm Euklidesa | Algoritmo de Euclides | Алгоритм Евклида | Evklidov algoritem | Euklides algoritm | Giải thuật Euclid | 輾轉相除法
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Euklidischer Algorithmus".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world