בגרות מדעי המחשב 899271, קיץ 2017 מועד א'
תאריך הבחינה: לא ידוע
טופס המבחן המלא להורדה — ומפתח התשובות עם פתרון מפורט לכל שאלה, אונליין. פתחו שאלה למטה: בשאלה סגורה בוחרים תשובה, בשאלה פתוחה נפתח הפתרון המלא (כניסה מהירה וחינם).
לתלמידי ותלמידות היחידות המתקדמות במדעי המחשב — כולל שלושת מסלולי הבחירה: אלגוריתמים, מודלים חישוביים ותכנות מונחה עצמים.
✓ פתרון מלא לכל שאלה · ✓ הסברים מלאים וחומרי לימוד · ✓ ליווי מורה AI · ✓ התחלה חינם
פתרון מפורט לכל שאלה — לא רק התשובה: הסבר שלב-אחר-שלב וניתוח הטעויות הנפוצות.
שאלות לדוגמה מהמבחן — פתרו עכשיו
בשאלה סגורה בוחרים תשובה; בשאלה פתוחה פותחים את הפתרון המלא (כניסה מהירה וחינם). אלו 3 מתוך 7 שאלות המבחן — את כולן תוכלו לפתור אונליין.
לפניך הגדרה של חמש פעולות הפועלות על מבנה נתונים כלשהו (שמות הפעולות אינם כתובים ב-Java או ב-C#): insert(x) — מכניסה איבר x שערכו נתון (שלם) למבנה. showMin() — מחזירה את הערך הנמוך ביותר במבנה, בלי לשנות את המבנה. getMax() — מחזירה את האיבר שערכו הגדול ביותר במבנה, ומוציאה אותו מן המבנה (אם יש יותר מאיבר אחד בעל אותו הערך המקסימלי, מוציאה ומחזירה את זה שמופיע ראשון מבין השווים). exists(x) — פעולה בוליאנית: true אם קיים במבנה איבר שערכו x, אחרת false. div7() — פעולה בוליאנית: true אם קיים במבנה איבר שערכו מתחלק ב-7 בלי שארית, אחרת false.
השאלון עצמו נותן דוגמה פתורה (לא לביצוע): מבנה נתונים לביצוע insert ו-showMin בסיבוכיות O(1) ו-exists ו-getMax בסיבוכיות O(n) — הפתרון המוצע שם הוא רשימה מקושרת דו-כיוונית lst מטיפוס שלם, עם מצביע נוסף min לאיבר המינימלי: insert מכניס לראש הרשימה ומעדכן את min אם צריך (O(1)); showMin מחזיר את הערך שמצביע עליו min (O(1)); exists ו-getMax עוברים על כל הרשימה (O(n)).
בשני הסעיפים הבאים (א-ב) יש להציע — לכל אחד בנפרד — מבנה נתונים מתאים לדרישת הסיבוכיות השונה הנתונה, להסביר כיצד ממומשת כל פעולה, ולנמק מדוע המימוש עומד בדרישת הסיבוכיות.
הדוגמה הפתורה שבשאלון: רשימה מקושרת דו-כיוונית + מצביע min
lst (doubly linked, unsorted): head <-> ... <-> tail
min -> pointer to the current minimum node
הצע מבנה נתונים המאפשר לבצע את הפעולות insert ו-showMin בסיבוכיות O(n), ואת הפעולות getMax ו-exists בסיבוכיות O(1). לכל פעולה הסבר כיצד היא ממומשת, ונמק מדוע המימוש עומד בדרישת הסיבוכיות.
הצע מבנה נתונים המאפשר לבצע את הפעולות insert ו-getMax בסיבוכיות O(n), ואת הפעולה div7 בסיבוכיות O(1). הסבר כיצד ממומשות הפעולות, ונמק מדוע המימוש עומד בדרישת הסיבוכיות.
עץ בינרי כללי (לא בהכרח עץ חיפוש ממוין) מיוצג בעזרת המחלקה BinNode<T> (value, left, right, get/set). רשימה מקושרת חד-כיוונית מיוצגת בעזרת המחלקה Node<T> (value, next, get/set) — שתיהן מוגדרות למטה. סעיף א עוסק בבדיקת קיום ערך בעץ בינרי כלשהו; סעיף ב עוסק בהשוואת שני עצים בינריים לא ריקים t1 ו-t2 ובבניית רשימה חדשה מהערכים שקיימים ב-t1 ואינם קיימים ב-t2, תוך שימוש בפעולה מסעיף א; סעיף ג עוסק בסיבוכיות הפעולה מסעיף ב. הפעולה הנתונה check(t1,t2) (הבנויה כבר עבורכם) נעזרת בפעולה נוספת בעלת שלושה פרמטרים, שאותה יש לממש.
public class BinNode<T> {
private T value;
private BinNode<T> left;
private BinNode<T> right;
public BinNode(T value) { this.value = value; this.left = null; this.right = null; }
public T getValue() { return value; }
public void setValue(T value) { this.value = value; }
public BinNode<T> getLeft() { return left; }
public void setLeft(BinNode<T> left) { this.left = left; }
public BinNode<T> getRight() { return right; }
public void setRight(BinNode<T> right) { this.right = right; }
}
public class Node<T> {
private T value;
private Node<T> next;
public Node(T value) { this.value = value; this.next = null; }
public T getValue() { return value; }
public void setValue(T value) { this.value = value; }
public Node<T> getNext() { return next; }
public void setNext(Node<T> next) { this.next = next; }
}
// הפעולה check(t1,t2) הבאה נתונה (אינה חלק מהמימוש):
public static Node<Integer> check(BinNode<Integer> t1, BinNode<Integer> t2) {
Node<Integer> first = new Node<Integer>(-1);
first = check(t1, t2, first);
return first.getNext();
}
ממש פעולה חיצונית exist ב-Java (או Exist ב-C#). הפעולה מקבלת עץ בינרי t וערך x, ומחזירה true אם x קיים בעץ, אחרת false.
public static boolean exist (BinNode<Integer> t, int x)
לפניך הפעולה check(t1, t2) (הפעולה מקבלת שני עצים בינריים לא ריקים t1 ו-t2, ומחזירה רשימה חדשה (Node<Integer>) המכילה את כל המספרים הנמצאים בעץ t1 ואינם נמצאים בעץ t2). הפעולה נעזרת בפעולה נוספת בעלת שלושה פרמטרים. ממש את הפעולה: public static Node<Integer> check(BinNode<Integer> t1, BinNode<Integer> t2, Node<Integer> list) (ב-C#: Check(BinNode<int> t1, BinNode<int> t2, Node<int> list)). אתה יכול להשתמש בפעולה שמימשת בסעיף א.
public static Node<Integer> check (BinNode<Integer> t1, BinNode<Integer> t2, Node<Integer> list)
מהי סיבוכיות זמן הריצה של הפעולה שמימשת בסעיף ב? נמק את תשובתך.
שאלה זו בשאלון המקורי כללה שני סעיפים א-ב שאין קשר ביניהם ("אין קשר בין הסעיפים"): סעיף א עוסק בגרף ובסריקות DFS/BFS (מובא כאן במלואו), וסעיף ב הוא טבלת שיטת ההובלה/סימפלקס (תחום חקר ביצועים) שאינו קיים בשאלוני 899371/899271 הנוכחיים ולכן לא נכלל.
הגרף G = (V, E) הוא גרף לא מכוון המיוצג על ידי רשימת הסמיכויות הבאה (נתונה כטקסט, לא כשרטוט — אין כאן סיכון קריאה של תרשים סרוק): a → b → c → d b → a → c c → a → b d → a → f → e e → d → f f → e → d
רשימת הסמיכויות של G כפי שנדפסה בשאלון
a: b, c, d
b: a, c
c: a, b
d: a, f, e
e: d, f
f: e, d
סרטט את הגרף G המיוצג על ידי רשימת הסמיכויות שלפניך.
האם הגרף הנתון הוא גרף קשיר? נמק.
הפעל אלגוריתם סריקה לעומק (DFS) על הגרף הנתון החל בקדקוד a. סרטט רק את העץ הפורש שמתקבל. התבסס על ההיצג הנתון על ידי רשימת הסמיכויות (סדר השכנים כפי שנדפס).
הפעל אלגוריתם סריקה לרוחב (BFS) על הגרף הנתון החל בקדקוד a. סרטט רק את העץ הפורש שמתקבל. התבסס על ההיצג הנתון על ידי רשימת הסמיכויות.
כל שאלות המבחן — 7 שאלות, כל אחת עם פתרון מלא
לפי סדר המבחן. לוחצים על שאלה ועוברים לעמוד שלה: השאלה המלאה, השרטוט, ופתרון מלא ומוסבר צעד אחרי צעד.
- שאלה 4
שאלה 4 — עיצוב מבנה נתונים לפי דרישות סיבוכיות
- שאלה 6
שאלה 6 — קיום ערך בעץ בינרי והשוואת שני עצים
- שאלה 10
שאלה 10 — ייצוג גרף ברשימת סמיכויות וסריקות DFS/BFS
- שאלה 11
שאלה 11 — אוטומטים סופיים: מונה זוגיות/מודולו, והימנעות מתת-מחרוזות אסורות
- שאלה 12
שאלה 12 — PDA ומכונת טיורינג עבור aⁿbᵐcⁿ⁺ᵐ
- שאלה 13
שאלה 13 — ממשקים מרובים, מימוש חובה, ותקינות המרות
- שאלה 14
שאלה 14 — המרות טיפוסים, שחזור היררכיית ירושה, גישה מוגנת, ושדה סטטי
פתרו את המבחן המלא — עם משוב על כל תשובה
כל שאלות המבחן, פתרון מפורט, משוב אישי ומעקב התקדמות. בדיוק מה שצריך כדי לעבור.
התחילו לתרגל — חינם ←