הרצאה :8עץ בינארי מאוזןAVL Tree , מבנה נתונים ,סמסטר א 'תשס"ד 1 הגדרה ומטרה גובהו של עץ בינארי מוגדר להיות המסלול הארוך שניתן ללכת עליו מהשורש לאחד העלים. ראינו שפעולות בסיסיות בעץ חיפוש בינארי ,כמו חיפוש ,הכנסה והוצאת ערך תלוי בגובהו של העץ. ולכן מטרה :להקטין ככל הניתן את גובהו של עץ חיפוש בינארי מבנה נתונים ,סמסטר א 'תשס"ד 2 AVL Tree AVL Treeהוא סוג של עץ חיפוש בינארי מאוזן .שמו ניתן לו על שם ממציאיו: Adelson-Velskii and Landis הגדרת : AVL Tree .1העץ הוא עץ חיפוש בינארי .2הבדל הגבהים של תתי העץ היוצאים מכל צומת הוא לכל היותר 1 .3כל תת עץ הוא .AVL Tree מבנה נתונים ,סמסטר א 'תשס"ד 3 דוגמאות להגדרה לא AVL AVL מבנה נתונים ,סמסטר א 'תשס"ד 4 גובהו של עץ AVL • הגדרה :נאמר שעץ בינארי Tבעל nצמתים הוא מאוזן אם )h(T ) O(log n • טענה (ללא הוכחה) :עץ AVLהוא עץ מאוזן מבנה נתונים ,סמסטר א 'תשס"ד 5 פקטור האיזון של צומת בAVL - על מנת לתחזק עץ AVLכך שישמור תמיד על איזון ,נוסיף ארגומנט חדש שיקרא "פקטור האיזון" לצמתי העץ ,שיכיל את המידע על הפרשי הגובה בין תת העץ הימני לתת העץ השמאלי של הצומת. • אם תת העץ הימני גבוה ב – iמתת העץ השמאלי ,אזי נסמן "כבד ימני" ()+i • אם תת העץ השמאלי גבוה ב – iמתת העץ הימני ,אזי נסמן "כבד שמאלי" ()-i • אם שני תתי העץ הם באותו גובה ,נסמן "מאוזן" ()0 אם גורם האיזון של צומת גדל ל – 2או ל )-2( -אזי יש לבצע רוטציה כדי לאזן את תת העץ שהיא השורש שלו. •הערה :לרוב מוסיפים לכל צומת גם פקטור המציין את גובה תת העץ שהצומת היא השורש שלו. 6 מבנה נתונים ,סמסטר א 'תשס"ד רוטציה שמאלית נניח שתת העץ הימני של pגבוה ב 2 -מתת העץ השמאלי .אזי נבצע את הרוטציה בהתאם למצבים הבאים: אם wגבוה מ – vאו שווה לו: .1 pיהפוך להיות הבן השמאלי של u p v .2יהפוך להיות הבן הימני של . p אחרת: u .1בצע גלגול ימני בודד ל – u .2בצע גלגול שמאלי בודד ל – .p מבנה נתונים ,סמסטר א 'תשס"ד w v 7 p u u w p w v v wגבוה מ – v p v u w u v p w vגבוה מ – w מבנה נתונים ,סמסטר א 'תשס"ד 8 דוגמא ראשונה לרוטציה שמאלית 50 70 80 78 85 30 40 20 25 35 45 מבנה נתונים ,סמסטר א 'תשס"ד 10 9 דוגמא ראשונה לרוטציה שמאלית 50 +2 p 30 70 0 80 u 0 40 20 0 v 78 85 w 25 35 45 מבנה נתונים ,סמסטר א 'תשס"ד 10 10 דוגמא ראשונה לרוטציה שמאלית 50 -1 80 u גלגול שמאלי לp- 0 30 +1 w 70 p 85 40 20 0 v 78 25 35 45 מבנה נתונים ,סמסטר א 'תשס"ד 10 11 דוגמא שניה לרוטציה שמאלית 50 70 80 85 30 60 40 20 35 75 72 מבנה נתונים ,סמסטר א 'תשס"ד 12 דוגמא שניה לרוטציה שמאלית 50 +2 30 70 p -1 0 80 u 60 0 85 w -1 v 75 0 40 20 35 72 מבנה נתונים ,סמסטר א 'תשס"ד 13 דוגמא שניה לרוטציה שמאלית 50 +3 70 p גלגול ימני בודד ל u - 30 +2 0 75 v 60 -1 80 u 0 72 40 20 35 0 85 w מבנה נתונים ,סמסטר א 'תשס"ד 14 דוגמא שניה לרוטציה שמאלית 50 0 75 v גלגול שמאלי בודד ל p - -1 30 0 70 p 80 u 0 85 w 0 72 40 0 20 35 60 מבנה נתונים ,סמסטר א 'תשס"ד 15 רוטציה ימנית נניח שתת העץ השמאלי של pגבוה ב – 2מתת העץ הימני. אזי נבצע את הרוטציה בהתאם למצבים הבאים: אם wגבוה מ – vאו שווה לו : .1 pיהפוך להיות הבן הימני של u p v .2יהפוך להיות הבן השמאלי של . p u אחרת: .1בצע גלגול שמאלי בודד ל – u v w .2בצע גלגול ימני בודד ל – .p מבנה נתונים ,סמסטר א 'תשס"ד 16 p u u w p v v w wגבוה מ – v p v p u u w מבנה נתונים ,סמסטר א 'תשס"ד vגבוה מ – w w v 17 דוגמא ראשונה לרוטציה ימנית 50 70 80 30 60 20 40 25 10 9 מבנה נתונים ,סמסטר א 'תשס"ד 18 דוגמא ראשונה לרוטציה ימנית 50 -2 p 30 70 0 80 60 -1 u 20 40 0 25 v -1 w 10 0 9 מבנה נתונים ,סמסטר א 'תשס"ד 19 דוגמא ראשונה לרוטציה ימנית 50 0 u 20 70 0 80 -1 w 10 30 p 60 0 0 40 25 מבנה נתונים ,סמסטר א 'תשס"ד 0 v 9 גלגול ימני לp- 20 דוגמא שניה לרוטציה ימנית 50 70 80 30 60 20 40 25 10 22 28 מבנה נתונים ,סמסטר א 'תשס"ד 21 דוגמא שניה לרוטציה ימנית 50 -2 p 30 70 0 80 60 +1 u 20 40 0 0 25 v 0 w 10 0 22 28 מבנה נתונים ,סמסטר א 'תשס"ד 22 דוגמא שניה לרוטציה ימנית 50 -2 70 80 p 30 60 0 -1 40 25 0 v 0 28 u 20 גלגול שמאלי בודד ל u - 0 0 מבנה נתונים ,סמסטר א 'תשס"ד 22 w 10 23 דוגמא שניה לרוטציה ימנית 50 0 25 70 v 0 80 0 u 20 p 30 60 0 0 0 0 w 10 22 28 40 מבנה נתונים ,סמסטר א 'תשס"ד גלגול ימני בודד ל p - 24 הוכחת נכונותם של הגלגולים • • • • טענה :רוטציות בעץ משמרות את היותו עץ חיפוש בינארי הוכחה :מספיק להסתכל על שני הגלגולים הפשוטים: גלגול ימני: – uבן שמאלי של ,pלכן קטן ממנו ,ולכן העברתו של pלהיות בן ימני של uתקינה – vהוא צאצא שמאלי של ,pואחרי הגלגול הוא נשאר בתת העץ השמאלי של .p – תת העץ הימני של pותת העץ השמאלי של uנותרים כפי שהם. גלגול שמאלי :הוכחה דומה לגלגול ימני העץ אחרי גלגול נשאר עץ חיפוש בינארי מבנה נתונים ,סמסטר א 'תשס"ד 25 אבחנה חשובה הפרת איזון בעץ בזמן הכנסת או הוצאת איבר ,תתכן רק בצמתים שהן על מסלול הכנסת או הוצאת האיבר הערה חשובה עדכוני פקטורי האיזון והגבהים בזמן רוטציות נעשות רק על הצמתים המוזזים מבנה נתונים ,סמסטר א 'תשס"ד 26 הכנסת איבר לעץ AVL .1הכנס את sלעץ ,והכנס את כל הצמתים שעברת במסלול למחסנית (לא כולל העלה החדש) ויהי xהעלה החדש שנוסף לעץ: .2הגדר פקטור האיזון של h( x) 0 ,0 = x .3כל עוד xאיננו השורש ,בצע: .aהוצא את pמהמחסנית ( Pהוא האבא של xבעץ) .bאם h( p) h( x) 1סיים. .cהצב h( p) h( x) 1 .dעדכן את פקטור האיזון של p .eאם ב p-הופר האיזון ,בצע רוטציה וסיים. .fהצב x p מתבצעת רוטציה אחת לכל היותר ההכנסה הערה :שימו לב שבזמן תהליך סמסטר א 'תשס"ד מבנה נתונים , 27 דוגמא להכנסת איבר לעץ AVL 3 0 50 0 0 80 1 0 -1 2 70 30 0 0 60 1 0 00 20 40 00 25 0 0 10 העץ לפני ההכנסה מבנה נתונים ,סמסטר א 'תשס"ד 28 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי החיפוש: 50 10 2 -1 70 30 50 30 20 25 00 00 00 10 80 60 40 20 00 25 00 10 00 28 x הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 29 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :25 50 10 2 -1 70 30 50 30 20 00 00 00 10 80 60 40 20 h(p) <> h(x)+1 00 00 25 p 10 00 28 x הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 30 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :25 50 h(p) = h(x)+1 וכן עדכון פקטור האיזון של p 10 2 -1 70 30 50 30 20 00 00 00 10 80 60 40 20 1 +1 00 25 p 10 00 28 x הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 31 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :20 50 h(p) <> h(x)+1 10 2 -1 70 30 50 30 00 00 00 10 80 60 40 20 p 1 +1 00 25 x 10 00 28 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 32 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :20 50 10 2 -1 70 30 50 30 00 00 00 2 +1 80 60 40 20 p h(p) = h(x)+1 ועדכון פקטור האיזון של p 1 +1 00 25 x 10 00 28 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 33 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :30 50 10 2 -1 70 30 p 50 00 00 00 2 +1 80 60 40 20 x 1 +1 25 h(p) <> h(x)+1 00 10 00 28 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 34 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :30 50 10 3 -2 70 30 p 50 00 00 00 2 +1 80 60 40 20 x 1 +1 25 h(p) = h(x)+1 ועדכון פקטור האיזון של p 00 10 00 28 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 35 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :30 50 הפרת איזון ב p - 10 3 -2 70 30 p 50 00 00 00 2 +1 80 60 40 20 u 1 +1 00 25 v w 10 00 28 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 36 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :30 50 -2 10 p 30 70 00 00 80 60 50 0 -1 40 25 0 גלגול שמאלי בודד ל u - v 0 28 u 20 0 0 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 22 w 10 37 דוגמא להכנסת איבר לעץ AVL 3 -1 תיאור המחסנית אחרי הוצאת :30 50 20 10 25 70 גלגול ימני בודד ל p - 00 00 80 60 10 00 v 50 10 u 20 p 30 00 00 00 w 10 22 28 40 הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 38 דוגמא להכנסת איבר לעץ AVL 3 -1 50 20 10 25 70 00 00 80 60 00 10 10 30 20 00 00 00 10 22 28 40 ריקון המחסנית והחזרת העץ המאוזן הכנסת האיבר 28 מבנה נתונים ,סמסטר א 'תשס"ד 39 הוצאת איבר מעץ AVL .1הוצא את sמהעץ ,והכנס את כל הצמתים שעברת במסלול למחסנית (כולל האיבר המוצא אם יש צורך במקרה של ביטול צומת עם שני בנים) .2לכל צומת xבמסלול ההוצאה בצע את הצעדים הבאים: .aעדכן את פקטור האיזון של xלפי הפרש גבהי תתי העצים שהוא השורש שלהם ברגע זה .bעדכן את גובהו של xלפי גבהי תתי העצים המעודכנים שלו .cאם פקטור האיזון הוא 2או -2אז בצע רוטציה מתאימה והמשך . .dאם גובה תת העץ ש – xהוא השורש שלו לא השתנה ,סיים .eאם גובה תת העץ השתנה אך פקטור האיזון תקין ,המשך. הערה :שימו לב שבזמן התהליך יתכנו מספר רוטציות מבנה נתונים ,סמסטר א 'תשס"ד 40 דוגמא להוצאת איבר מעץ AVL 4 -1 50 2 +1 3 +1 70 10 00 80 00 85 30 2 +1 60 1 -1 40 20 00 1 +1 00 00 75 44 35 10 00 48 העץ לפני ההוצאה מבנה נתונים ,סמסטר א 'תשס"ד 41 דוגמא להוצאת איבר מעץ AVL 4 -1 50 2 +1 3 +1 70 10 00 85 30 00 80 המחסנית ההתחלתית: 2 +1 60 1 -1 40 50 "30" 40 20 00 1 +1 00 00 75 44 35 10 00 48 הוצאת האיבר 30 מבנה נתונים ,סמסטר א 'תשס"ד 42 דוגמא להוצאת איבר מעץ AVL 4 -1 50 2 +1 3 +1 70 10 00 עדכון פקטור האיזון של x הפרת איזון ב x - 85 35 00 80 המחסנית אחרי הוצאת :40 60 2 +2 1 -1 40 x 20 "50 "30 00 1 +1 00 75 44 u 10 00 48 w הוצאת האיבר 30 מבנה נתונים ,סמסטר א 'תשס"ד 43 דוגמא להוצאת איבר מעץ AVL 4 -1 50 2 +1 3 +1 70 10 00 רוטציה שמאלית ל–x גובה תת העץ של xהשתנה 85 35 00 80 10 60 00 1 -1 44 00 75 המחסנית אחרי הוצאת :40 20 00 x 40 48 הוצאת האיבר 30 מבנה נתונים ,סמסטר א 'תשס"ד "50 "30 00 10 44 דוגמא להוצאת איבר מעץ AVL 4 -1 3 +1 50 2 +1 20 70 10 אין צורך ברוטציה, אבל גובה תת העץ ש – xמצביע עליו השתנה מזה שנשמר במחסנית 00 85 x 35 00 80 60 00 10 1 -1 44 20 00 75 המחסנית אחרי הוצאת ":"30 00 40 48 הוצאת האיבר 30 מבנה נתונים ,סמסטר א 'תשס"ד 50 00 10 45 דוגמא להוצאת איבר מעץ AVL 30 x 50 2 +1 20 70 10 עדכון פקטור האיזון של :xתקין 00 85 35 00 80 10 60 00 1 -1 44 00 75 המחסנית אחרי הוצאת :50ריקה 20 00 40 48 הוצאת האיבר 30 מבנה נתונים ,סמסטר א 'תשס"ד 00 10 46 דוגמא להוצאת איבר מעץ AVL 30 50 2 +1 20 70 10 00 80 00 85 35 10 60 00 75 1 -1 44 00 20 00 40 48 האיבר 30 העץ המאוזן אחרי הוצאת מבנה נתונים ,סמסטר א 'תשס"ד 00 10 47 דוגמא http://www.seanet.com/users/arsen/avltree.html הערה :שימו לב שבדוגמא זו ,כאשר מורידים צומת מהעץ ,המחליף הוא הקודם לערך ולא העוקב ,כפי שלמדנו בהרצאה 7 מבנה נתונים ,סמסטר א 'תשס"ד 48 מבנה נתונים ,סמסטר א 'תשס"ד 49
© Copyright 2024