תרגול 6 AVL Trees ds192-ps6.

Slides:



Advertisements
מצגות קשורות
ילדי גן "יסמין" וגן פרפר נחמד" נוטעים יחד עם חיילי סמ"ג חוף
Advertisements

כרטיסי מידע להכרת הציפורים שבקרבת משכנות האדם
الاشكال الهندسية צורות הנדסיות
עמל שפרעם-מודל להתמודדות עם תלמידים תת משיגים
وظائف الفجوة الخلوية وظائف الفجوة المحافظة علي استمرارية ضغط الامتلاء Turger pressure للخلية وهو هام جدا للتركيب الدعامي وللتحكم في حركة الماء.
מגמת ניהול עסקי "קציר".
מיפוי הנשים הפלסטיניות הכותבות אחרי 1948
תמליל מצגת:

תרגול 6 AVL Trees ds192-ps6

מה היה לנו זמני ריצה מבני נתונים פשוטים עצים עץ חיפוש בינארי BST ds192-ps6

מה יהיה לנו היום איך מתמודדים עם בעיית: עצי AVL ds192-ps6

עצי AVL Height- Balance Property AVL Tree AVL Queries לכל קודקוד פנימי בעץ, הפרש הגבהים של בניו הוא לכל היותר 1. AVL Tree כל עץ חיפוש בינארי המספק את תכונת איזון הגבהים. AVL Queries עץ AVL תומך בפעולות הבאות בזמן 𝑂 log 𝑛 : insert, search, delete, maximum, minimum, predecessor and successor. AVL Height (Lemma) גובה של עץ AVL עם 𝑛 איברים הוא 𝑂 log 𝑛 . ds192-ps6

עצי AVL דוגמא של עץ AVL: h=3 h=2 h=1 h=0 ds192-ps6

איזון בעץ AVL סיבוב יחיד: כאשר תכונת איזון הגובה מופרת בהכנסה\הוצאה של קודקוד (נוצר קודקוד שהפרש הגבהים בין שני בניו הוא 2), צריך לאזן את העץ. האיזון נעשה בקודקוד הנמוך ביותר בו מופר האיזון סיבוב יחיד: כאשר חוסר האיזון מצורת או ds192-ps6

איזון בעץ AVL סיבוב כפול: סיבוב יחיד: הדגמה: כאשר תכונת איזון הגובה מופרת בהכנסה\הוצאה של קודקוד (נוצר קודקוד שהפרש הגבהים בין שני בניו הוא 2), צריך לאזן את העץ. האיזון נעשה בקודקוד הנמוך ביותר בו מופר האיזון סיבוב כפול: כאשר חוסר האיזון מצורת או את הסיבוב הראשון נבצע מתחת לקודקוד הלא מאוזן, כדי להביא לחוסר איזון מצורת \ סיבוב יחיד: כאשר חוסר האיזון מצורת או הדגמה: 10 15 h=10 ds192-ps6 h=10 h=11

איזון בעץ AVL 1 - ds192-ps6

איזון בעץ AVL - ds192-ps6

איזון בעץ AVL שיטה נוספת: x y z איזון בעץ AVL שיטה נוספת: נסמן את הקודקוד בו מופר האיזון ב-x, את בנו הגבוה ביותר ב-y, ואת בנו הגבוה ביותר של y ב-z. נסמן את תתי העצים של x,y,z ב-A,B,C,D משמאל לימין. נסדר את x,y,z בעץ בינארי מאוזן. נוסיף את תתי העצים A,B,C,D לרמה השלישית משמאל לימין. z y x ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 חוסר איזון מצורת – סיבוב כפול קודקוד לא מאוזן 10 20 15 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 קודקוד לא מאוזן חוסר איזון מצורת – סיבוב כפול 10 15 20 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 15 20 10 25 30 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 חוסר איזון מצורת – סיבוב יחיד קודקוד לא מאוזן 15 קודקוד לא מאוזן 20 10 25 30 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 חוסר איזון מצורת – סיבוב כפול קודקוד לא מאוזן 15 10 25 30 20 16 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 חוסר איזון מצורת – סיבוב כפול 10 15 25 30 20 16 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 חוסר איזון מצורת – סיבוב יחיד קודקוד לא מאוזן 20 קודקוד לא מאוזן 15 25 קודקוד לא מאוזן 10 30 16 18 19 ds192-ps6

שאלה 1 הכניסו את האיברים הבאים לפי הסדר לעץ AVL (העץ ריק בהתחלה): 10, 20, 15, 25, 30, 16, 18, 19 20 15 25 10 30 18 16 19 ds192-ps6

שאלה 1 כעת הסירו את האיבר 30 חוסר איזון מצורת – סיבוב כפול חוסר איזון מצורת – סיבוב כפול קודקוד לא מאוזן 20 10 15 25 30 18 19 16 ds192-ps6

שאלה 1 כעת הסירו את האיבר 30 10 25 15 20 18 16 19 ds192-ps6

שאלה 2- שכבות בעץ הליכה לפי שכבות מוגדרת כביקור בקודקודים בעץ כך שמבקרים קודם בקודקודים עם עומק נמוך יותר (ובאותו עומק מבקרים משמאל לימין). מהו הסדר של ההליכה לפי שכבות בעץ הבא: ds192-ps6

שאלה 2- שכבות בעץ מהו הסדר של ההליכה לפי שכבות בעץ הבא: Answer: F B H A D G J C E I ds192-ps6

שאלה 2- שכבות בעץ הציעו אלגוריתם לביצוע הליכה לפי שכבות בעץ בינארי נתון T. פתרון: נשתמש בתור (Queue) של קודקודים: נתחיל עם תור שמכיל רק את השורש. כל עוד התור אינו ריק, נוציא את הקודקוד הראשון בתור, נדפיס אותו, נכניס את בנו השמאלי לתור (אם קיים) ולאחר מכן נכניס את בנו הימני לתור (אם קיים). ds192-ps6

שאלה 2- שכבות בעץ Answer: F ds192-ps6

שאלה 2- שכבות בעץ Answer: F H B ds192-ps6

שאלה 2- שכבות בעץ Answer: FB D A H ds192-ps6

שאלה 2- שכבות בעץ Answer: FBH J G D A ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHA J G D ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHAD E C J G ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHADG E C J ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHADJ I E C ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHADJC I E ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHADJCE I ds192-ps6

שאלה 2- שכבות בעץ Answer: FBHADJCEI ds192-ps6

שאלה 2- שכבות בעץ הציעו אלגוריתם לביצוע הליכה לפי שכבות בעץ בינארי נתון T. פתרון: PrintLevelOrder(AVL T) if (T.root ≠ null) Q.enqueue(T.root) while(!Q.isEmpty()) x ← Q.dequeue() print(x.val) if (x.left ≠ null) Q.enqueue(x.left) if (x.right ≠ null) Q.enqueue(x.right) מה יקרה אם נחליף בין 2 השורות הללו? ds192-ps6

שאלה 2- שכבות בעץ האם ניתן לשכפל עץ AVL חוקי ע"י פעולות BST של הכנסה ומחיקה של ערכים (ללא סיבובים), כך שלאחר כל הכנסה\מחיקה העץ יישאר מאוזן? פתרון: כן, נכניס את האיברים לפי סדר הרמות שלהם. ds192-ps6

שאלה 3- יעול זיכרון במימוש לAVL שלמדתם בכיתה, לכל קודקוד שדה נוסף h, ששומר את גובה הקודקוד. בגובה משתמשים בכדי לאזן את העץ. מכיוון שגובה הקודקוד יכול להיות עד O(log(n)), דרושים log(log(n)) ביטים בכל קודקוד לשמירת שדה הגובה. כיצד ניתן להקטין את מספר הביטים שעל כל קודקוד לשמור? ds192-ps6

קיים אלגוריתם לשאילתות הכנסות והוצאות אך נסתפק רק בדוגמא. שאלה 3- יעול זיכרון כיצד ניתן להקטין את מספר הביטים שעל כל קודקוד לשמור? פתרון: במקום לשמור את הגובה, כל קודקוד ישמור רק את מצב האיזון שלו – אם תת-העץ השמאלי\ימני גבוה יותר או אם הוא מאוזן 00 ≡ ’/’ – h(x.left) > h(x.right) 01 ≡ ’–‘ – h(x.left) = h(x.right) 10 ≡ ’\’ - h(x.left) < h(x.right) קיים אלגוריתם לשאילתות הכנסות והוצאות אך נסתפק רק בדוגמא. כיצד נדע מתי ואיפה יש לבצע סיבוב\סיבוב כפול בהכנסה בהצגה הנ"ל? ds192-ps6

שאלה 3- יעול זיכרון הדגמה: בצעו הכנסה של האיבר 40. כיצד ישתנו הסמנים? כיצד מזהים היכן יש לבצע סיבוב? ds192-ps6

שאלה 3- יעול זיכרון הדגמה: נוסיף את 40 במקום שלו ds192-ps6

שאלה 3- יעול זיכרון הדגמה: נעדכן כלפי מעלה את הכיוונים של גבהי הבנים ds192-ps6

שאלה 3- יעול זיכרון הדגמה: ונמשיך עד לקודקוד שהיה לא מאוזן (\ או /) ועכשיו, אחרי ההכנסה, אחד מילדיו שהיה מאוזן (==) גם לא מאוזן. ds192-ps6

שאלה 3- יעול זיכרון הדגמה: נאזן ds192-ps6

שאלה 3- יעול זיכרון במימוש לAVL שלמדתם בכיתה, לכל קודקוד שדה נוסף h, ששומר את גובה הקודקוד. בגובה משתמשים בכדי לאזן את העץ. מכיוון שגובה הקודקוד יכול להיות עד log(n), דרושים log(log(n)) ביטים בכל קודקוד לשמירת שדה הגובה. כיצד ניתן להקטין את מספר הביטים שעל כל קודקוד לשמור? הציעו דרך למציאת גובה העץ במימוש שהוצע בסעיף 1. ds192-ps6

שאלה 3- יעול זיכרון הציעו דרך למציאת גובה העץ במימוש שהוצע בסעיף 1. פתרון: גובה העץ = העומק המקסימלי של עלה בעץ. נרד מהשורש אל העלה העמוק ביותר: בכל התפצלות נבחר את הצד הגבוה יותר. ds192-ps6

שאלה 4 – הוכחות פורמליות קודקוד בעץ בינארי T נקרא בן יחיד אם יש לו קודקוד הורה ואין לו קודקוד אח (השורש אינו בן יחיד). יחס הבדידות של עץ T מוגדר כמספר הבנים היחידים בעץ חלקי מספר כל הקודקודים בעץ. LR(T) = (The number of nodes in T that are only children) / (The number of nodes in T) הוכיחו כי בכל עץ AVL, T, מתקיים 𝐿𝑅 𝑇 ≤ 1 2 ds192-ps6

שאלה 4 – הוכחות פורמליות הוכיחו כי בכל עץ AVL T מתקיים 𝐿𝑅 𝑇 ≤ 1 2 פתרון: אם קודקוד בעץ AVL הוא בן יחיד, אז הוא עלה (למה?) לכל בן יחיד יש קודקוד אבא, ולשני בנים יחידים שונים יש אבות שונים (למה?) מספר הבנים היחידים + האבות שלהם = 2 * מספר הבנים היחידים (למה?) סה"כ מספר הקודקודים בעץ ≤ מספר הבנים היחידים + האבות שלהם = 2 * מספר הבנים היחידים לכן 𝐿𝑅 𝑇 ≤ 1 2 ds192-ps6

שאלה 4 – הוכחות פורמליות קודקוד בעץ בינארי T נקרא בן יחיד אם יש לו קודקוד הורה ואין לו קודקוד אח (השורש אינו בן יחיד) יחס הבדידות של עץ T מוגדר כמספר הבנים היחידים בעץ חלקי מספר כל הקודקודים בעץ LR(T) = (The number of nodes in T that are only children) / (The number of nodes in T) הוכיחו כי בכל עץ AVL T מתקיים 𝐿𝑅 𝑇 ≤ 1 2 האם נכון שלכל עץ בינארי T, אם 𝐿𝑅 𝑇 ≤ 1 2 אז Height(T)=O(log n)? ds192-ps6

שאלה 4 – הוכחות פורמליות האם נכון שלכל עץ בינארי T, אם 𝐿𝑅 𝑇 ≤ 1 2 אז Height(T)=O(log n)? פתרון: לא נכון. זה רק אומר שיש לכל היותר 𝑛 2 בנים יחידים. דוגמאות נגדיות: … עץ מלא בגודל 𝑛 2 𝑛 2 קודקודים ds192-ps6

שאלה 4 – הוכחות פורמליות קודקוד בעץ בינארי T נקרא בן יחיד אם יש לו קודקוד הורה ואין לו קודקוד אח (השורש אינו בן יחיד) יחס הבדידות של עץ T מוגדר כמספר הבנים היחידים בעץ חלקי מספר כל הקודקודים בעץ LR(T) = (The number of nodes in T that are only children) / (The number of nodes in T) הוכיחו כי בכל עץ AVL T מתקיים 𝐿𝑅 𝑇 ≤ 1 2 האם נכון שלכל עץ בינארי T, אם 𝐿𝑅 𝑇 ≤ 1 2 אז Height(T)=O(log n)? האם נכון שבכל עץ בינארי T, אם יש 𝜃 𝑛 בנים יחידים, שכולם עלים, אז Height(T)=O(log n)? ds192-ps6

שאלה 4 – הוכחות פורמליות האם נכון שבכל עץ בינארי T, אם יש 𝜃 𝑛 בנים יחידים, שכולם עלים, אז Height(T)=O(log n)? פתרון: לא נכון. דוגמה נגדית: ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. Init() Initialize the ADT O(1) Insert(x) Insert x into the ADT, if it is not in ADT yet O(log n) Delete(x) Delete x from the ADT, if exists Delete_in_place(i) Delete from the ADT an element, which is in the ith place (as determined by the order of insertion) among the elements that are in the ADT at that moment. Get_place(x) Return the place (which is determined by the order of insertion) of x among the elements that are in the ADT at that moment. If x does not exist, return -1. ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Data=3 place=1 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Data=5 place=2 Data=3 place=1 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Data=5 place=2 Data=3 place=1 Data=11 place=3 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Data=4 place=4 Data=5 place=2 Data=3 place=1 Data=11 place=3 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Data=4 place=4 Data=5 place=2 Data=3 place=1 Data=11 place=3 Data=7 place=5 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Data=4 place=4 Data=4 place=3 Data=5 place=2 Data=3 place=1 Data=11 place=2 Data=11 place=3 Data=7 place=4 Data=7 place=5 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Delete_in_place(2) Get_place(7) Data=4 place=3 4 Data=3 place=1 Data=11 place=2 Data=7 place=4 ds192-ps6

שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. For example, for the following sequence of actions: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7), Delete(5) Delete_in_place(2) Data=4 place=2 Data=3 place=1 Data=7 place=3 ds192-ps6

טריק! הצבעות הדדיות שאלה 5 הציעו מבנה נתונים שתומך בפעולות הבאות בזמנים הנתונים. הסבירו כיצד מממשים את הפעולות. Init() Initialize the ADT O(1) Insert(x) Insert x into the ADT, if it is not in ADT yet O(log n) Delete(x) Delete x from the ADT, if exists Delete_in_place(i) Delete from the ADT an element, which is in the ith place (as determined by the order of insertion) among the elements that are in the ADT at that moment. Get_place(x) Return the place (which is determined by the order of insertion) of x among the elements that are in the ADT at that moment. If x does not exist, return -1. ds192-ps6

שאלה 5 פתרון: נשמור 2 עצי AVL, אחד ממוין לפי מפתח, ואחד ממוין לפי זמן הכנסה. לכל קודקוד יהיה מצביע לקודקוד המקביל בעץ השני. בנוסף, כל קודקוד בעץ T2 (הממוין לפי זמן הכנסה) יכיל שדה של גודל תת-העץ המושרש בו. Example: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7) 3 1 size=1 ds192-ps6

שאלה 5 Example: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7) 1 size=2 5 2 size=1 ds192-ps6

שאלה 5 Example: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7) 1 size=3 5 2 size=2 עכשיו צריך לאזן 11 3 size=1 ds192-ps6

שאלה 5 Example:Insert(3), Insert(5), Insert(11), Insert(4), Insert(7) 2 size=3 3 11 1 size=1 3 size=1 ds192-ps6

שאלה 5 Example: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7) 2 size=4 3 11 1 size=1 3 size=2 4 4 size=1 ds192-ps6

שאלה 5 Example: Insert(3), Insert(5), Insert(11), Insert(4), Insert(7) 2 size=5 3 11 1 size=1 4 size=3 4 3 size=1 5 size=1 7 ds192-ps6

שאלה 5 Example: Delete(5) 7 5 2 size=5 3 11 1 size=1 4 size=3 4 ds192-ps6

שאלה 5 Example: Delete(5) 7 5 2 size=5 3 size=5 3 11 1 size=1 4 size=3 ds192-ps6

שאלה 5 Example: Delete(5) 7 5 2 size=5 3 size=4 3 11 1 size=1 4 size=2 ds192-ps6

שאלה 5 פתרון: נשמור 2 עצי AVL, אחד ממוין לפי מפתח, ואחד ממוין לפי זמן הכנסה. לכל קודקוד יהיה מצביע לקודקוד המקביל בעץ השני. בנוסף, כל קודקוד בעץ T2 (הממוין לפי זמן הכנסה) יכיל שדה של גודל תת-העץ המושרש בו. Init() – initialize 2 empty trees Insert(x) – insert an element by key into T1, insert the element as the biggest to T2, and update the pointers. In T2 update the field x.size in the insertion path. (The insertion is as in AVL tree) Delete(x) – find the element in T1 (regular search), and delete it from both the trees. In T2, go up from the deleted element to the root and update x.size for all the nodes in this path. (The deletion is as in AVL tree) ds192-ps6

שאלה 5 3 (11) size=4 1 (3) size=1 4 (4) size=2 5 (7) size=1 7 5 3 11 4 ds192-ps6

שאלה 5 3 (11) size=4 1 (3) size=1 4 (4) size=2 5 (7) size=1 7 5 3 11 4 ds192-ps6

שאלה 6 פקיד רוצה לשמור רשימה של המטלות שלו. לכל מטלה יש מספר מזהה ייחודי, ולכל מטלה הפקיד מעוניין לשמור האם היא כבר בוצעה או לא. הציעו מבנה נתונים שיבצע עבור הפקיד את הפעולות הבאות בO(log n) במקרה הגרוע. Insert(k, t) - Insert a new task t with id = k to the data structure, at first mark the task as not completed. Update(k) – Update task with ID = k to be completed. FindDiff(k) – Find the difference between the number of completed and incomplete (| #of completed – #of incomplete|) among all the tasks with ID smaller than k. ds192-ps6

AVL שאלה 6 איזה מבנה נתונים? פקיד רוצה לשמור רשימה של המטלות שלו. לכל מטלה יש מספר מזהה ייחודי, ולכל מטלה הפקיד מעוניין לשמור האם היא כבר בוצעה או לא. הציעו מבנה נתונים שיבצע עבור הפקיד את הפעולות הבאות בO(log n) במקרה הגרוע. Insert(k, t) - Insert a new task t with id = k to the data structure, at first mark the task as not completed. Update(k) – Update task with ID = k to be completed. FindDiff(k) – Find the difference between the number of completed and incomplete (| #of completed – #of incomplete|) among all the tasks with ID smaller than k. איזה מבנה נתונים? ds192-ps6

שאלה 6 Insert(k, t) - Insert a new task t with id = k to the data structure, at first mark the task as not completed. Update(k) – Update task with ID = k to be completed. FindDiff(k) – Find the difference between the number of completed and incomplete (| #of completed – #of incomplete|) among all the tasks with ID smaller than k. פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 פתרון: נשתמש בעץ AVL ממויין לפי המספר המזהה, בו כל קודקוד מכיל 3 שדות נוספים – מספר המטלות שבוצעו ולא בוצעו בתת-העץ המושרש בו ושדה בוליאני האם המטלה בקודקוד בוצעה. Id=18 done=false complete=4 Incomplete=3 Id=15 done=true complete=2 Incomplete=1 Id=20 done=true complete=2 FindDiff(17) Id=10 done=false complete=0 Incomplete=1 Id=16 done=true complete=1 Incomplete=0 Id=19 done=false complete=0 Incomplete=1 Id=25 done=true complete=1 Incomplete=0 ds192-ps6

שאלה 6 == 0 1 ds192-ps6

שאלה 6 ds192-ps6

מה היה לנו ראינו למה עץ AVL חשוב. ראינו שכדי לשמור על התכונות שלו, עלינו לטפל בחוקיות העץ בכל פעולה של הכנסה או הוצאה. ועכשיו נשתמש באפליקציה ds192-ps6

ds192-ps6