בכל שלב, האלגוריתם יחלק את הרשימה שלו ל- 3 חלקים במקום 2: בערך שליש האיברים השמאליים, בערך
שליש האמצעיים, ובערך שליש הימניים. האלגוריתם יחליט עם איזה שליש יש להמשיך באמצעות בדיקת שני
הגבולות בין החלקים. "בערך" – מותר שהחלקים יהיו בגדלים ששונים לכל היותר ב- 1 זה מזה.
א. ממשו פונקציה בשם (ternary_search(key, lst המקבלת מספר key ורשימה ממוינת lst של מספרים,
ופועלת בשיטה הנ"ל להחזרת אינדקס בו נמצא key ב- lst, או None אם הוא לא נמצא. אם key נמצא
ביותר מאינדקס אחד, יוחזר אחד האינדקסים, שרירותית. אין צורך לבדוק תקינות הקלט. הפונקציה
לא מדפיסה דבר. לדוגמה:
>>> ternary_search(3,[1,2,3,4,5])
2
>>> ternary_search(1,[2,3,4,5])
>>>
הנחיה: על המימוש שלכם להיות איטרטיבי ולא רקורסיבי
לא מצליח לעשות את זה בלי רקורסיה. למישהו יש הצעה איך זה אמור להיות? אני לא מצליח להגדיר while לא אינסופי.
הקוד לא צריך להיות בשפה מיוחדת או משהו, אני כבר אתרגם אותו למה שאני צריך (אני מקווה שאצליח).
שליש האמצעיים, ובערך שליש הימניים. האלגוריתם יחליט עם איזה שליש יש להמשיך באמצעות בדיקת שני
הגבולות בין החלקים. "בערך" – מותר שהחלקים יהיו בגדלים ששונים לכל היותר ב- 1 זה מזה.
א. ממשו פונקציה בשם (ternary_search(key, lst המקבלת מספר key ורשימה ממוינת lst של מספרים,
ופועלת בשיטה הנ"ל להחזרת אינדקס בו נמצא key ב- lst, או None אם הוא לא נמצא. אם key נמצא
ביותר מאינדקס אחד, יוחזר אחד האינדקסים, שרירותית. אין צורך לבדוק תקינות הקלט. הפונקציה
לא מדפיסה דבר. לדוגמה:
>>> ternary_search(3,[1,2,3,4,5])
2
>>> ternary_search(1,[2,3,4,5])
>>>
הנחיה: על המימוש שלכם להיות איטרטיבי ולא רקורסיבי
לא מצליח לעשות את זה בלי רקורסיה. למישהו יש הצעה איך זה אמור להיות? אני לא מצליח להגדיר while לא אינסופי.
הקוד לא צריך להיות בשפה מיוחדת או משהו, אני כבר אתרגם אותו למה שאני צריך (אני מקווה שאצליח).