עצים מאוזנים הגדרה: משפחת עצים תקרא מאוזנת אם ,h(T) = O(log n) באשר T הוא עץ במשפחה, n הוא מספר הצמתים ב-T ו-h(T) הוא הגובה של T עצי (Adelson-Velsky, Landis) AVL הגדרה: עץ AVL הוא עץ חיפוש בינרי שבו לכל צומת v התכונה : | h(v left) – h(v right) | 1 דוגמאות דוגמאות נגד * * בצומת בו מופר האיזון
מטרה: מציאת חסם לגובה של עץ AVL כמובן, נרצה לבטא את הגובה כפונקציה של מספר הצמתים מהלך האנליזה: נגדיר את סדרת עצי פיבונצ'יFibonacci trees) ) F1,…,Fh,… נראה שקיים קבוע a כך שמספר הצמתים |Fh| בעץ Fh מקיים |Fh|>ah. נראה שמספר הצמתים |T|n= של עץ AVL כלשהו בגובה h ≤ |Fh|. מסקנה: לכל עץ AVL עם n צמתים מתקיים: n≥|Fh|>ah. לכן גובה עץ AVL חסום מלעיל ע"י logan. cs,Technion
חסם לגובה עץ AVL נגדיר באינדוקציה את משפחת עצי פיבונצ'יFibonacci trees) ): F0 F1 F2 F3 Fi+1 Fi-1 Fi טענה 2: . |Fh| = 1 + |Fh-1| + |Fh-2| טענה 1: לכל h, לעץ Fh גובה h. הוכחה: נכון עבור F0 ועבור F1. נמשיך באינדוקציה. מתקיים לפי הגדרת עץ פיבונצ'י: height(Fi+1) = height(Fi) + 1 = i + 1 . cs,Technion
חסם לגובה עץ AVL (המשך) F0 F1 טענה 3: יהי T עץ AVL בעל גובה h. אזי .|T| |Fh| הוכחה: באינדוקציה על h. נכון עבור h=0 ועבור h=1. יהי T עץ AVL בעל גובה h. יהי L תת-העץ השמאלי ו-R תת-העץ הימני כמצויר. R L T תתי העצים R ו- L הם עצי AVL בגובה קטן מהגובה של T. אחד מהם (נאמר R) בגובה h-1 והשני בגובה h-1 או h-2. לפי הנחת האינדוקציה: |Fh-1| |R|. min{|Fh-1 |, |Fh-2|} = |Fh-2| |L|. לכן, מהגדרת T מתקיים: |T| = 1 + |R| + |L| 1 + |Fh-1| + |Fh-2| = |Fh| cs,Technion
מספרי פיבונצ'י סדרת פיבונצ'י ni מוגדרת ברקורסיה באופן הבא : ni+1 = ni + ni-1 n0 = 0, n1=1 n2=1, n3=2, n4=3, n5=5, n6=8 תנאי התחלה: טענה 4: מתקיים באשר ( נקרא יחס הזהב). הערה: מכיוון שמתקיים נובע גם עבור i גדול. cs,Technion
על מספרי פיבונצ'י סיפור הארנבים (תרגיל בספרו משנת 1202): פיבונאצ'י סיפור הארנבים (תרגיל בספרו משנת 1202): יש זוג ארנבים צעירים כעבור חודש מתבגרים כעבור חודש ממליטים זוג ארנבים וכו' כמה ארנבים יהיו בחודש i? cs,Technion
מספרי פיבונצ'י (המשך) הוכחת טענה 4: נתונה המשוואה הבאה. הוכחת טענה 4: נתונה המשוואה הבאה. נניח פתרון מהצורה: נציב במשוואה ונקבל: משוואת ההפרשים ליניארית ולכן כל צרוף ליניארי של פתרונות מהווה פתרון: שימוש בתנאי השפה מוביל למציאת הקבועים: לפיכך פתרון המשוואה (כולל תנאי ההתחלה) הוא: cs,Technion
על מספרי פיבונצ'י - 2 cs,Technion
יחס ומלבן הזהב cs,Technion
לחובבי המתמטיקה נוסחאות שונות למספרי פיבונצ'י cs,Technion
ניתוח גובה עץ AVL טענה 5: לעץ פיבונאצ'י Fi יש |Fi| = ni+3 - 1 צמתים כאשר ni הוא מספר פיבונצ'י ה-i. n3=2, n4=3, n5=5, n6=8 לדוגמא: F0 F1 F2 F3 הוכחה: באינדוקציה על i בסיס האינדוקציה: ראינו בתרשים הנחת האינדוקציה: נניח נכונות לכל i j ≤ צעד האינדוקציה: מטענה 2, הנחת האינדוקציה והגדרת מספרי פיבונצ'י,
ניתוח גובה עץ AVL (סיום) טענה 6: יהי T עץ AVLבן n צמתים וגובה h, אזי h=O(log n) . לאור טענה 3 מתקיים: לאור טענות 5, 4 מתקיים: כלומר לקיחת לוגריתם משני צדי המשוואה: cs,Technion
איזון בעץ AVL זמן החיפוש בעץ AVL הוא O(log n). נצטרך לדאוג שלאחר הכנסה או הוצאה, העץ הנותר יהיה עץ AVL. 12 8 15 6 10 24 14 11 29 4 20 13 19 בזמן הוצאה קיימת הפרת איזון דומה. למשל בהוצאת 29. 18 לאחר הוספת האיבר 18 נתקבל עץ שאינו עץ AVL. אבל נתן לשנות את תת העץ שבו הופר האיזון בצורה הבאה: תיקון כזה נקרא גלגול. 20 19 cs,Technion
איזון בעץ AVL (המשך) עבור צומת v בעץ בינרי נסמן: hL(v) גובה תת העץ השמאלי של v. hR(v) גובה תת העץ הימני של v. גורם האיזון (Balance Factor) מחושב כהפרש הגבהים:BF(v) = hL(v) – hR(v) בעץ AVL תקין: 1≤|BF(v)| 8 6 10 12 15 24 20 29 11 14 13 19 -1 +1 1+ 2+ 2- לדוגמא: מצד שמאל של כל צומת מסומן גורם האיזון. 18 אחרי ההכנסה של 18 גורם האיזון מופר על מסלול ההכנסה. cs,Technion
אבחנות הצמתים היחידים שאולי הופר בהם האיזון הם הצמתים לאורך מסלול הכנסה/הוצאה. אם עבור צומת v במסלול הנ"ל גובה העץ ששורשו v לא השתנה אזי גורמי האיזון בצמתים שמעליו במסלול לא השתנו. אם גורם האיזון הופך ל-2 או ל 2-, אזי יש לבצע גלגול על מנת שהעץ יחזור להיות עץ AVL. גורם האיזון לא יכול להיות גדול מ-2 בערכו המוחלט כי בכל הכנסה/הוצאה הוא משתנה ב-1 לכל היותר. גלגול– פעולה המתבצעת על צומת שהופר בו האיזון על מנת להחזירו לתחום המותר [1 … 1-]. 8 6 10 12 15 24 20 29 11 14 13 19 -1 +1 cs,Technion
סוגי הגלגולים סוג הגלגול, כלומר הדרך לתקן חוסר איזון בצומת, תלוי בצורה בה האיזון מופר. נתן לסווג חוסר איזון בארבע קטגוריות שונות המכסות את כל המקרים. +2 +1 1- גלגול LL גלגול LR גלגול RR 2- 1+ גלגול RL בשורש v בבן השמאלי vL הגלגול המתאים BF(v)=2 BF(vL) =1 BF(vL) = -1 בבן הימני vR LL LR BF(v)= -2 BF(vR) = -1 BF(vR) = 1 RR RL cs,Technion
גלגול LL +1 B +2 לפני הכנסת v : גובה העץ הוא 2+ h. הוכנס צומת v שהגדיל את גובה AL ל-1+h . A +1 מצד ימין של הצמתים מסומנים גורמי האיזון שהשתנו. גלגול LL : יעביר את A לשורש BR h AL AR v v אחרי הגלגול: גובה העץ לאחר הגלגול הוא 2+ h, כמו לפני ההכנסה. השורש מאוזן. שינינו (1)O מצביעים ולכן זמן הגלגול (1)O. h AR AL BR B A
גלגול LR C לפני הכנסת איבר v : A B AL CR BL BR h-1 h +1 +2 -1 A B C v לפני הכנסת איבר v : הוכנס איבר ל-BL שגרם לו להעלות את גובהו ל-h. גלגול LR: גובה העץ אחרי הגלגול הוא 2+h , כמו לפני ההכנסה. שינינו (1)O מצביעים ולכן זמן הגלגול (1)O. AL CR BL BR h-1 h -1 v C B A
דוגמא להכנסת ערך x לעץ AVL 8 6 10 4 12 15 24 20 29 11 14 13 19 18 +1 הוסף 18: לאחר גלגול LL: 8 6 10 4 12 15 24 19 29 11 14 13 18 20 cs,Technion
דוגמא להכנסת ערך x לעץ AVL 10 6 13 4 15 20 24 14 17 2 -1 7 12 11 הוסף 11 : לאחר גלגול LR: 10 6 13 4 15 20 24 14 17 7 12 11
דוגמא להכנסת ערך x לעץ AVL 8 6 10 11 19 13 25 29 23 17 12 15 -2 1 הוסף 15 (נחוץ גלגול RL) 8 6 10 13 19 11 25 29 23 17 12 15 -1 לאחר גלגול RL:
אלגוריתם להכנסת ערך x לעץ AVL הכנס את x כמו לעץ חיפוש בינרי. יהי v העלה שהוסף. h(v) = 0 כל עוד v root בצע: 4.p = parent(v) 5. אם h(p) h(v) +1 סיים. 6 . h(p) = h(v) +1 7. אם ב- p הופר האיזון, בצע גלגול וסיים. 8. אחרת v = p איך נחשב את parent(v) ? למשל, נוציא אותו ממחסנית בה נמצאים כל הצמתים על המסלול מהשורש ועד v. cs,Technion
זמן ההכנסה לעץ AVL כיוון שהצומת בו עושים גלגול לא משנה את גובהו, מבצעים רק גלגול אחד. מציאת המקום הדרוש להכנסה (h)O הוספת הצומת (1)O מציאת המקום בו מופר האיזון (אם מופר) (h)O תיקון האיזון (1)O סה"כ O(h) = O(log n) cs,Technion
אלגוריתם הוצאה הוצא צומת v כפי שהפעולה מתבצעת בעץ חיפוש בינרי. החל מלמטה ועד לשורש בצע: עדכן אתBF(v) אם |BF(v)| = 2 , בצע גלגול והמשך כלפי מעלה. אם גובה תת העץ ששורשו v לא השתנה, סיים. אם גובה תת העץ השתנה ו-BF(v) תקין, המשך כלפי מעלה. בהוצאה יתכן יותר מגלגול אחד. cs,Technion
דוגמא להוצאה מעץ AVL -2 -1 5 5 3 8 6 10 9 7 12 11 4 2 -2 2 8 1 * 4 6 -2 -1 5 גלגול RL 5 3 8 6 10 9 7 12 11 4 2 -2 2 8 1 * 4 6 10 3 7 9 12 11 גלגול RR 5 3 8 6 10 9 7 12 11 4 2 cs,Technion
דוגמא: הוצאה מעץ פיבונצ'י בהוצאה יתכן גלגול בכל צומת על המסלול בין הצומת המוצא ובין השורש. לדוגמא כאשר מוציאים עלה ראשון מעץ פיבונצ'י - Fi. A * C B תרגיל לבית: מהי סדרת הגלגולים המתבצעת כאשר מוציאים עלה ראשון מעץ פיבונצ'י - Fi. cs,Technion
עצי AVL מאפשרים חיפוש, הכנסה, הוצאה בזמן O(log n) מציאת המקום הדרוש להוצאה (h)O מציאת המקום בו מופר האיזון (אם מופר) (h)O תיקון האיזון (h)O (לכל היותר פעם בכל רמה) סה"כ O(h) = O(log n) עצי AVL מאפשרים חיפוש, הכנסה, הוצאה בזמן O(log n) ראו הדגמה באתר http://www.compapp.dcu.ie/~aileen/balance/ cs,Technion