ערכתי לאחרונה בתאריך 18.02.04 בשעה 23:16 בברכה, Dudenland
אני לא בטוח שהפיתרון שאציע הוא היעיל ביותר, אך נראה מה אפשר לעשות...אלגוריתם מקטע-משותף-מקסימלי(L1,L2):
1. הצב max = 0.
2. הצב עוקב-ברשימה(ראש-רשימה(L1 ,(L1) ב-P1. //איבר ראשון ברשימה
3. כל עוד (P1 <> סוף-רשימה(L1)) בצע:
3.1. הצב עוקב-ברשימה(ראש-רשימה(L2 ,(L2) ב-P2. //איבר ראשון ברשימה
3.2. כל עוד (P2 <> סוף-רשימה(L2)) בצע:
3.2.1. הצב i = 1.
3.2.2. כל עוד (השוואת-רשימה(L1, L2, P1, P2, i)) //לפי הפונקציה הנתונה
3.2.2.1. הצב i = i+1.
3.2.3. אם (i-1 > max) הצב 1-max = i.
3.2.4. בצע: //לולאה שמקדמת את המצביע לאיבר שלא נבדק הבא
3.2.4.1. הצב עוקב-ברשימה(L2, P2) ב-P2. //האיבר הבא
3.2.4.2. הצב i = i - 1.
3.2.5. כל עוד (i > 1).
3.3. הצב עוקב-ברשימה(L1, P1) ב-P1. //האיבר הבא
4. החזר את max.
אגב, סיבוכיות זמן-הריצה של האלגוריתם לפי נתוני השאלה, הינו:
1. במקרה הגרוע: (O(N^3
2. במקרה הטוב: (O(N^2
תקנו אותי אם אני טועה (גם בקשר לאלגוריתם וגם בקשר לסיבוכיות).