210 likes | 476 Views
עץ אדום -שחור. (CLR chapter 14). עץ חיפוש בינארי. בכל צומת ביט אינפורמציה נוסף - צבע. צביעה מבטיחה שאין מסלול ארוך פי שניים מאחר. עץ “כמעט מאוזן” ( O(log n במקרה גרוע ביותר. מבנה – כל צומת מכיל:. parent left right color key. תכונות.
E N D
עץ אדום-שחור (CLR chapter 14) • עץ חיפוש בינארי • בכל צומת ביט אינפורמציה נוסף - צבע • צביעה מבטיחה שאין מסלול ארוך פי שניים מאחר • עץ “כמעט מאוזן” • (O(log nבמקרה גרוע ביותר • מבנה – כל צומת מכיל: • parent • left • right • color • key Data Structures, CS, TAU, RB-Tree
תכונות גובה שחור:מס’ הצמתים השחורים מצומת לעלה (לא כולל הצומת). BH(T) סימון: 1. כל צומת אדום או שחור 2. כל עלה (NIL) הוא שחור 3. אם צומת אדום שני ילדיו שחורים 4. כל מסלול פשוט מצומת לעלה מכיל מספר זהה של צמתים שחורים Data Structures, CS, TAU, RB-Tree
דוגמא לעץ אדום-שחור 14 7 2 10 16 7 1 7 7 12 7 15 1 1 1 NIL 3 NIL NIL NIL NIL NIL 1 NIL NIL * מס’ ליד צומת הוא גובה שחור של אותו צומת Lemma 14.1 (CLR): A red-black tree with ninternal nodeshas height at most 2lg(n+1) Data Structures, CS, TAU, RB-Tree
הוכחת הלמה הוכחה: אינדוקציה (מוכח מלא בספר) • אינטואיציה: • רוב הצמתים שחורים • גובה שחור - אחיד: • מבחינת שחורים עץ מאוזן log • אדומים - רק תוספת (לכל היותר מכפילים כל מסלול) Data Structures, CS, TAU, RB-Tree
רוטציות של עץ בינארי Right_Rotate(T,y) Y X X Y גדול קטן קטן אמצע אמצע גדול Left_Rotate(T,x) • עומק של עולה/יורד ב- 1 • עומק של אינו משתנה Data Structures, CS, TAU, RB-Tree
השפעת רוטציה על עומק העץ x 7 7 y 11 11 9 9 18 17 22 19 14 18 19 22 20 20 12 17 12 14 Left_Rotate(T,x) y x Inorder doesn’t change! Data Structures, CS, TAU, RB-Tree
ביצוע Insert 1. הכנסת Xבמקום המתאים (כמו בעץ בינארי) ובצבע אדום 2. ביצוע תיקונים מלמטה למעלה - אם יש שני אדומים רציפים Data Structures, CS, TAU, RB-Tree
תיקון צבעים ב-Insert • בתיקון: א) הצפת אדום האב כלפי מעלה (העברת הבעיה כלפי מעלה) או: ב) השכנת הבעיה במסגרת משפ’ הסבא ע”י התקזזות עם הדוד (עצירת הבעיה) אם צומת אדום ואביו אדום האח שחור • תיקון אם צומת אדום וגם אביו אדום Data Structures, CS, TAU, RB-Tree
דוד אדום – Case I new x y A B C D D C x D B B A A A C B D C new x y החלף צבעים בין סבא לבניו x Data Structures, CS, TAU, RB-Tree
דוד שחור – Case II Left_Rotate(A), Right_Rotate(B) + החלף צבעיםBC Case II B C y y C y y y x x B A A A B C Case III x • כל התכונות נשמרות • בעיה עלתה למעלה (רק Case I) Data Structures, CS, TAU, RB-Tree
דוגמא ל-Insert :Node X was now inserted 11 14 5 8 1 14 1 7 11 y Case I 4 8 5 2 15 2 15 7 4 x y x Case II Data Structures, CS, TAU, RB-Tree
דוגמא ל-Insert (המשך) y 11 5 14 14 8 8 5 1 1 7 x Case III 2 2 15 4 4 7 15 11 x Data Structures, CS, TAU, RB-Tree
ביצוע Delete Y - מושמט X - בנו Y X 3) אם Yהיה שחור בצע RB_DELETE_FIXUP(X) 3א) אם Xאדום צבע בשחור וסיים 1) מבצעים deleteכמו בעץ חיפוש בינארי רגיל 2) אם Yהיה אדום כל תכונות RB נשמרו. עצור. Data Structures, CS, TAU, RB-Tree
דוגמה Delete Fixup ל- Xיש אח כי Xהוא שחור (כפול)! יהי Wאח של X X - שחור X - מקום שמעליו בוצעה השמטה - נחשוב על Xכעל מכילשחור + שחור חסר כל מסלול בעץ הוא חוקי מטרה: להיפטר מהשחור המיותר Data Structures, CS, TAU, RB-Tree
דוגמה Delete Fixup - מקרים Wאדום Wשחור + 2 בנים שחורים Case 1 Case 2 החלף צבעי P(X), Wו- Left_Rotate(P(X)) מוליך ל-Case 1,2,3,4 כל המסלולים לתתי עצים באותו גובה שחור הורד שחור מ- Wו- Xוהוסף ל- P(X) Xשחור בודד Wאדום P(xשחור או אדום (נהפך לשחור או לדו-שחור) Data Structures, CS, TAU, RB-Tree
דוגמה Delete Fixup Case 1 x w A D C E B E A C D B new w x c c, new x/black B Case 2 B x w D A A D C E C E Data Structures, CS, TAU, RB-Tree
דוגמה Delete Fixup - מקרים Wשחור + בן שמאלי אדום + בן ימני שחור Case 3 החלף צבעים בין Wובנו השמאלי ובצע Right_Rotate מטפל בבעיה וגורם ללולאה להסתיים Case 4 Wשחור + בן ימני אדום שנה צבעים ו- Left_Rotate(P(X)) מצב 4 Data Structures, CS, TAU, RB-Tree
דוגמה Delete Fixup c c Case 3 x new w w x E D A D B E A A E C A D C C B D E C B B c c Case 4 x w ‘c Data Structures, CS, TAU, RB-Tree