אלגוריתם אוקלידס

אלגוריתם אוקלידסאנגלית: Euclidean algorithm או Euclid's algorithm) הוא אלגוריתם אריתמטי המאפשר למצוא באופן יעיל, בהינתן שני מספרים טבעיים, את המחלק המשותף המקסימלי (GCD) שלהם.

התיעוד הקדום ביותר של האלגוריתם הוא בספר יסודות של אוקלידס, בסביבות שנת 300 לפני הספירה. זהו אחד האלגוריתמים העתיקים ביותר הנמצאים בשימוש היום.

האלגוריתם הוא אחד מהכלים המרכזיים בתורת המספרים ויש לו שימושים רבים, לדוגמה בצופן RSA.

רקע

המחלק המשותף המקסימלי של מספרים, המסומן או בקיצור , היא פעולה המקבלת שני מספרים טבעיים, ומחזירה את המספר הגדול ביותר שמחלק את שניהם.

לדוגמה, המחלק המשותף המקסימלי של 36 ו-24 הוא 12, מאחר שהמספר מחלק את שניהם ואין מספר גדול יותר בעל תכונה זאת.

דרך אפשרית למציאת המחלק המשותף המקסימלי היא פירוק שני המספרים לגורמים ראשוניים, והכפלת הגורמים המשותפים. בדוגמה הנ"ל, הפירוק לראשוניים הוא

עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle \begin{align}36&=2^2\cdot3^2\\24&=2^3\cdot3\end{align}}

הגורמים המשותפים הם עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle 2^{2},3} ומכפלתם היא 12. דרך זו היא אינטואיטיבית, אך אינה שימושית עבור מספרים גדולים, כי פירוק לגורמים הוא פעולה מורכבת ואין שיטה פשוטה לחישובו.

אלגוריתם אוקלידס מאפשר את מציאת המחלק המשותף המקסימלי ללא פירוק לגורמים, בדרך פשוטה יחסית. למעשה, שיטות מתקדמות לפירוק לגורמים (למשל אלגוריתם נפת שדה מספרים) משתמשות באלגוריתם אוקלידס.

דרך פעולת האלגוריתם

האלגוריתם מבוסס על העיקרון הבא: הוספת כפולה של אחד המספרים למספר השני, אינה משנה את המחלק המשותף הגדול ביותר.

בניסוח מתמטי, אם עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle b,c,q} מספרים טבעיים אז מתקיים

עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle (b,c)=(b,c+qb)}

בתכונה זו ניתן להשתמש בכיוון ההפוך – במקום להגדיל את אחד המספרים, מקטינים אותו: לכל זוג מספרים עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle a,b} כאשר , ניתן לחשב את השארית מחלוקת ב־עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b} , כך שמתקיים

עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle a=qb+c,b>c}

מכאן מתקבל השוויון , שבו הוחלף המספר הגדול במספר קטן יותר משני המספרים המקוריים, בלי לשנות את המחלק המשותף. אפשר להמשיך בתהליך שוב ושוב עם מספרים קטנים יותר ויותר, עד שמגיעים לזוג שאחד המספרים בו הוא 0; עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle (a,0)=a} , ולפיכך נמצא המחלק המשותף הגדול ביותר.

באופן רקורסיבי ניתן להגדיר את האלגוריתם בצורה הבאה: לחישוב כאשר

  1. אם עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b=0} התוצאה היא .
  2. אחרת, חלק את ב-עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b} ומצא את השארית ; התוצאה היא (שאותה יש לחשב בעזרת אותו אלגוריתם עצמו).

באופן כללי, ניתן להשתמש באלגוריתם בכל חוג אוקלידי. כך לדוגמה ניתן להשתמש באלגוריתם כדי למצוא את המחלק המשותף המקסימלי של שני פולינומים מעל שדה.

הוכחה

ראשית יש להוכיח את השוויון עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle (b,c)=(b,c+qb)} .

  • נניח כי מחלק את עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b,c} . לכן קיימים עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle m,n} טבעיים עבורם עיבוד הנוסחה נכשל (שגיאת המרה. השרת ("https://en.wikipedia.org/api/rest_") השיב: "Cannot get mml. Server problem."): {\displaystyle b=mg,c=ng} . מכאן
כלומר מחלק את עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle qb+c} , ומכאן שהוא מחלק משותף של עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b,qb+c} .
  • בכיוון ההפוך, נניח כי עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle h} מחלק את עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b,qb+c} . לכן קיימים עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle m,n} טבעיים עבורם עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b=mh,qb+c=nh} . מכאן
עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle c=(c+qb)-qb=nh-qmh=(n-qm)h}
כלומר עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle h} מחלק את , ומכאן שהוא מחלק משותף של עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b,c} .

קיבלנו שמספר הוא מחלק משותף של עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b,qb+c} אם ורק אם הוא מחלק משותף של עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle b,c} . לכן קבוצת המחלקים המשותפים של הזוגות זהה, ובפרט האיבר המקסימלי שלהם זהה. מכאן עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle (b,qb+c)=(b,c)} .

דוגמה

נחשב את המחלק המשותף המקסימלי של 1071 ו-462, או (1071,462):

  • 462 נכנס ב-1071 פעמיים, והשארית היא 147. לפיכך עלינו למצוא את (462,147).
  • 147 נכנס ב-462 שלוש פעמים, והשארית היא 21. לפיכך עלינו למצוא את (147,21).
  • 21 נכנס ב-147 7 פעמים בדיוק, כלומר בשארית 0. לפיכך עלינו למצוא את (21,0).
  • מאחר שהמספר הקטן הוא 0, התשובה היא 21, וזו גם התשובה לשאלה המקורית.

לפתרון ניתן לתת משמעות גאומטרית כמודגם באיור: 21 הוא אורך הצלע של האריח הריבועי הגדול ביותר שמאפשר לרצף במדויק את המלבן שצלעותיו הן 1071 ו-462.

דוגמה למימוש האלגוריתם בצורה רקורסיבית בקוד JavaScript

function gcd(a, b)
{
	if (b == 0)
    {
	    return a;
    }
	return gcd(b, a % b);
}

יעילות

מבחינת סיבוכיות זמן, האלגוריתם יעיל. מספר הפעולות הנדרשות לביצוע אינו עולה על (כאשר יחס הזהב). על כן הסיבוכיות שלו היא לוגריתמית. ניתן להגיד שמספר הפעולות אינו עולה על פי-5 ממספר הספרות.

המקרה הגרוע ביותר (worst case) הוא כאשר מדובר בשני מספרי פיבונאצ'י עוקבים; זאת, כיוון שככל שהמנה המתקבלת בפעולות החילוק קטנה יותר, המספר קָטֵן פחות, ויש צורך ביותר פעולות. במספרי פיבונאצ'י כל המנות הן 1, ועל כן התהליך הוא הארוך ביותר. תכונה זו נתגלתה על ידי גבריאל לאמה.

אלגוריתם אוקלידס המורחב

אחת התכונות החשובות של המחלק המשותף המקסימלי היא שניתן להציג אותו בצורה הבאה: כאשר עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle m,n} שלמים.

ניתן לחשב את עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle m,n} בעזרת אלגוריתם אוקלידס בעזרת התכונה שאם כל פעם השתמשנו ב-עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle a=c+qb} , אז .

לפיכך, אם אנחנו יודעים בשלב מסוים איך להציג את שני המספרים עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle a,b} בצורה עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle mA+nB} (ההתחלה פשוטה: עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle n=0,m=1} או להפך), ניתן להציב בביטוי ולהתקדם בשלבי האלגוריתם עד להצגה הרצויה.

לדוגמה, נמצא בדוגמה לעיל את ההצגה של 10 כ-עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle 100n+230m}  :

לפיכך: עיבוד הנוסחה נכשל (MathML עם גיבוי SVG או PNG (מומלץ לדפדפנים מודרניים ולכלי נגישות): תגובה בלתי־תקינה ("Math extension cannot connect to Restbase.") מהשרת "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle n=7,m=-3} .

מידת סיבוכיות האלגוריתם המורחב היא מאותו סדר גודל של הרגיל, מאחר שאין צורך לבצע איטרציות נוספות אלא רק חישובים בסיסיים.

הכללות

פרק זה לוקה בחסר. אנא תרמו למכלול והשלימו אותו.

אף שאלגוריתם אוקלידס נועד למציאת ה-GCD של שני מספרים שלמים, ניתן להכלילו למספרים ממשיים, ואובייקטים מתמטיים אחרים כגון פולינומים, שלמים ריבועיים (quadratic integers) וקווטרניון הורוויץ (Hurwitz quaternion). במקרה האחרון, אלגוריתם אוקלידס משתמש להדגים את החשיבות הקריטית של מחלקים ייחודיים כלומר שמספרים אלו ניתנים לחלוקה למספרים שאינם ניתנים לחלוקה בעצמם (irreducible element), כמו מספרים ראשוניים. פקטוריזציה ייחודנית זו הכרחית להוכחות רבות בתורת המספרים.

ראו גם

קישורים חיצוניים

הערך באדיבות ויקיפדיה העברית, קרדיט,
רישיון cc-by-sa 3.0
This article is issued from Hamichlol. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.