המחלקה להנדסת תכנה חורף 2102-01 מכללת אורט בראודה אלגוריתמים ומבנה נתונים תרגיל בית מספר 2 תאריך הגשה :יום ה' ,22.00.00אלי לדוא"ל יש לכתוב פתרונות קצרים ,מדויקים וברורים .פתרונות בלתי ברורים יגררו הורדת נקודות. שאלה 1 נתון מערך Aבעל nמספרים שלמים בטווח של 1עד .kהציעו מבנה נתונים אשר יאפשר לענות על השאילתה הבאה ב – ) .O(1בהינתן שני מספרים aו – bכמה מספרים נמצאים בטווח ].[a,b נתחו את סיבוכיות הזמן והמקום של מבנה הנתונים שהצעתם ונמקו את זמן השאילתה. שאלה 2 כידוע ישנם שלושה סוגי סריקות של עצים :תחילי ) ,(preorderתוכי ) ,(inorderסופי ) .(postorderבד"כ כותבים ביטויים מתמטיים בכתיב תוכי .מחשבון HPמקבל קלט כביטוי סופי ,שפות כמו LispוScheme- עובדות עם ביטויים תחיליים .פונקציות כתובות כביטוי תחילי ,קודם שם הפונקציה ואז הארגומנטים .הדוגמא הבאה היא של עץ ביטויים .הפעולות מיוצגות בצמתים פנימיים ,והערכים בעלים .סריקה תוכית של העץ תיתן את הביטוי הבא: a * b + c – d * e – f- g + h – i / j *k * l בכדי שסדר העדיפויות יהיה ברור ניתן לשים סוגריים .הסוגריים באים רק בכדי להראות את סדר הפעולות אבל אינם חלק מהעץ. )))((((a * b) + ((c – d) * e)) – f) – ((g + ((h – i) / j)) * (k * l * f * + + * l k * g / - e - j b i h d a c א .ה אם ניתן לשחזר את העץ מתוך הסריקה התוכית שנתונה למעלה (עם הסוגריים) .אם כן ,יש לתת אלגוריתם לשחזור העץ .אם לא יש להוכיח מדוע לא ניתן (לתת דוגמא נגדית). ב. יש לתת את הסריקה התחילית והסופית של עץ הביטויים שלמעלה. ג. יש לכתוב פונקציה בשם CalcTreeהמקבלת מצביע לעץ ,Tומחזירה את הערך שצריך להיות בראש העץ .הפונקציה תהיה חלק מהתכנית המורכבת באופן הבא: המחלקה להנדסת תכנה חורף 2102-01 מכללת אורט בראודה אלגוריתמים ומבנה נתונים .0הגדרת צומת בעץ: { typedef struct node { union t ;char oper ;int number ;} )// leaf == 1 (int in union), ==0 (oper in nonleaf ;int leaf ;struct node * left, right ;} NODE .2פונקציה שתקרא ביטוי תוכי (עם סוגריים) – ותבנה ממנו עץ. )NODE * BuildTree( char *expression .1 הפונקציה תהיה לא רקורסיבית ,ותשתמש במחסנית בכדי לחשב את הביטוי שנמצא בעץ. שאלה 1 נתונה מטריצה ריבועית בגודל n × nהמקיימת את הכלל ,שבכל שורה או עמודה יש לכל היותר איבר אחד בלבד השונה מ.1 - יש להציע מבנה נתונים למטריצה ,כך שמימוש פעולות ) get( i, jו put( i, j, x) -יהיה בסיבוכיות זמן ),O(1 ובסיבוכיות מקום ) .O(nבפעולת putאם קיים איבר אחר באותה שורה או עמודה יש לבטל את האיבר הקודם, כך שהמטריצה תמשיך לקיים את הכלל שלעיל. הדגימו את המימוש על המטריצה הבאה: 0 5 0 0 0 1 7 0 0 עבור הפעולות הבאות: )get( 1, 3 )get( 2, 1 )put(3, 2, 6 שאלה 4 בהינתן צומת uנסמן ב Tree-Successor(u)-את העוקב בסדר in-orderשל uונסמן בTree-- ) Predecessor(uאת הקודם ל( u-שוב ב .in-order הוכח או הפרך. א .יהי Tעץ חיפוש בינארי ויהי uצומת בעץ שאינו עלה אז ב .יהי Tעץ חיפוש בינארי ויהי uצומת בעץ שאינו עלה אז ג. הוא עלה הוא עלה פעולת המחיקה מעץ חיפוש בינארי היא חילופית (כלומר העץ המתקבל ממחיקת xולאחריו yהוא אותו העץ כמו למחוק את yולאחריו את )x מכללת אורט בראודה אלגוריתמים ומבנה נתונים ד. המחלקה להנדסת תכנה חורף 2102-01 אם לצומת בעץ חיפוש בינארי שני בנים ,אזי לצומת העוקב (בסדר )inorderאין בן שמאלי ולצומת הקודם (בסדר )inorderאין בן ימני. בהצלחה!!
© Copyright 2024