+1 - Technion

‫‪1‬‬
‫מילון )‪(Dictionary‬‬
‫‪AVL‬‬
‫מילון מאחסן אוסף של ְרׁשּומֹות מהטיפוס (מפתח‪ ,‬אינפורמציה)‪.‬‬
‫המפתח שונה (בד"כ) מרשומה לרשומה‪.‬‬
‫אוסף המפתחות האפשריים מסומן ב‪ .U-‬לדוגמא‪ :‬מספרים שלמים‪.‬‬
‫פעולות‪:‬‬
‫•אתחול‪ :‬יצירת מילון ריק‪.‬‬
‫)‪create(D‬‬
‫•חיפוש‪ :‬החזר מצביע לרשומה ב‪ D -‬שמפתחה ‪ x‬או ‪.NULL‬‬
‫)‪find(D,x‬‬
‫•הוספה‪ :‬הוסף ל‪ D -‬רשומה שמפתחה ‪.x‬‬
‫)‪insert(D,x,info‬‬
‫•הוצאה‪ :‬סלק מ‪ D -‬רשומה שמפתחה ‪.x‬‬
‫)‪delete(D,x‬‬
‫כללים‪:‬‬
‫• ‪ x‬שייך לקבוצת המפתחות ‪.U‬‬
‫• כל ‪ x‬מופיע לכל היותר פעם אחת במילון (בדר"כ)‪.‬‬
‫‪cs,Technion‬‬
‫‪2‬‬
‫מילון‪ ,‬מבנה חיפוש ועצי חיפוש‬
‫‪AVL‬‬
‫פעולות נוספות כאשר מוגדר סדר על ‪( U‬למשל כאשר מפתח הוא מספר)‪:‬‬
‫מינימום‪ :‬החזר את המפתח המינימלי ב‪.D -‬‬
‫עוקב‪ :‬החזר מצביע לאיבר במילון ‪ D‬בעל המפתח הקטן‬
‫)‪min(D‬‬
‫)‪next(D,x‬‬
‫ביותר שגדול מ‪.x -‬‬
‫מילון ‪ +‬מינימום ‪ +‬עוקב נקרא = מבנה חיפוש‬
‫מטרה‪ :‬לבצע את כל הפעולות בזמן )‪( O(log n‬במקרה הגרוע ביותר) כאשר ‪n‬‬
‫הוא מספר המפתחות הנמצאים במילון בזמן ביצוע הפעולה‪.‬‬
‫עצי חיפוש‪ :‬היא משפחה של מימושים למבנה חיפוש‪.‬‬
‫‪cs,Technion‬‬
3
AVL
‫עץ חיפוש בינרי‬
x
y
z
yxz
cs,Technion
Lecture 4 of Geiger & Itai’s slide brochure
4
AVL
www.cs.technion.ac.il/~dang/courseDS
:‫סיבוכיות הפעולות‬
‫סיבוכיות‬
cs,Technion
function
‫פעולה‬
O(1)
create(D)
‫אתחול‬
O(h)
find(D,x)
‫חיפוש‬
O(h)
insert(D,x,info)
‫הוספה‬
O(h)
delete(D,x)
‫הוצאה‬
O(h) → O(1)
min(D)
O(h) → O(1)
next(D,x)
‫מינימום‬
‫עוקב‬
AVL
AVL ‫דוגמאות לעצי‬
h(NULL) = -1
‫‪AVL‬‬
‫‪h(NULL) = -1‬‬
‫דוגמאות לעצים שהם לא ‪AVL‬‬
‫‪AVL‬‬
‫משפט‪:‬‬
‫הרעיון הכללי‬
‫‪h/2‬‬
‫‪n+1=N  N h  2‬‬
‫יהי ‪ T‬עץ כלשהו‬
‫בגובה ‪ℎ‬‬
‫מספר העלים‬
‫של העץ‬
‫מספר הצמתים‬
‫של העץ‬
‫מספר מינימלי‬
‫של עלים בעץ‬
‫בגובה ‪ℎ‬‬
AVL
:1 ‫טענה‬
T
#
=#
+1
:1 ‫הוכחת טענה‬
‫באינדוקציה‬
N(T) = #
n(T) = #
N(T) = N(Tleft) + N(Tright)
= n(Tleft)+1 + n(Tright)+1
= n(T)+1
‫‪AVL‬‬
‫משפט‪:‬‬
‫טענה ‪:1‬‬
‫‪+1‬‬
‫‪=#‬‬
‫‪#‬‬
‫הגדרה‪ :‬נסמן ב‪ Nh -‬מספר‬
‫מינימאלי של‬
‫טענה ‪:2‬‬
‫בעץ ‪ AVL‬בגובה ≤ 𝒉‬
‫‪Nh-2 < Nh-1‬‬
‫‪AVL‬‬
‫הגדרה‪ :‬נסמן ב‪ Nh -‬מספר‬
‫טענה ‪:3‬‬
‫בעץ ‪ AVL‬בגובה ≤ ‪h‬‬
‫מינימאלי של‬
‫‪Nh=Nh-1+Nh-2‬‬
‫הוכחת טענה ‪:3‬‬
‫‪Nh-1 Nh-2‬‬
‫שלשה מקרים‬
‫‪Nh-2 Nh-1‬‬
‫‪Nh-1 Nh-1‬‬
‫‪Nh=min(Nh-1+Nh-2 , Nh-1 + Nh-1) = Nh-1+Nh-2‬‬
‫‪AVL‬‬
‫משפט‪:‬‬
‫טענה ‪:1‬‬
‫‪+1‬‬
‫‪=#‬‬
‫‪#‬‬
‫הגדרה‪ :‬נסמן ב‪ Nh -‬מספר‬
‫בעץ ‪ AVL‬בגובה ‪h‬‬
‫מינימאלי של‬
‫‪Nh-2 < Nh-1‬‬
‫טענה ‪:2‬‬
‫‪Nh=Nh-1+Nh-2‬‬
‫טענה ‪:3‬‬
‫טענה ‪:4‬‬
‫‪Nh> 2h/2‬‬
AVL
Nh  2
N0  2  2
0/ 2
N1  3  2
:4 ‫טענה‬
:4 ‫הוכחת טענה‬
‫באינדוקציה‬
1/ 2
N h =N h-1 +N h-2  2
Nh  2
h/2
h/2
(h 1) / 2
3 ‫טענה‬
2
(h  2) / 2
1
 1
h/2
 2

 2 2
AVL
:‫משפט‬
#
=#
N  n 1
+1
Nh  2
h/2
n+1=N  N h  2
h/2
:1 ‫טענה‬
:4 ‫טענה‬
h=2(h/2) < 2 log(N h ) < 2 log(n+1)
AVL
:‫משפט‬
‫הוכחנו‬
.h=2 log (n+1) ‫ אזי‬,h ‫ צמתים וגובה‬n ‫ בן‬AVL ‫ עץ‬T ‫יהי‬
Nh  2
Nh =Nh-1 +Nh-2
 1+ 5 


2 

Nh =
h+3
h/2
N0  2
 1 5 
+

 2 
5
h+3
N1  3
‫מספרי פיבונצ'י‬
AVL
 1+ 5 


2 

Nh =
Nh 

h+3
 1 5 
+

 2 
5
h 3
‫נקרא יחס הזהב‬
5
h+3
1+ 5

2
h  log N n / log   1.44 log n
AVL
:)Fibonacci trees) ‫משפחת עצי פיבונצ'י‬
F0
F1
F2
F3
Fi+1
Fi-1
Fi
‫‪17‬‬
‫‪AVL‬‬
‫ניתוח מספר צמתים בעץ פיבונצ'י‬
‫‪n0  0, n1  1, n2  1, n3  2, n4  3, n5  5,‬‬
‫טענה‪ :‬לעץ פיבונאצ'י ‪ Fi‬יש ‪ |Fi| = ni+3 - 1‬צמתים כאשר ‪ ni‬הוא מספר‬
‫פיבונצ'י ה‪.i-‬‬
‫באינדוקציה על ‪i‬‬
‫הוכחה‪:‬‬
‫לדוגמא‪:‬‬
‫‪F2‬‬
‫‪F3‬‬
‫‪F0‬‬
‫‪F1‬‬
‫בסיס האינדוקציה‪ :‬ראינו בתרשים‬
‫הנחת האינדוקציה‪ :‬נניח נכונות לכל ‪F j  n j 3  1 j ≤ i‬‬
‫פיבונצ'י‪,‬‬
‫מספרי‬
‫האינדוקציה‬
‫‪n =2,‬‬
‫והגדרת ‪n‬‬
‫‪=3,‬‬
‫מטענה‪ ,2n‬הנחת ‪n =5,‬‬
‫צעד האינדוקציה‪=8 :‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪Fi  Fi 1  Fi 2  1  (ni  2  1)  (ni 1  1)  1‬‬
‫‪ ni 3  1‬‬
‫‪18‬‬
‫‪AVL‬‬
‫ניתוח מספר צמתים בעץ פיבונצ'י‬
‫‪n0  0, n1  1, n2  1, n3  2, n4  3, n5  5,‬‬
‫טענה‪ :‬לעץ פיבונאצ'י ‪ Fi‬יש ‪ |Fi| = ni+3 - 1‬צמתים כאשר ‪ ni‬הוא מספר‬
‫פיבונצ'י ה‪.i-‬‬
‫הוכחה‪ :‬באינדוקציה על ‪i‬‬
‫בסיס האינדוקציה‪ :‬ראינו בתרשים‬
‫הנחת האינדוקציה‪ :‬נניח נכונות לכל ‪F j  n j 3  1 j ≤ i‬‬
‫צעד האינדוקציה‪ :‬מטענה ‪ ,2‬הנחת האינדוקציה והגדרת מספרי פיבונצ'י‪,‬‬
‫‪Fi  Fi 1  Fi 2  1  (ni  2  1)  (ni 1  1)  1‬‬
‫‪ ni 3  1‬‬
‫‪19‬‬
‫‪AVL‬‬
‫מספרי פיבונצ'י (המשך)‬
‫הוכחת הטענה ‪ :‬נתונה המשוואה הבאה‪.‬‬
‫נניח פתרון מהצורה‪:‬‬
‫נציב במשוואה ונקבל‪:‬‬
‫‪ni 1  ni  ni 1‬‬
‫‪ni  a  x i‬‬
‫‪a  x i 1  a  x i  a  x i 1‬‬
‫‪x2  x 1‬‬
‫‪1 5‬‬
‫‪1 5‬‬
‫‪1 5‬‬
‫‪x1, 2 ‬‬
‫‪x1, 2 ‬‬
‫‪‬‬
‫‪‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫משוואת ההפרשים ליניארית ולכן כל צרוף ליניארי של פתרונות מהווה פתרון‪:‬‬
‫‪ b  b 2  4 ac‬‬
‫‪2a‬‬
‫‪ni  a   i  b   i‬‬
‫שימוש בתנאי השפה מוביל‬
‫למציאת הקבועים‪:‬‬
‫‪n0  0  a   0  b   0  a  b  0  b  a‬‬
‫‪1 5 ‬‬
‫‪1 5 ‬‬
‫‪1‬‬
‫‪  a ‬‬
‫‪ 1  a ‬‬
‫‪n1  1  a  ‬‬
‫‪‬‬
‫‪ 2 ‬‬
‫‪2‬‬
‫‪5‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫לפיכך פתרון המשוואה (כולל תנאי ההתחלה) הוא‪:‬‬
‫‪i   i‬‬
‫‪ni ‬‬
‫‪5‬‬
‫‪cs,Technion‬‬
‫‪20‬‬
‫‪AVL‬‬
‫איזון בעץ ‪AVL‬‬
‫נובע שזמן החיפוש בעץ ‪ AVL‬הוא )‪ .O(log n‬נצטרך לדאוג שלאחר‬
‫הכנסה או הוצאה‪ ,‬העץ הנותר יהיה עץ ‪.AVL‬‬
‫‪12‬‬
‫‪15‬‬
‫‪24‬‬
‫‪29‬‬
‫‪8‬‬
‫‪10‬‬
‫‪14‬‬
‫‪20‬‬
‫‪13‬‬
‫‪6‬‬
‫‪11‬‬
‫‪4‬‬
‫‪19‬‬
‫‪18‬‬
‫לאחר הוספת האיבר ‪ 18‬נתקבל עץ שאינו עץ ‪.AVL‬‬
‫אבל נתן לשנות את תת העץ שבו הופר האיזון בצורה‬
‫הבאה‪:‬‬
‫תיקון כזה נקרא גלגול‪.‬‬
‫בזמן הוצאה קיימת הפרת איזון דומה‪ .‬למשל בהוצאת ‪.29‬‬
‫‪19‬‬
‫‪20‬‬
‫‪20‬‬
‫‪18‬‬
‫‪19‬‬
‫‪18‬‬
‫‪cs,Technion‬‬
‫‪21‬‬
‫‪AVL‬‬
‫איזון בעץ ‪( AVL‬המשך)‬
‫עבור צומת ‪ v‬בעץ בינרי נסמן‪:‬‬
‫)‪ hL(v‬גובה תת העץ השמאלי של ‪.v‬‬
‫בעץ ‪ AVL‬תקין‪|BF(v)|≤1 :‬‬
‫)‪ hR(v‬גובה תת העץ הימני של ‪.v‬‬
‫גורם האיזון )‪ (Balance Factor‬מחושב כהפרש‬
‫הגבהים‪BF(v) = hL(v) – hR(v) :‬‬
‫לדוגמא‪:‬‬
‫מצד שמאל של כל צומת‬
‫מסומן גורם האיזון‪.‬‬
‫‪-2 -1 12‬‬
‫‪-1 8‬‬
‫‪-2 -1 15‬‬
‫‪+1 14 +2 +1 24‬‬
‫‪0‬‬
‫‪29‬‬
‫‪0 13 +2+1 20‬‬
‫‪-1 10‬‬
‫‪0 6‬‬
‫‪0 11‬‬
‫‪+1 0 19‬‬
‫‪18‬‬
‫אחרי ההכנסה של ‪ 18‬גורם האיזון מופר על מסלול ההכנסה‪.‬‬
‫‪cs,Technion‬‬
‫‪22‬‬
‫‪AVL‬‬
‫אבחנות‬
‫‪ .1‬הצמתים היחידים שאולי הופר בהם האיזון הם הצמתים לאורך מסלול הכנסה‪/‬הוצאה‪.‬‬
‫‪ .2‬אם עבור צומת ‪ v‬במסלול הנ"ל גובה העץ ששורשו ‪ v‬לא השתנה אזי גורמי האיזון בצמתים‬
‫שמעליו במסלול לא השתנו‪.‬‬
‫‪ .3‬אם גורם האיזון הופך ל‪ 2-‬או ל ‪ ,-2‬אזי יש לבצע גלגול על מנת שהעץ יחזור להיות עץ ‪.AVL‬‬
‫‪ .4‬גורם האיזון לא יכול להיות גדול מ‪ 2-‬בערכו המוחלט כי בכל הכנסה‪/‬הוצאה הוא משתנה ב‪ 1-‬לכל‬
‫היותר‪.‬‬
‫‪ .5‬גלגול– פעולה המתבצעת על צומת שהופר בו האיזון על מנת להחזירו לתחום‬
‫המותר ‪[−1 … 1].‬‬
‫‪-1 12‬‬
‫‪-1 15‬‬
‫‪+1 24‬‬
‫‪0‬‬
‫‪29‬‬
‫‪+1 20‬‬
‫‪8‬‬
‫‪-1 10‬‬
‫‪+1 14‬‬
‫‪0 19‬‬
‫‪0 13‬‬
‫‪-1‬‬
‫‪0 6‬‬
‫‪0 11‬‬
‫‪cs,Technion‬‬
‫‪23‬‬
‫‪AVL‬‬
‫יהי ‪ v‬הצמת האחרון שהופר בו האיזון‬
‫טענה גורם האיזון החדש ‪ b‬של ‪u‬‬
‫לא יכול להיות ‪0‬‬
‫‪h‬‬
‫האבר נכנס לתת העץ הימני של ‪v‬‬
‫אם גורם האיזון החדש הוא ‪0‬‬
‫ונניח האבר נכנס לתת עץ הימני של ‪u‬‬
‫אזי גורם האיזון הישן היה ‪+1‬‬
‫אזי גובה תת העץ של‪ u -‬לא השתנה‬
‫‪u b‬‬
‫‪h-1‬‬
‫‪v -2‬‬
‫)‪BF(v) = hL(v) – hR(v‬‬
‫אזי גורם האיזון של‪ v -‬לא השתנה‬
‫‪TR‬‬
‫‪TL‬‬
‫‪h‬‬
‫סתירה‬
‫לכן ‪ b=+1‬או ‪b=-1‬‬
‫‪cs,Technion‬‬
‫‪24‬‬
‫‪AVL‬‬
‫סוגי הגלגולים‬
‫סוג הגלגול‪ ,‬כלומר הדרך לתקן חוסר איזון בצומת‪ ,‬תלוי בצורה בה האיזון מּופָ ר‪.‬‬
‫נתן לסווג חוסר איזון בארבע קטגוריות שונות המכסות את כל המקרים‪.‬‬
‫גלגול ‪RR‬‬
‫גלגול ‪RL‬‬
‫‪-2‬‬
‫‪-1‬‬
‫גלגול ‪LR‬‬
‫‪-2‬‬
‫גלגול ‪LL‬‬
‫‪+2‬‬
‫‪+2‬‬
‫‪-1‬‬
‫‪+1‬‬
‫בבן הימני ‪vR‬‬
‫בשורש ‪v‬‬
‫בבן השמאלי ‪vL‬‬
‫‪BF(v)=2‬‬
‫‪BF(vL) =1‬‬
‫‪LL‬‬
‫‪BF(v)=2‬‬
‫‪BF(vL) = -1‬‬
‫‪LR‬‬
‫‪+1‬‬
‫הגלגול המתאים‬
‫‪BF(v)= -2‬‬
‫‪BF(vR) = -1‬‬
‫‪RR‬‬
‫‪BF(v)= -2‬‬
‫‪BF(vR) = 1‬‬
‫‪RL‬‬
‫‪cs,Technion‬‬
‫‪25‬‬
‫‪AVL‬‬
‫גלגול ‪LL‬‬
‫לפני הכנסת ‪ :v‬גובה העץ הוא ‪.h +2‬‬
‫‪+1 B +2‬‬
‫הוכנס צומת ‪ v‬שהגדיל את גובה ‪ AL‬ל‪.h +1-‬‬
‫מצד ימין של הצמתים מסומנים‬
‫גורמי האיזון שהשתנו‪.‬‬
‫‪h‬‬
‫גלגול ‪ : LL‬יעביר את ‪ A‬לשורש‬
‫‪0 A +1‬‬
‫‪BR‬‬
‫‪AR‬‬
‫‪h‬‬
‫‪AL‬‬
‫‪v‬‬
‫‪A 0‬‬
‫אחרי הגלגול‪:‬‬
‫גובה העץ לאחר הגלגול הוא ‪ ,h +2‬כמו‬
‫לפני ההכנסה‪ .‬השורש מאוזן‪ .‬שינינו (‪O)1‬‬
‫מצביעים ולכן זמן הגלגול (‪.O)1‬‬
‫‪B 0‬‬
‫‪h‬‬
‫‪AL‬‬
‫‪h‬‬
‫‪BR‬‬
‫‪AR‬‬
‫‪v‬‬
‫‪26‬‬
‫‪AVL‬‬
‫גלגול ‪LR‬‬
‫‪+2‬‬
‫לפני הכנסת איבר ‪:v‬‬
‫‪C‬‬
‫‪+1‬‬
‫‪-1‬‬
‫‪+1‬‬
‫‪h‬‬
‫‪0‬‬
‫‪CR‬‬
‫הוכנס איבר ל‪ BL-‬שגרם לו‬
‫להעלות את גובהו ל‪.h-‬‬
‫‪BR‬‬
‫גלגול ‪:LR‬‬
‫‪CR‬‬
‫‪AL‬‬
‫‪v‬‬
‫‪0 A‬‬
‫‪-1 C‬‬
‫‪h‬‬
‫‪h-1‬‬
‫‪BL‬‬
‫‪0B‬‬
‫גובה העץ אחרי הגלגול‬
‫הוא ‪ ,h +2‬כמו לפני‬
‫ההכנסה‪.‬‬
‫שינינו (‪ O)1‬מצביעים ולכן‬
‫זמן הגלגול (‪.O)1‬‬
‫‪B‬‬
‫‪A‬‬
‫‪0‬‬
‫‪BR‬‬
‫‪h-1‬‬
‫‪BL‬‬
‫‪h‬‬
‫‪v‬‬
‫‪AL‬‬
‫‪27‬‬
‫‪AVL‬‬
‫דוגמא להכנסת ערך ‪ x‬לעץ ‪AVL‬‬
‫הוסף ‪:18‬‬
‫‪12‬‬
‫‪8‬‬
‫‪15‬‬
‫‪10‬‬
‫‪24‬‬
‫‪14‬‬
‫‪29‬‬
‫‪13 +2 20‬‬
‫‪+1 19‬‬
‫‪6‬‬
‫‪11‬‬
‫‪4‬‬
‫‪12‬‬
‫‪18‬‬
‫‪15‬‬
‫‪24‬‬
‫לאחר גלגול ‪:LL‬‬
‫‪20‬‬
‫‪10‬‬
‫‪14‬‬
‫‪0 19‬‬
‫‪29‬‬
‫‪8‬‬
‫‪18‬‬
‫‪13‬‬
‫‪11‬‬
‫‪6‬‬
‫‪4‬‬
‫‪cs,Technion‬‬
‫‪28‬‬
‫דוגמא להכנסת ערך ‪ x‬לעץ ‪AVL‬‬
‫‪AVL‬‬
‫‪+2 15‬‬
‫הוסף ‪: 11‬‬
‫‪20‬‬
‫‪24‬‬
‫‪10‬‬
‫‪17‬‬
‫‪-1‬‬
‫‪6‬‬
‫‪13‬‬
‫‪14‬‬
‫‪4‬‬
‫‪7‬‬
‫‪12‬‬
‫‪11‬‬
‫‪13‬‬
‫‪15‬‬
‫לאחר גלגול ‪:LR‬‬
‫‪14‬‬
‫‪20‬‬
‫‪24‬‬
‫‪10‬‬
‫‪6‬‬
‫‪12‬‬
‫‪11‬‬
‫‪17‬‬
‫‪7‬‬
‫‪4‬‬
‫‪29‬‬
‫דוגמא להכנסת ערך ‪ x‬לעץ ‪AVL‬‬
‫הוסף ‪( 15‬נחוץ גלגול ‪)RL‬‬
‫‪AVL‬‬
‫‪-2 11‬‬
‫‪1 19‬‬
‫‪25‬‬
‫‪29‬‬
‫‪8‬‬
‫‪10‬‬
‫‪13‬‬
‫‪6‬‬
‫‪12‬‬
‫‪17 23‬‬
‫‪15‬‬
‫‪-1 13‬‬
‫לאחר גלגול ‪:RL‬‬
‫‪11‬‬
‫‪0 19‬‬
‫‪25‬‬
‫‪29‬‬
‫‪12‬‬
‫‪10‬‬
‫‪17‬‬
‫‪23‬‬
‫‪8‬‬
‫‪15‬‬
‫‪6‬‬
‫‪30‬‬
‫‪AVL‬‬
‫אלגוריתם להכנסת ערך ‪ x‬לעץ ‪AVL‬‬
‫‪ .1‬הכנס את ‪ x‬כמו לעץ חיפוש בינרי‪ .‬יהי ‪ v‬העלה שהוסף‪.‬‬
‫‪h(v) = 0 .2‬‬
‫‪ .3‬כל עוד ‪ 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‬‬
‫‪31‬‬
‫‪AVL‬‬
‫זמן ההכנסה לעץ ‪AVL‬‬
‫כיוון שהצומת בו עושים גלגול לא משנה את גובהו‪,‬‬
‫מבצעים רק גלגול אחד‪.‬‬
‫מציאת המקום הדרוש להכנסה‬
‫(‪O)h‬‬
‫הוספת הצומת‬
‫(‪O)1‬‬
‫מציאת המקום בו מופר האיזון‬
‫(אם מופר)‬
‫(‪O)h‬‬
‫תיקון האיזון‬
‫(‪O)1‬‬
‫סה"כ‬
‫)‪O(h) = O(log n‬‬
‫‪cs,Technion‬‬
‫‪32‬‬
‫‪AVL‬‬
‫אלגוריתם הוצאה‬
‫•‬
‫הוצא צומת ‪ v‬כפי שהפעולה מתבצעת בעץ חיפוש בינרי‪.‬‬
‫•‬
‫תקן את גורמי האיזון בצורה הבאה‪ .‬לכל צומת ‪ v‬לאורך המסלול‬
‫החל מלמטה ועד לשורש בצע‪:‬‬
‫•‬
‫עדכן את )‪BF(v‬‬
‫•‬
‫אם ‪ , |BF(v)| = 2‬בצע גלגול והמשך כלפי מעלה‪.‬‬
‫•‬
‫אם גובה תת העץ ששורשו ‪ v‬לא השתנה‪ ,‬סיים‪.‬‬
‫•‬
‫אם גובה תת העץ השתנה ו‪ BF(v) -‬תקין‪ ,‬המשך כלפי מעלה‪.‬‬
‫בהוצאה יתכן יותר מגלגול אחד‪.‬‬
‫‪cs,Technion‬‬
‫‪33‬‬
‫‪AVL‬‬
‫דוגמא להוצאה מעץ ‪AVL‬‬
‫‪5‬‬
‫‪8‬‬
‫‪-1‬‬
‫‪10‬‬
‫‪12‬‬
‫‪-2‬‬
‫‪0‬‬
‫‪3‬‬
‫‪6‬‬
‫‪9‬‬
‫‪5‬‬
‫‪4‬‬
‫‪2‬‬
‫‪8‬‬
‫גלגול ‪RL‬‬
‫‪6‬‬
‫‪10‬‬
‫‪2‬‬
‫‪12‬‬
‫‪7‬‬
‫‪7‬‬
‫‪9‬‬
‫‪1 4‬‬
‫‪-2‬‬
‫*‬
‫‪3‬‬
‫‪11‬‬
‫‪11‬‬
‫‪0‬‬
‫‪8‬‬
‫‪10‬‬
‫‪12‬‬
‫‪5‬‬
‫גלגול ‪RR‬‬
‫‪0 3‬‬
‫‪6‬‬
‫‪9‬‬
‫‪11‬‬
‫‪0‬‬
‫‪7‬‬
‫‪4‬‬
‫‪2‬‬
‫‪cs,Technion‬‬
‫‪34‬‬
‫‪AVL‬‬
‫דוגמא‪ :‬הוצאה מעץ פיבונצ'י‬
‫בהוצאה יתכן גלגול בכל צומת על‬
‫המסלול בין הצומת המוצא ובין השורש‪.‬‬
‫לדוגמא כאשר מוציאים עלה ראשון מעץ‬
‫פיבונצ'י ‪.Fi -‬‬
‫‪A‬‬
‫‪C‬‬
‫*‬
‫‪B‬‬
‫תרגיל לבית‪ :‬מהי סדרת הגלגולים המתבצעת כאשר מוציאים‬
‫עלה ראשון מעץ פיבונצ'י ‪.Fi -‬‬
‫‪cs,Technion‬‬
‫‪35‬‬
‫‪AVL‬‬
‫זמן ההוצאה מעץ ‪AVL‬‬
‫מציאת המקום הדרוש להוצאה‬
‫(‪O)h‬‬
‫מציאת המקום בו מופר האיזון‬
‫(אם מופר)‬
‫(‪O)h‬‬
‫תיקון האיזון‬
‫(‪O)h‬‬
‫(לכל היותר פעם בכל רמה)‬
‫סה"כ‬
‫)‪O(h) = O(log n‬‬
‫עצי ‪ AVL‬מאפשרים חיפוש‪ ,‬הכנסה‪ ,‬הוצאה בזמן )‪O(log n‬‬
‫‪cs,Technion‬‬
36
AVL
:‫סיבוכיות הפעולות‬
‫סיבוכיות‬
function
O(1)
create(D)
‫אתחול‬
O(log n)
find(D,x)
‫חיפוש‬
O(log n)
insert(D,x,info)
‫הוספה‬
O(log n)
delete(D,x)
‫הוצאה‬
O(log n) → O(1) min(D)
O(log n) → O(1) next(D,x)
cs,Technion
‫פעולה‬
‫מינימום‬
‫עוקב‬
‫‪37‬‬
‫‪AVL‬‬
‫מידע נוסף בעצי חיפוש‬
‫בשימושים רבים של עצי חיפוש כדאי לשמור אינפורמציה נוספת בכל צומת‪ .‬אינפורמציה‬
‫זו משמשת ְלהֶ אָ צַ ת פעולות נוספות הנדרשות מעצי חיפוש‪ .‬למשל‪:‬‬
‫הגדרה‪ :‬האינדקס )‪ (rank‬של מספר 𝑥 בקבוצה 𝑆 הוא מקומו בסדרה ממוינת של איברי‬
‫𝑆‪ .‬האינדקס של ‪ 5‬בקבוצה }‪ {8,2,7,5‬הוא ‪.2‬‬
‫בעיה ‪ :‬לממש עץ חיפוש התומך‪ ,‬בנוסף לפעולות הכנסה‪/‬הוצאה‪/‬חיפוש‪ ,‬גם במציאת‬
‫האינדקס של ‪ x‬בעץ בזמן )‪ O(height‬כאשר ‪ height‬הוא גובה העץ‪.‬‬
‫בבעיה זו יש לשמור מידע נוסף בעץ החיפוש כדי שנוכל לממש את הפעולות הנוספות‬
‫ביעילות הנדרשת‪.‬‬
‫אנו ניראה מהו המידע שיש לשמור וכיצד להשתמש בו‪.‬‬
‫אח"כ ניראה כיצד לעדכן את המידע הנוסף כך שהעץ יישאר מאוזן‪.‬‬
38
AVL
(Rank Tree) ‫עץ דרגות‬
16 15
9 8
2
1
6
65
1
3
4
1
1
2
2
3
1
1
1
1
Insert
39
AVL
(Rank Tree) ‫עץ דרגות‬
15
8 z
2
1
6
5 y
3 x
1
1
2
3
1
1
1
1
𝒓𝒂𝒏𝒌(𝒙)
𝑟𝑎𝑛𝑘 = 𝑛 left 𝑥 + 1
For 𝑣 in the path
If right 𝑣 in the path
then 𝑟𝑎𝑛𝑘 ← 𝑟𝑎𝑛𝑘 + 𝑛 left(𝑣 ) +x1
‫‪40‬‬
‫‪AVL‬‬
‫עץ דרגות )‪(Rank Tree‬‬
‫‪15‬‬
‫‪8 z‬‬
‫‪6‬‬
‫‪2‬‬
‫‪1‬‬
‫‪5 y‬‬
‫‪3‬‬
‫‪1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪3 x‬‬
‫‪1‬‬
‫‪1‬‬
‫‪1‬‬
‫עץ דרגות הוא דוגמא למבנה נתונים בו בכל צומת נשמר מידע על תת‪-‬העץ‬
‫שמתחתיו‪ .‬סוג המידע השמור תלוי בבעיה אותה יש לפתור‪.‬‬
‫‪1‬‬
‫‪41‬‬
‫עץ דרגות מאוזן )‪(Rank tree‬‬
‫בעיה‪ :‬לממש עץ חיפוש מאוזן התומך במציאת האינדקס )‪ (rank‬של איבר ‪ x‬בזמן‬
‫)‪( O(log n‬כמה צמתים נמצאים לפני ‪ x‬בעץ)‪.‬‬
‫פתרון‪ :‬לדוגמא באמצעות עץ ‪ .AVL‬נשמור בכל צומת ‪( v‬מלבד המפתח)‬
‫את מספר הצמתים בתת‪-‬העץ ששורשו ‪.v‬‬
‫זיכרו שסימנו מספר זה ב‪.n(v) -‬‬
‫נעדכן את )‪ n(v‬בזמן גלגול‪.‬‬
‫‪AVL‬‬
‫עדכון השדה הנוסף בעץ‬
‫‪AVL‬‬
‫‪42‬‬
‫‪AVL‬‬
‫כיצד נעדכן את )𝑣(𝑛?‬
‫בזמן הכנסה נגדיל את )𝑣(𝑛 באחד לאורך המסלול מהשורש לעלה שהוכנס‪ .‬בזמן‬
‫גלגול נעדכן את השדה כנדרש‪ .‬למשל בגלגול ‪ LL‬נעדכן כך‪:‬‬
‫‪𝑛 1 + 𝑛 2 + 𝑛(3) + 2‬‬
‫‪A‬‬
‫‪𝑛(𝐵)B‬‬
‫‪𝑛 2 + 𝑛(3) + 1‬‬
‫‪B‬‬
‫)‪𝑛(3‬‬
‫‪BR‬‬
‫)‪𝑛(3‬‬
‫)‪𝑛(1‬‬
‫)‪𝑛(2‬‬
‫‪AR‬‬
‫‪𝑛(𝐴)A‬‬
‫)‪𝑛(2‬‬
‫‪AL‬‬
‫‪BR‬‬
‫‪v‬‬
‫‪AR‬‬
‫)‪𝑛(1‬‬
‫‪h‬‬
‫‪AL‬‬
‫‪v‬‬
‫סיבוכיות זמן ה‪𝑂(log 𝑛) rank -‬‬
‫‪cs,Technion‬‬
43
AVL
.𝑆 ‫𝑖 בסדרה ממוינת של איברי‬-‫ 𝑖 בקבוצה 𝑆 הוא האבר ה‬-‫( ה‬select) ‫ האבר‬:‫הגדרה‬
.7 ‫{ הוא‬8,2,7,5} ‫ = 𝑖 בקבוצה‬3 ‫האיבר השלישי‬
𝑇
x
y
z
Y
Z
𝑌<𝑥<𝑍
𝑆𝑒𝑙𝑒𝑐𝑡(𝑖, 𝑇)
If 𝑖 = 𝑛 𝑥 → 𝑙𝑒𝑓𝑡 + 1 then return 𝑇
If 𝑖 < 𝑛 𝑥 → 𝑙𝑒𝑓𝑡 + 1 then return 𝑠𝑒𝑙𝑒𝑐𝑡(𝑖, 𝑇 → 𝑙𝑒𝑓𝑡)
If 𝑖 > 𝑛 𝑥 → 𝑙𝑒𝑓𝑡 + 1 then return 𝑠𝑒𝑙𝑒𝑐𝑡(𝑖 − 𝑛 𝑙𝑒𝑓𝑡 𝑥
cs,Technion
− 1, 𝑇 → 𝑟𝑖𝑔ℎ𝑡)
44
AVL
‫דוגמא למידע נוסף‬
100 8
13 5
2
2
79 10
6
6
60 20
9 9
15
cs,Technion
15
25
25
45
AVL
‫דוגמא למידע נוסף‬
100,9 8
13,3 5
2,1
2
79,5 10
6,1
6
9,1 9
60,3 20
15,1
15
25
25,1
𝑦
𝑥
𝑆𝑢𝑚𝐿𝑒 𝑥 − 𝜖 − 𝑆𝑢𝑚𝐿𝑒 𝑦 + 𝜖
𝑟𝑎𝑛𝑘 𝑥 − 𝜖 − 𝑟𝑎𝑛𝑘 𝑦 + 𝜖
cs,Technion
‫‪46‬‬
‫‪AVL‬‬
‫דוגמא נוספת‬
‫כיצד נעדכן את סכום המפתחות בכל תת‪-‬עץ של עץ ‪? AVL‬‬
‫בזמן הכנסה נגדיל את הסכום לאורך המסלול מהשורש לעלה שהוכנס‪ .‬בזמן‬
‫גלגול נעדכן את השדה כנדרש‪ .‬למשל בגלגול ‪ LL‬נעדכן כך‪:‬‬
‫‪S(A)+S(3)+B‬‬
‫‪A‬‬
‫‪S(B) B‬‬
‫)‪S(B)-S(A)+S(2‬‬
‫‪B‬‬
‫)‪S(3‬‬
‫‪BR‬‬
‫)‪S(1‬‬
‫)‪S(3‬‬
‫)‪S(2‬‬
‫)‪S(2‬‬
‫‪BR‬‬
‫‪AL‬‬
‫‪AR‬‬
‫‪S(A) A‬‬
‫‪v‬‬
‫‪AR‬‬
‫)‪S(1‬‬
‫‪h‬‬
‫‪AL‬‬
‫‪v‬‬
‫תרגיל בית‪ :‬מהו העדכון בגלגולים האחרים ? כיצד מבצעים זאת עם עץ‬
‫‪? 3-2‬‬
‫‪cs,Technion‬‬