Professional Documents
Culture Documents
הרצאה חמישית
הרצאה חמישית
עצי AVL
1
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
.1לקודקוד zאין ילדים :כלומר zעלה .פשוט נמחק אותו .מבנה ה BST-לא השתנה.
.2לקודקוד zילד בודד :נמחק את הקודקוד zתוך שנחבר את z.childל.z.parent -
כאשר אם zהיה בן שמאלי של אביו ( )z.parentאזי שכעת הבן של קודקוד zיהפוך
להיות בן שמאלי של קודקוד האב של ,zולהפך במידה ו z-היה בן ימני.
.3לקודקוד zשני ילדים :אם לקודקוד 2 zילדים ,אזי אנחנו יודעים (מהטענה האחרונה
בסוף שיעור קודם) שהקודקוד העוקב שלו ( :successorהעוקב בעל הערך הקטן
ביותר מבין ערכי הקודקודים הגדולים מ )z-הוא המינימום של תת העץ הימני של .z
היות והוא קודקוד המינימום (בתת) עץ חיפוש בינארי ,אזי שאין לו בן שמאלי .לכן
כעת נוכל לחזור ולהשתמש בסעיפים 1ו:2-
אם z.successorעלה :נחליף בין הערכים שלו לשל הקודקוד zונמחק אותו.
באופן הזה מבנה ה BST -נשמר.
אם z.successorבן ימני :נחליף את הערכים שלו ושל קודקוד zונפעל לפי סעיף
.2
לסיכום :באופן הזה כיסינו את כל המקרים האפשריים של מחיקת איבר מ BST-תוך שמירה
על המבנה והתכונות שלו.
2
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
3
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
ראינו שפעולות דינמיות שאנחנו יכולים לבצע על עץ חיפוש בינארי עלולות לשנות את גובה
העץ ולהפוך אותו מגובה לוגריתמי )𝑛𝑔𝑜𝑙(𝜃 = ℎלגובה לינארי )𝑛(𝜃 = .ℎברצוננו להמשיך
לבצע את הפעולות הללו תוך כדי שמירה על גובה לוגריתמי של העץ .אחת הדרכים לכך היא
בעזרת עצי .AVL
הגדרה :עץ AVLהוא עץ חיפוש בינארי המקיים שלכל קודקוד
)𝑡𝑓𝑒𝑙 . ℎ 𝑇(𝑥. 𝑟𝑖𝑔ℎ𝑡) − ℎ 𝑇(𝑥.כלומר ההפרש בין גובה תת העץ השמאלי לגובה ≤1
תת העץ הימני של כל קודקוד בעץ הוא לכל היותר .1תנאי זה (נקרא גם גורם האיזון)
מבטיח לנו שגובה עץ ה AVL-יישאר לוגריתמי.ℎ = 𝜃(𝑙𝑜𝑔𝑛) :
נסביר את כיוון החשיבה :עץ מאוזן משמע שגובה העץ הוא )𝑛𝑔𝑜𝑙(𝜃 = .ℎכדי להראות
זאת ,עלינו למצוא קשר בין גובה העץ hלבין מספר הקודקודים בעץ :אנחנו נחפש את
המספר המינימלי של קודקודים שקיים בעץ חיפוש בינארי מסוג ,AVLוכשנראה שהמספר
המינימלי הזה של קודקודים לא קטן מדי ,אז בהכרח יתקיים שה BST-הוא מצורה של .AVL
נגדיר את 𝑛 להיות מספר הקודקודים המינימלי בעץ AVLבגובה .kדוגמא עבור :k=4
4
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
𝑛(. טענת עזר 𝑛 :היא פונקציה מונוטונית עולה ממש> 𝑛 ) .
𝑛 .היות הוכחה :נסתכל על עץ AVLבגובה k+1עם מספר קודקודים מינימלי
וגובה העץ הוא k+1אזי בהכרח אחד מבניו הוא בגובה ( .kכאשר השני יכול להיות
בגובה kאו .)k-1נניח בה"כ שגובה תת העץ השמאלי הוא .kממינימליות העץ כולו,
נובע שבתת העץ השמאלי יש בדיוק 𝑛 קודקודים (כי גם הוא מינימלי) ולכן בעץ
𝑛 כלומר 𝑛 המקורי יש לפחות 𝑛 + 1קודקודים .מכאן נובע ש 𝑛 > ≥ 𝑛 + 1
היא פונקציה מונוטונית עולה ממש.
הוכחת הטענה המקורית :נמצא נוסחת נסיגה ל .𝑛 -נניח בה"כ שגובה תת העץ
𝑛 קודקודים .היות השמאלי הוא .k-1אזי מכאן נובע שבתת העץ השמאלי יש
)𝑡𝑓𝑒𝑙 . ℎ 𝑇(𝑥. 𝑟𝑖𝑔ℎ𝑡) − ℎ 𝑇(𝑥.לכן וזהו עץ , AVLבפרט הוא מקיים ש≤ 1 :
גובה תת העץ הימני הוא k-1או .k-2מאחר ומדובר בעץ עם מספר קודקודים
𝑛 ,אזי נובע שגובה העץ השמאלי הוא ,k-2 𝑛< מינימלי ,ובנוסף מתקיים ש
(אחרת זה לא היה עץ AVLמינימלי) ,וממינימליות העץ כולו ,נובע שבתת העץ הימני
𝑛 קודקודים. יש
אם נסכום סה"כ את כמות הקודקודים בתת העץ השמאלי ,תת העץ הימני והשורש,
𝑛= 𝑛 𝑛+ נקבל את נוסחת הנסיגה הבאה עבור 𝑛+ 1 :
הנוסחא שקיבלנו היא למעשה נוסחת פיבונצ'י (עד כדי הזזה) .אנחנו נרצה לראות
איך מתנהג nכפונקציה של .kאם נראה ש n-גדל אקספוננציאלית ב k-אזי זה אומר
𝑛 =1 שהגובה kהוא לוגריתמי.
𝑛 =2 אם כך נוסחת הנסיגה שלנו היא כזו:
5
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
)𝑡𝑓𝑒𝑙 . ℎ 𝑇(𝑥. 𝑟𝑖𝑔ℎ𝑡) − ℎ 𝑇(𝑥.אנחנו תזכורת :גורם האיזון בעצי AVLהוא ≤ 1
מעוניינים להכניס קודקוד חדשים לעצי ,AVLכך שימשיכו לקיים את גורם האיזון ,כלומר
יישארו עצי חיפוש בינארי מסוג .AVLלאחר הכנסת איבר נעלה מעלה אל שורש העץ ובכל
קודקוד בדרך נתקן את הגובה .נבדוק את גורם האיזון בכל שלב ,וכשניתקל בהפרה – נעצור.
קיימים שלושה מקרים בעת הכנסת קודקוד לעץ :AVL
ביצוע הרוטציה הנ"ל היא בסיבוכיות זמן של ) ,O(1מכיוון שאנו משנים מצביעים למספר
קבוע של קודקודים בעץ .בנוסף לאחר הרוטציה מתקיימים התנאים הבאים:
6
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
נפריד את הרוטציה לשתי רוטציות נפרדות :רוטציית RRב ,A-ולאחריה רוטציית LLב.C-
7
מבני נתונים ( // )67109פרופ' דורית אהרונוב //תשפ"ד //סמסטר א' //הרצאה חמישית
8