480 likes | 813 Views
עצי AVL. Prepared by: Hana Zimmerman-Karl Hanazimmermankarl@gmail.com. המטרה. מבנה נתונים שיתמוך בפעולות בסיסיות על קבוצות דינמיות: הוספה, חיפוש, מינימום/מקסימום, ביטול סריקה, מיון, בצורה יעילה ביותר. האם עצי חיפוש בינריים טובים מספיק ?. ביצועים במקרה הגרוע : הוספה – חיפוש –
E N D
עצי AVL Prepared by: Hana Zimmerman-Karl Hanazimmermankarl@gmail.com
המטרה מבנה נתונים שיתמוך בפעולות בסיסיות על קבוצות דינמיות: • הוספה, • חיפוש, • מינימום/מקסימום, • ביטול • סריקה, • מיון, בצורה יעילה ביותר.
האם עצי חיפוש בינריים טובים מספיק ? ביצועים במקרה הגרוע : • הוספה – • חיפוש – • מינימום/מקסימום – • ביטול – • סריקה – • מיון – גובה העץ – O(n) גובה העץ – O(n) גובה העץ – O(n) בגלל חיפוש העוקב -גובה העץ – O(n) יש לבקר כל איבר – O(n) הוספת n איברים - O(n2)
הבעיה : • גובהו של עץ החיפוש הבינרי במקרה הגרוע – O(n)
הפתרון • תחזוקה של העץ, כך שישאר נמוך גם לאחר שנבצע פעולות הוספה וביטול. • גובהו יהיה : • משפחה כזו של עצים : עצי AVL(Adel’son, Vel’skii, Landis : AVL – חוקרים רוסים שהיו הראשונים שחקרו את משפחת העצים הזו)
רשימת הנושאים שנעבור : • תכונת עץ AVL • רוטציות (ימנית/שמאלית) • מקרים שונים בהוספה • מקרים שונים בביטול הגדרות רוטציות הוספה ביטול
גובה של עץ בינרי T • מספר הצמתים במסלול הארוך ביותר מהשורש אל איזשהו עלה ב- T. • גובה של עץ ריק מוגדר להיות 0 . • (גובהו של עץ המכיל צומת יחיד (עלה) הוא 1.)
גובהי תתי עצים – דוגמא 5 3 4 2 1 3 3 1 1 2 2 2 1 1 1 1
גורם איזון של צומת בעץ בינרי - הגדרה גובה תת העץ השמאלישל הצומתפחותגובה תת העץ הימנישל הצומת -1 1 0 3 4 -2 2 1 3 0 3 0 0 0 0 0 0 0 1 1 2 2 -1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0
גורם האיזון – הערה חשובה!!! גורם האיזון של צומת תלוי רק בגובהי שני תתי העצים שתחתיו, ואינו תלוי כלל בגורמי איזון של צמתים אחרים !!!!
עץ AVL • עץ חיפוש בינרי, שבו גורם האיזון של כל צומת הוא 0, 1, או 1-. • (לכל צומת בעץ, הגבהים של שני תתי העצים שלו, אינם נבדלים ביותר מ- 1) • עץ כזה יקרא – עץ מאוזן.
הוספת איבר עם מפתח K שלב 1 • הכנסת K לעץ, כעלה, בעץ חיפוש בינרי. תוך כדיהוספה, נשמור מצביע, לאב הקדום, הנמוך ביותר של K, שגורם האיזון שלו לפני ההכנסה, היה 1או 1-. • נסמן צומת זה ב- A. (אם אין צומת כזה, ברור, שגם לאחר הכנסת K, העץ יישאר מאוזן) • נסמן ב- B את הבן של A, בכיוון ההוספה של K.
מציאת A ו- B - דוגמא 1 A נוסיף את 38 1 100 B A 1 87 237 B 54 0 94 180 275 10 0 68 91 98 108 199 245 301 3 22 0 62 75 K 38
100 K מציאת A ו- B תרגיל 1 450 נוסיף את 100 844 296 50 330 790 1000 38 190 303 472 73 231
111 K מציאת A ו- B - תרגיל 2 נוסיף את 111 77 57 140 20 69 188 101 10 37 64 76 90 121 167 199 0 15 30 44 130 80 100 158 174 190 200
K 327 מציאת A ו- B - תרגיל 3 נוסיף את 327 158 88 281 55 101 300 190 21 66 99 141 174 222 297 328 8 28 169 182 201 223 285 299 325 341
הוספת איבר עם מפתח K שלב 2 • בדיקה אם בעקבות הכנסת K העץ הפך להיות לא מאוזן. • העץ הפך להיות לא מאוזן אם גורם האיזון של אחד הצמתים הפך להיות 2 או 2-. • מספיק לבדוק את גורם האיזון של A!
34 93 124 178 K 24 בדיקה - האם העץ עדיין מאוזן (1)? 109 66 145 A 1 6 38 71 103 117 131 165 189 3 8 68 73 גורם האיזון של A הפך ל- 2. האיזון הופר.
בדיקה - האם העץ עדיין מאוזן (2)? 109 66 145 A 34 93 124 178 6 38 71 103 117 131 165 189 3 8 48 68 73 K גורם האיזון של A הפך ל- 0. העץ מאוזן.
B 1 A 1 2 A 3T 2 1 1T 3T K K הוספת איבר לעץ AVLגורם איזון של A הפך ל- 2 מקרה א' 0 A 1 2 B 0 1 3T 0 2T 1T 2T Kמוכנס לתת-עץ שמאלי של A ולתת-עץ שמאלי של B
178 178 61 239 61 239 A 40 201 278 40 82 201 278 94 B 82 100 195 220 255 303 195 220 255 303 24 49 24 49 73 94 18 35 73 88 18 35 69 100 K 69 K הוספה – מקרה 1 - דוגמא B A 88
הוספת איבר לעץ AVLגורם איזון של A הפך ל- 2 מקרה ב' K A 1 2 B 0 1- 3T 1T 2T Kמוכנס לתת-עץ שמאלי של A ולתת-עץ ימני של B
A B 0 1- 2 A B 1- 2 1 3T 1T 1T 2T 2T 3T K K מקרה ב' – רוטציה אחת אינה מספיקה -2 1 0 1
מתי ואילו גלגולים נבצע • מ- A, נלך שני צעדים במסלול לעבר העלה העמוק ביותר בתת העץ ש- A הוא השורש שלו. • לפי שני הצעדים האלה מחשבים את סוג הגלגול: לצעד הראשון נותנים את האות הראשונה ולצעד השני נותנים את האות השניה. • לאחר הגלגול, יש לעדכן את גורמי האיזון של הצמתים שבין אביו של K, ל-A. או עד לשורש (אם אין A)
A 2 B 1- 4T C 1- 0 1T 1 2T 3T 2T 3T מקרה ב2 K K K מקרה ב' – מבט מפורט A 2 1 B 1- 0 4T C 1T 2T מקרה ב1
A C A 1 2 1- C B A 0 B 1- 2 1- 4T 4T C B 1- 3T 3T 2T 1T 1T 0 4T 1T 2T 2T 3T K K K מקרה ב1 – גלגול LR - שתי רוטציות רוטציה LL (ימנית) על A רוטציה RR (שמאלית) על B 2 0 1- 0 1 1-
C A A 2 1 1- C B A 0 B 1- 2 1- 4T 4T C B 1- 3T 1T 0 3T 1T 2T 4T 1T 2T 2T 3T K K K מקרה ב2 – גלגול LR שתי רוטציות רוטציה LL (ימנית)על A רוטציה RR שמאלית על B 2 -1 1- 0 0 1
178 178 61 239 61 239 A 40 201 278 40 201 278 94 94 195 220 255 303 24 49 195 220 255 303 49 24 82 100 100 88 B 18 35 73 88 88 18 35 82 90 K 90 73 K הוספה – מקרה ב2 - דוגמא רוטציה RR (שמאלית) על B A B
178 178 61 239 61 239 A 40 88 201 278 40 201 278 94 A 195 220 255 303 24 49 82 195 220 255 303 24 49 100 94 88 73 18 35 18 35 100 90 90 K K הוספה – מקרה ב2 – דוגמא - המשך רוטציה LL (ימנית) על A 82 73
הוספת איבר לעץ AVL מקרה ג'נדרש גלגול RR 1 A 0 B 3T 2T 1T Kמוכנסלתת-עץ ימני של A ולתת-עץ ימני של B K
הוספת איבר לעץ AVL מקרה ד'נדרש גלגול RL 1- A 0 B 3T 2T 1T Kמוכנס לתת-עץ ימני של A ולתת-עץ שמאלי של B K
ביטול איבר מעץ AVL- 3 מקרים : מקרה א' • גורם האיזון של האבא היה 0 לפני הביטול,ובעיקבות הביטול הוא משתנה ל- 1 או 1-. • גובה תת העץ שהאבא הוא שורשו – אינו משתנה ולכן אין השפעה על שאר העץ.
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה א' 13 9 17 5 11 15 19 1 2 7 10 12 14 16 18 20 K 1 3 6 8 גורם האיזון של האבא הופך מ- 0 ל- 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה א 13 9 17 5 11 15 19 -1 2 7 10 12 14 16 18 20 K 1 3 6 8 גורם האיזון של האבא הופך מ- 0 ל- 1-
ביטול איבר מעץ AVL- 3 מקרים : מקרה ב' • גורם האיזון של האבא היה 1 או 1- לפני הביטול,ובעיקבות הביטול הוא משתנה ל- 0. • גובה תת העץ שהאבא הוא שורשו – קטן ב- 1 ולכן, יש השפעה על הסבא. יש לעדכן את גורם האיזון של הסבא, ולהמשיך לעדכן את העץ, לפי השינוי בגורם האיזון של הסבא.
ביטול איבר מעץ AVL – מקרה ב' 13 1 9 1- 0 0 17 0 5 1 11 1- 15 0 0 19 -1 2 0 7 0 0 10 1 12 0 14 16 0 0 18 20 0 K 0 3 0 גורם האיזון של האבא הופך מ- 1- ל- 0. עולים בעץ ומשנים את גורמי האיזון של האבות, בהתאם למה שצריך
0 0 0 1 1- 1 1 -1 0 0 1 1- 0 1 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה ב' 13 9 1 17 5 11 15 0 19 2 7 10 12 14 16 18 0 20 3 K גורם האיזון של האבא הופך מ- 1- ל- 0. עולים בעץ ומשנים את גורמי האיזון של האבות, בהתאם למה שצריך
ביטול איבר מעץ AVL- 3 מקרים : מקרה ג' • גורם האיזון של האבא היה 1 או 1- לפני הביטול,ובעיקבות הביטול הוא משתנה ל- 2 או 2-. • תת העץ שהאבא הוא שורשו – אינו מאוזן, ויש לאזנו ע"י גלגול. לאחר הגלגול, גובהו של תת העץ יכול להפוך לנמוך ב- 1 (או לא להשתנות כלל) ולכן יתכן וצריך לעדכן את גורם האיזון של הסבא ולפעול בהתאם.
ביטול איבר מעץ AVL – מקרה ג' 1 1 2 1 0 0 0 0 K 0 0 0 0 0 0 0 0 0 גורם האיזון של האבא הופך מ- 1 ל- 2.
גלגול LL סביב צומת זה 1 1 1 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה ג' - המשך גורם האיזון של "האח" של הצומת המבוטל הוא 0 1- 0 2 1 0 0 0
ביטול איבר מעץ AVL – מקרה ג' 1 1 2 1 0 0 0 0 K 0 0 0 0 0 0 0 0 גורם האיזון של האבא הופך מ- 1 ל- 2.
1 1 1 0 0 0 0 0 0 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה ג' - המשך גורם האיזון של "האח" של הצומת המבוטל הוא 1 2 1 0 גלגול LL סביב צומת זה 1 2 2 0 0 0 1 1 0 0 0 0 0 0 יש לעדכן את גורם האיזון של האבא, ולבדוק אם יש צורך באיזון נוסף! 0 0 0 0
1 1 1- 0 0 0 0 0 0 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה ג' - המשך גורם האיזון של "האח" של הצומת המבוטל הוא 1- נדרש גלגול LR 2 1 0 גלגול LL סביב צומת זה 2 1 1 0 2 0 0 1- 0 גלגול RR סביב צומת זה 0 0 0 0 0 יש לעדכן את גורם האיזון של האבא, ולבדוק אם יש צורך באיזון נוסף! 0 0 0 0
1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 ביטול איבר מעץ AVL – מקרה ג' - המשך שוב גורם האיזון של "האח" הוא 1 גלגול LL סביב צומת זה 0 2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 הגענו עד השורש – ולכן נסיים
ביצועים של עצי AVL ביצועים במקרה הגרוע : • הוספה – • חיפוש – • מינימום/מקסימום – • ביטול – • סריקה – • מיון – גובה העץ – O(lgn) גובה העץ – O(lgn) גובה העץ – O(lgn) גובה העץ – O(lgn) יש לבקר כל איבר – O(n) הוספת n איברים - O(nlgn)