אלגוריתם רו של פולרד ללוגריתם הבדיד – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
שורה 46:
\end{cases}</math>
 
הערכים של <math>a_i</math> ו-<math>b_i</math> מחושבים כך שעבור כל <math>i</math> מתקיים <math>x_i=\alpha^{a_i}\cdot\beta^{b_i}</math>. אם <math>x_i=x_j</math> כאשר <math>i\ne j</math> זה אומר שנמצאה "התנגשות". כדי למצוא התנגשות ביעילות האלגוריתם מנצל בטכניקהטכניקה המיוחסת ל[[רוברט פלויד]] (לפי [[דונלד קנות']]) שנקראת [[מציאת מחזוריות]] או "שיטת הצב והארנב" שהיא שיטה יעילה לאיתור מחזוריות של פונקציה איטרטיבית אקראית על עצמה מהסוג <math>f:X\rightarrow X</math>. מנסים באופן רקורסיבי לאתר את הנקודה בה הסדרה מתחילה לחזור על עצמה. מבצעים בכל איטרציה שתי הליכות, הליכה איטית והליכה מהירה. בהליכה איטית מחשבים מתוך הערכיחם מהאיטרציה הקודמת את השלשה החדשה (<math>x_i,a_i,b_i</math>) ובהליכה מהירה את <math>(x_{2i},a_{2i},b_{2i})</math> ומשווים בין <math>x_i</math> ל-<math>x_{2i}</math>, אם הם שווים נמצאה התנגשות. סיבוכיות הטכניקה הזו זהה לשיטה הישירה המסתמכת על חיפוש בטבלאות ומבזבזת זיכרון רב. אם נמצאה התאמה המשמעות היא ש-<math>\alpha^{a_i}\beta^{b_i}=\alpha^{a_{2i}}\beta^{b_{2i}}</math> ולכן <math>\beta^{b_i-b_{2i}}=\alpha^{a_{2i}-a_i}</math>. אם לוקחים לוגריתם בבסיס <math>\alpha</math> של שני האגפים במשוואה האחרונה מתקבל
:<math>(b_i-b_{2i})\cdot\log_{\alpha}\beta\equiv(a_{2i}-a_i)\text{ (mod }n)</math>.
בהנחה ש-<math>b_i\not\equiv b_{2i}\text{ (mod }n)</math>, שבכל מקרה עלול לקרות בהסתברות מאוד זניחה. מתוך המשוואה האחרונה אפשר לחלץ את <math>\log_{\alpha}\beta</math> על ידי הכפלה ב[[הופכי כפלי מודולרי|הופכי הכפלי]] של <math>(b_i-b_{2i})</math>.