לחץ ▶ Run כדי להדר ולהריץ את הקובץ. אם התוכנית תבקש קלט, תוכל להקליד אותו כאן למטה.
מבוא למדעי המחשב — מועד ב׳
ענו על כל השאלות. שמרו על חתימות הפונקציות הנתונות.
לכל קטע קוד בחרו את סיבוכיות הזמן והמקום ההדוקות ביותר.
void allocated(int n) {
if (n <= 1) return;
int *p = malloc(n * sizeof(int));
allocated(n / 2);
allocated(n / 2);
free(p);
}
void layered(int n) {
for (int i = 1; i < n; i *= 2)
for (int j = 0; j < n / i; j++)
for (int k = 0; k < i; k++)
putchar('.');
}
void square_growth(int n) {
for (int i = 2; i < n; i *= i)
putchar('.');
}
המערך עולה ממש ולאחר מכן יורד ממש, והשיא אינו בקצה. החזירו את אינדקס השיא היחיד.
דוגמה: עבור {1,3,7,9,6,2} מוחזר 3.
דרישות: זמן Θ(log n), מקום נוסף Θ(1).
באמצעות מערך ספירה בגודל 26, החזירו את האינדקס הראשון של תו שמופיע פעם אחת בדיוק, או -1 אם אין כזה. אין לשנות את המחרוזת.
דוגמה: עבור "swiss" מוחזר 1; עבור "aabb" מוחזר -1.
דרישות: זמן Θ(n), מקום נוסף Θ(1).
ספרו תתי־מערכים רציפים שהאיבר המקסימלי בהם שווה בדיוק ל־x.
דוגמה: עבור {2,5,3} ו־x=5 מוחזר 4.
אין לולאות. הפונקציה עצמה תרוץ רקורסיבית על נקודת ההתחלה; השתמשו בשתי פונקציות עזר רקורסיביות קטנות כמפורט בשאלה.
בשאלה 4 מותר להוסיף בדיוק את שתי פונקציות העזר הרקורסיביות הנדרשות.