שאלת מבחן במבוא למדעי המחשב - האוניברסיטה הפתוחה 2012 - מחרוזות
נתונה מחרוזת המורכבת מהתווים 'a', 'b' ו-'c' בלבד. נתון כי התווים במחרוזת ממוינים לפי סדר האלף-בית. כמו כן במחרוזת ישנם יותר תווי 'c' (ממש) מאשר תווי 'a'. שימו לב כי בפרט, במחרוזת יש לפחות תו 'c' אחד.
סעיף א (12 נקודות):
כתבו שיטה סטטית יעילה ככל הניתן המקבלת כפרמטר מחרוזת תווים ממוינת כמתואר לעיל. השיטה צריכה להחזיר אינדקס של תו כלשהו שאינו 'a'. (שימו לב שבהכרח יש כזה כיוון שיש לפחות תו 'c' אחד).
חתימת השיטה:
לדוגמה: עבור המחרוזת "aaabbcccc" יוחזר ערך כלשהו בין 3 ל-8. (האינדקס של אחד מהתווים 'b' או 'c'. זכרו כי האינדקס של התו הראשון במחרוזת הוא 0).
הגבלות: בכתיבת השיטה מותר להשתמש אך ורק בשיטת
סעיף א (12 נקודות):
כתבו שיטה סטטית יעילה ככל הניתן המקבלת כפרמטר מחרוזת תווים ממוינת כמתואר לעיל. השיטה צריכה להחזיר אינדקס של תו כלשהו שאינו 'a'. (שימו לב שבהכרח יש כזה כיוון שיש לפחות תו 'c' אחד).
חתימת השיטה:
לדוגמה: עבור המחרוזת "aaabbcccc" יוחזר ערך כלשהו בין 3 ל-8. (האינדקס של אחד מהתווים 'b' או 'c'. זכרו כי האינדקס של התו הראשון במחרוזת הוא 0).
הגבלות: בכתיבת השיטה מותר להשתמש אך ורק בשיטת
charAt שבמחלקה String. בפרט אסור להשתמש בשיטה indexOf ולא בשיטה length.העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד ב52012סמסטר א
★★★★★
מחרוזותחיפוש בינארירקורסיהסיבוכיות זמן
מכיוון שיש יותר תווי 'c' מתווי 'a', האינדקס האמצעי של המחרוזת בהכרח מכיל תו שאינו 'a'. השתמשו בחיפוש בינארי על מחרוזת ממוינת.
מכיוון שהמחרוזת ממוינת ויש יותר תווי 'c' מתווי 'a', האמצע של המחרוזת חייב להכיל תו שאינו 'a'. נשתמש בגישת חיפוש בינארי: נבדוק את התו באמצע - אם הוא אינו 'a' סיימנו, אחרת נחפש בחצי הימני.
אך יש בעיה: אין לנו
סיבוכיות זמן: כאשר אורך המחרוזת.
סיבוכיות מקום: .
אך יש בעיה: אין לנו
length. לכן תחילה נמצא את אורך המחרוזת על ידי ניסיון לגשת לתווים ב-הכפלת אינדקס עד שנקבל חריגה, ואז חיפוש בינארי על האורך.סיבוכיות זמן: כאשר אורך המחרוזת.
סיבוכיות מקום: .