חומרי לימוד - מדעי המחשב

‫י"ט‪/‬אייר‪/‬תשע"ה‬
‫עץ בינארי של מחסניות סריקה ‪ -‬שאלה מבגרות תשע''ב‬
‫ב‪ .‬מהי סיבוכיות זמן הריצה של הפעולה שכתבת?‬
‫הנח כי כל פעולות הממשק הבסיסיות של עץ בינארי הן ב‪O(1) -‬‬
‫‪1‬‬
‫עץ בינארי של מחסניות סריקה ‪ -‬בגרות תשע''ב‬
‫הפתרון – פעולת עזר לביצוע החישוב עבור מחסנית בודדת‬
‫סכום שלושת הערכים העליונים במחסנית‬
‫)‪public static int MaxTop3Stack(Stack<int> s‬‬
‫{‬
‫‪//‬מחזירה את סכום שלושת הערכים העליונים במחסנית אם קיימים‪ ,‬אם יש פחות משלושה‬
‫תחזיר הסכום של כולם‪ ,‬אם המחסנית ריקה תחזיר ‪ .0‬הנחה ‪ -‬המחסנית אותחלה‬
‫;‪int sum = 0, count = 0‬‬
‫)‪while (!s.IsEmpty() && count < 3‬‬
‫{‬
‫;)(‪sum += s.Top‬‬
‫;‪count++‬‬
‫;)(‪s.Pop‬‬
‫}‬
‫;‪return sum‬‬
‫}‬
‫עץ בינארי של מחסניות סריקה ‪ -‬בגרות תשע''ב‬
‫‪2‬‬
‫‪1‬‬
‫י"ט‪/‬אייר‪/‬תשע"ה‬
‫הפתרון – הפעולה העיקרית ‪ -‬לא מותאמת לדרישות השאלה‬
‫)‪public static void Tree_MaxTop3Stack(BinTreeNode<Stack<int>> t, Stack<int> s_new‬‬
‫{‬
‫‪//‬הפעולה מקבלת עץ בינארי של מחסניות מספרים שלמים וכן כפרמטר מחסנית של מספרים‪.‬‬
‫‪//‬הפעולה מחזירה במחסנית הפרמטר‪ ,‬מתוך העץ לפי סדר סריקה תוכית‪ ,‬את סכום שלושת‬
‫הערכים העליונים בכל מחסנית (אם יש פחות מ‪ ,3-‬מה שיש)‪.‬‬
‫‪//‬הנחות ‪ -‬העץ אותחל‪ ,‬המחסנית אותחלה ובקריאה ראשונה המחסנית ריקה‬
‫;‪Stack<int> s‬‬
‫)‪if (t != null‬‬
‫{‬
‫;)‪Tree_MaxTop3Stack(t.GetLeft(), s_new‬‬
‫;)(‪s = t.GetInfo‬‬
‫;))‪s_new.Push(MaxTop3Stack(s‬‬
‫;)‪Tree_MaxTop3Stack(t.GetRight(), s_new‬‬
‫}‬
‫}‬
‫‪3‬‬
‫עץ בינארי של מחסניות סריקה ‪ -‬בגרות תשע''ב‬
‫הפתרון – הפעולה העיקרית ‪ -‬לפי דרישות השאלה‬
‫‪‬‬
‫הפעולה רק מפעילה את הפעולה הקודמת שהיא למעשה מבצעת הנדרש בשאלה‪.‬‬
‫‪‬‬
‫בפעולה זאת מחזירים מחסנית ומקבלים רק עץ ‪ -‬כפי שמתואר בשאלה‪.‬‬
‫‪‬‬
‫יש כאן שימוש בהעמסה (שתי פעולות עם אותו שם‪ ,‬אבל‪ ,‬מקבלות סוגי פרמטרים שונים)‬
‫)‪public static Stack<int> Tree_MaxTop3Stack(BinTreeNode<Stack<int>> t‬‬
‫{‬
‫‪//‬הפעולה מקבלת עץ בינארי של מחסניות מספרים שלמים וכן כפרמטר מחסנית של מספרים‪.‬‬
‫‪//‬הפעולה מחזירה במחסנית הפרמטר‪ ,‬מתוך העץ לפי סדר סריקה תוכית‪ ,‬את סכום שלושת הערכים‬
‫העליונים בכל מחסנית (אם יש פחות מ‪ ,3-‬מה שיש)‪.‬‬
‫‪//‬הנחות ‪ -‬העץ אותחל‬
‫;)(>‪Stack<int> s_new = new Stack<int‬‬
‫;)‪Tree_MaxTop3Stack(t, s_new‬‬
‫;‪return s_new‬‬
‫}‬
‫עץ בינארי של מחסניות סריקה ‪ -‬בגרות תשע''ב‬
‫‪4‬‬
‫‪2‬‬
‫י"ט‪/‬אייר‪/‬תשע"ה‬
‫סיבוכיות זמן הריצה של הפעולה‬
‫ב‪ .‬מהי סיבוכיות זמן הריצה של הפעולה?‬
‫תשובה‬
‫סיבוכיות זמן הריצה של הפעולה ‪ MaxTop3Stack‬היא )‪ ,O(1‬שכן ללא תלות בגודל‬
‫המחסנית‪ ,‬היא עוברת מקסימום על ‪ 3‬ערכים בה‪ .‬הפעולה נעזרת בפעולות הממשק של‬
‫מחסנית שכולן ב‪.O(1)-‬‬
‫הפעולה ‪ - Tree_MaxTop3Stack‬המקבלת גם מחסנית‪ ,‬היא בסיבוכיות זמן ריצה של‬
‫)‪ ,O(n‬כיוון שעוברים בדיוק פעם אחת באמצעות הרקורסיה‪ ,‬במקרה הגרוע ביותר‪ ,‬על כל‬
‫אחד מ‪ n-‬הצמתים בעץ וכל הפעולות שהשתמשנו בהם הם פעולות ממשק בסיסיות של עץ‬
‫שהם ב‪ O(1)-‬או פעולת העזר ‪ MaxTop3Stack‬שגם היא ב‪ O(1)-‬כיוון שהיא בעצמה כוללת‬
‫רק פעולות בסיסיות של ממשק‪.‬‬
‫הפעולה ‪ - Tree_MaxTop3Stack‬המקבלת רק עץ‪ ,‬היא בסיבוכיות זמן ריצה של )‪,O(n‬‬
‫שכן היא מפעילה בדיוק פעם אחת את הפעולה ‪ - Tree_MaxTop3Stack‬המקבלת גם‬
‫מחסנית שהיא בסיבוכיות זמן ריצה של )‪( O(n‬וגם מפעילה פעולת ממשק של מחסנית שהיא‬
‫ב‪.)O(1)-‬‬
‫עץ בינארי של מחסניות סריקה ‪ -‬בגרות תשע''ב‬
‫‪5‬‬
‫‪3‬‬