ערכתי לאחרונה בתאריך 07.05.10 בשעה 06:15 בברכה, Deuce
קודם כל אני אתוודה, כשרשמתי את התגובה בהתחלה חשבתי שאפשר להניח החזרת גודל הרשימה ב-O(1) שזאת הנחה סבירה בסה"כ. גודל הרשימה הכוונה מספר החוליות ברשימה שמתחילה ב-a1 וב-b1 (לא M ו-K לצורך העניין). עם קריאת התגובות שנרשמו פה, נראה היה שאי אפשר להניח זאת. שאלתי את Zippo והוא אמר לי שלא 
עכשיו אני כמוכם מנסה לפתור בעצמי.
אם נגיד ל-2 המצביעים פשוט לרוץ על כל האפשרויות:
א. מצביע 1 מתקדם 0 מקומות, מצביע 2 מתקדם מקום 1 ולהפך.
ב. מצביע 1 מתקדם 1 מקומות, מצביע 2 מתקדם מקום 0 ולהפל.
ג. מצביע 1 מתקדם 1 מקומות, מצביע 2 מתקדם 1 מקום.
ד. מצביע 1 מתקדם 2 מקומות, מצביע 2 מתקדם 0 מקום ולהפך.
וכו' ...
אפשר לרשום בזוגות סדורים:
(i,j) - Pointer 1 moves i'th steps, then Pointer 2 moves j'th steps and vice versa
לדאוג שההרצה תהיה מבוקרת ברמה של לא נרוץ למשל על הזוג (5,2) לפני שכיסינו את כל הזוגות בהם מופיעות רק הספרות 0-4.
אנחנו נגלה את התא כאשר נרוץ פשוט על הזוג (m,k). סיבוכיות זמן הריצה הי איפוא m^2*k^2 שזה לא להיט (הריבועים שם כי כל פעם אנחנו חוזרים עם המצביעים להתחלה).
(אני ברגע זה חושב בעצמי, לכן ההסברים מתגבשים בזה הרגע
)
נסמן d = max(m,k).
נניח אני מסתכל על איזשהו זוג (i,i) כש-i גדול מ-d. אני יודע שבודאות שניהם חצו את המכשול. אבל יש מישהו מהיר יותר, לכן בהכרח או ש-P1 יעקוף את P2 ואז בריצה השנייה (ש-P2 מתחיל) תהיה התנגשות. או להפך. אבל העיקר שהזוג הזה תופס.
כלומר יכולנו פשוט לרוץ על (i,i) כש-i הולך ועולה. בתפיסה הראשונה נדע גם מי מגיע מהר יותר לאיחוד (זה שתופס מן הסתם). נשים לב שהתפיסה הראשונה גם מבטאת בידיוק את max(m,k) שזה קצת מפתיע. למעשה היינו יכולים פשוט להגיד להם תרוצו כל פעם i צעדים כשפעם הראשון מתחיל, אחריו השני ואז להפך והתפיסה הראשונה בעצם תבטא את המקסימום, כי התפיסה הראשונה אומרת שהמצביע שמצביע על הרשימה הארוכה יותר סוף סוף נכנס לאיחוד ואז נתפס.
אז כמה זה עולה לנו עד פה? d^2
הבעייה שאנחנו לא יודעים מי המהיר יותר אז אנחנו כל פעם מחליפים את הריצה וזה מוסיף לנו ריבוע. אם למשל היינו רצים גם בקפיצות לוגירתמיות של 1,2,4,8 ועושים חיפוש בינארי על ה-d המיימלי אז זה היה עולה כבר dlog d, אבל זה עדיין לא ליניארי.
נו כל זה ב-6 בבוקר, אולי מספיק להיום? 
אני אפרסם את הפוסט ואקח כמה דקות מחשבה. אני מאמין שאני קרוב מאוד לסוף אבל אני עייף. לא הצלחתי לגבש את הפתרון הסופי לחלוטין, אני עייף גם. יש לכם הזדמנות לתת את הדחיפה האחרונה, אני חושב שזה כיוון טוב.
