Presentation is loading. Please wait.

Presentation is loading. Please wait.

2-3 trees עצי 3-2 ועצי דרגות Chapter 19: B trees (381 – 397) Chapter 15: Augmenting data structures (281 – 290) חומר קריאה לשיעור זה Lecture5 of Geiger.

Similar presentations


Presentation on theme: "2-3 trees עצי 3-2 ועצי דרגות Chapter 19: B trees (381 – 397) Chapter 15: Augmenting data structures (281 – 290) חומר קריאה לשיעור זה Lecture5 of Geiger."— Presentation transcript:

1 2-3 trees עצי 3-2 ועצי דרגות Chapter 19: B trees (381 – 397) Chapter 15: Augmenting data structures (281 – 290) חומר קריאה לשיעור זה Lecture5 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS  Geiger & Itai, 2001

2 2-3 trees  cs,Technion 2

3 2-3 trees 3 עצים מאוזנים עצי AVL הם עצים מאוזנים. עצי 3-2 מהווים דוגמא נוספת לעצים מאוזנים. תזכורת: משפחת עצים נקראת מאוזנת אם.h(T) = O(log n) הגדרה: עץ 3-2 הוא עץ בו כל העלים נמצאים באותה רמה ולכל צומת פנימי 2 או 3 בנים. דוגמאות:

4 2-3 trees  cs,Technion 4 גובה עצי 3-2 לפיכך הגובה מקיים log 3 L  h  log 2 L כלומר : h =  (log L) נימוק : עבור חסם תחתון נבחן את העץ הבינרי השלם הנוצר ע " י סילוק כל ילד שלישי מעץ 3-2. עבור חסם עליון נבחן את העץ הטרינרי השלם הנוצר ע " י הוספת ילד שלישי לעץ 3-2 בכל מקום בו חסר ילד.   עץ 3-2 נתון עץ בו כל ילד שלישי סולק עץ בו כל ילד חסר הוסף מספר העליםL בעץ 3-2 מקיים 2 h  L  3 h כאשר h הוא גובה העץ.

5 2-3 trees 5 עצי 3-2 כמבני נתונים בצומת פנימי בעל שני בנים רשום אינדקס בודד הגדול ממש מהמפתח המקסימלי בתת העץ ששורשו הוא הבן הראשון וכן קטן או שווה למפתח המינימלי בתת העץ ששורשו הוא הבן השני. בצומת פנימי בעל שלושה בנים רשומים שני אינדקסים. אינדקס ראשון גדול ממש מהמפתחות בעץ הראשון וקטן שווה מהמפתחות בעץ בשני ואינדקס שני גדול ממש מהמפתחות בעץ השני וקטן שווה מהמפתחות בעץ השלישי. כל עלה מכיל מפתח ורשומה (רק המפתחות נראים בציור). לכל צמת פנימי 2  d  3 בנים ויש בו d-1 אינדקסים המשמשים לחיפוש הרשומה הנחוצה. 7 16 5 … 8 11 17 … 2 5 7 8 12 16 19

6 2-3 trees  cs,Technion 6 חיפוש מפתח k בעץ 3-2 אחרת, אם ל-v רק שני בנים או ש-k קטן מהמפתח השני של v: המשך את החיפוש בבן השני של v. אחרת, המשך את החיפוש בבן השלישי של v. יהי v השורש של העץ אם v עלה, בדוק אם k נמצא בצומת v. יהי k 1 האינדקס המינימלי בצומת v. אם k < k 1 : המשך את החיפוש בבן הראשון של v. 1 2 3 1014 222527 2, 3 14 25, 27 10, 20 חפש 14:

7 2-3 trees  cs,Technion 7 הכנסת מפתח k לעץ 3-2 בהכנסת איבר לעץ 3-2 מבוצעות הפעולות הבאות : 1. חיפוש מקומו של המפתח החדש k. 2. הכנסת עלה למקום החדש וקביעת ערכו k. 3. תיקון העץ כך שלכל צומת יהיו 2 או 3 בנים. התיקון נעשה במסלול החיפוש של k מהעלה שנוסף ועד השורש. בכל רמה נבצע O(1) פעולות. נמחיש זאת תחילה ע " י דוגמאות.

8 2-3 trees 8 דוגמא להכנסה לעץ 3-2 1 23 1014222527 2, 3 14 25, 27 10, 22 הכנס 7 1 23 1014222527 2, 3, 7 14 25, 27 10, 22 7 צעד ראשון : 1 23 1014222527 2 14 25, 27 3, 10, 22 7 7 צעד שני : 1 23 1014222527 2 14 25, 27 7 7 3 22 10 צעד שלישי :

9 2-3 trees 9 אלגוריתם להכנסת מפתח k (חלק א) 1.חפשו את k בעץ T. אם k נמצא, סיימו. 2.אם k אינו ב-T, יהי f הצומת האחרון, שאינו עלה, במסלול החיפוש. (לו k היה ב-T אזי f היה אבי העלה שבו k נמצא). 3.צרו עלה חדש בעל מפתח k, והוסיפו אותו כבן ל-f תוך שמירת הסדר בין הבנים של f. (יתכן וכעת יש ל-f ארבעה בנים). 4.הוסיפו ל-f אינדקס נוסף בהתאם לכללי עץ 2-3. (יתכן וכעת יש שלושה אינדקסים). 1 23 1014222527 2, 3 14 25, 27 10, 22 הכנס 7 1 23 1014222527 2, 3, 7 14 25, 27 10, 22 7

10 2-3 trees 10 v  f.5 6. אם ל-v ארבעה בנים, פצל את v לשני צמתיםv 1,v 2, וחבר אותם כבנים לאב f של צומת v תוך שמירה על סדר האינדקסים הנכון. חזרו לצעד 5. אם v הוא שורש צרו צומת f אשר בניו הם הצמתים v 1,v 2 וסיימו. אם ל-v שלושה בנים סיימו. 1 23 1014222527 2 14 25, 27 3, 10, 22 7 7 1 23 1014222527 2 14 25, 27 7 7 3 22 10 אלגוריתם להכנסת מפתח k (חלק ב)

11 2-3 trees 11 אלגוריתם להכנסת מפתח k (במלואו) 1.חפשו את k בעץ T. אם k נמצא, סיימו. 2.אם k אינו ב-T, יהי f הצומת האחרון, שאינו עלה, במסלול החיפוש. (לו k היה ב-T אזי f היה אבי העלה שבו k נמצא). 3.צרו עלה חדש בעל מפתח k, והוסיפו אותו כבן ל-f תוך שמירת הסדר בין הבנים של f. (יתכן וכעת יש ל-f ארבעה בנים). 4.הוסיפו ל-f אינדקס נוסף בהתאם לכללי עץ 2-3. (יתכן וכעת יש שלושה אינדקסים). v  f.5 6. אם ל-v ארבעה בנים, פצל את v לשני צמתיםv 1,v 2, וחבר אותם כבנים לאב f של צומת v תוך שמירה על סדר האינדקסים הנכון. חזרו לצעד 5. אם v הוא שורש צרו צומת f אשר בניו הם הצמתים v 1,v 2 וסיימו. אם ל-v שלושה בנים סיימו.

12 2-3 trees 12 פרוט לפיצול צומת root T1T1 k 1 k 2 k 3 v T2T2 T3T3 T4T4 k1k1 k3k3 k2k2 T1T1 T2T2 T3T3 T4T4 k2k2 v2v2 v3v3 v4v4 v1v1 v2v2 v3v3 v4v4 v1v1 k1k1 k3k3 v v1v1 v2v2

13 2-3 trees  cs,Technion 13 תכונות תהליך ההוספה שינויים מתבצעים רק על המסלול מהשורש לעלה שהוסף. בזמן פיצול של צומת, הצמתים החדשים הם בעומק שווה לצומת שפוצל. בפיצול השורש נוצר צומת חדש שמגדיל ב-1 את העומק של כל הצמתים. מסקנה: לאחר הוספה, כל העלים באותו עומק ולכל צומת פנימי 3-2 בנים.

14 2-3 trees  cs,Technion 14 הוצאת מפתח k מעץ 3-2 בהוצאת איבר לעץ 3-2 מבוצעות הפעולות הבאות: 1.חיפוש מקומו של המפתח k. 2.הוצאת העלה שערכו k. 3.תיקון העץ כך שלכל צומת יהיו 2 או 3 בנים. התיקון נעשה במסלול החיפוש של k מהעלה שהוצא ועד השורש. בכל רמה נבצע O(1) פעולות. נמחיש זאת תחילה ע"י דוגמאות.

15 2-3 trees 15 דוגמא להוצאה מעץ 3-2 (השאלה בלבד) 1 23 1014151619 2 14 16, 19 7 7 3 15 10 הוצא 14: 1 23 10151619 2 14 16, 19 7 7 3 15 10 סלק צומת : 1 23 10151619 2 14 16, 19 7 7 3 15 10 השאל מהאח : 1 23 10151619 2 14 19 7 7 3 16 10 תקן ערכי ההורים :

16 2-3 trees 16 דוגמא להוצאה מעץ 3-2 (שני איחודים) 1 23 1014151619 2 14 16, 19 7 7 3 15 10 הוצא 3: 12 101416 19 14 16, 19 7 2, 7 3 15 10 אחד הורים: 15 12 1014 7 2, 7 10 אחד הורים: 10, 15 16 19 16, 19 15 12 1014 7 2, 7 10, 15 16 19 16, 19 15 סלק שורש מיותר:

17 2-3 trees 17 אלגוריתם להוצאת מפתח k מעץ 3-2 1.חפש את k בעץ. אם k לא נמצא בעץ, סיים. 2.יהי l העלה שערכו k ויהי f אביו. 3.סלק את l מהעץ. 4.v  f 5.אם v הוא שורש ולו בן בודד, סלק את v וסיים. 6.אם ל-v נותרו 2 בנים, סיים. (המשך אם ל-v נותר רק בן בודד). 7.מקרה א: אם ל-v יש אח ולו שלושה בנים, שאל בן מהאח וסיים. מקרה ב: אם לכל אח רק שני בנים, אחד את v עם אח קרוב ל-v ועדכן את המפתחות בצומת שנוצר. יהי f ההורה של v. 8. חזור לצעד 4.

18 2-3 trees 18 פרוט פעולת האיחוד בזמן הוצאה מקרה א: vv1v1 v2v2 v3v3 v4v4 k1k1 k 3, k 4 k2k2 v1v1 v2v2 v3v3 v4v4 k2k2 k4k4 k3k3 f f f1f1 f1f1 מקרה ב: v1v1 v2v2 v3v3 k 2, k 3 k4k4 v1v1 k1k1 k 2, k 4 v2v2 v3v3 k3k3 v4v4 v v4v4 f f f1f1

19 2-3 trees  cs,Technion 19 ניתוח פעולת ההוצאה כל פעולת חיפוש, הכנסה, והוצאה מעץ 3-2 דורשת O(h) צעדי חישוב כאשר h הוא גובה העץ. נימוק: בכל רמה מבוצעות O(1) פעולות. נזכור שגובה העץ הוא O(log L) כאשר L הוא מספר המפתחות. כלומר כל פעולה לוקחת O(log L) צעדי חישוב. נכונות: העומק של שום צומת אינו משתנה בזמן ההוצאה מלבד בסוף התהליך, במידה ומתבטל השורש, ואז העומק של כל הצמתים קטן באחד. לפיכך כל העלים נותרים בעומק שווה. כמו כן לכל צומת פנימי נותרים 3-2 בנים ונשמר יחס הסדר בין האינדקסים כנדרש.

20 2-3 trees 20 השוואה בין עצי 3-2 ועצי AVL שני סוגי העצים תומכים בפעולות המילון בזמן O(log n). בעץ 3-2 רשומות נשמרות רק בעלים. בעץ AVL רשומות נשמרות גם בצמתים פנימיים וגם בעלים. לכל שימוש בעץ 3-2 ישנה כנראה אנלוגיה גם בעץ AVL ולהפך. הבחירה בין השניים אינה עקרונית.

21 2-3 trees  cs,Technion 21 עצי B + (מדרגה m) הגדרה: עץ B + מדרגה m הוא עץ המקיים את התכונות הבאות: 1.כל הערכים נמצאים בעלים, כל העלים באותה רמה. 2.לכל צומת פנימי, פרט אולי לשורש, יש c בנים כאשר  m/2   c  m. לשורש מספר הבנים הוא 2  c  m. 3.לצומת פנימי בעל c בנים יש c-1 אינדקסים ממוינים לפי גודלם. כל המפתחות הנמצאים בתת העץ ה- i קטנים מהאינדקס ה-i וגדולים או שווים לאינדקס ה- i-1. כל המפתחות הנמצאים בתת העץ הימני ביותר גדולים או שווים לאינדקס האחרון. חיפוש/הכנסה/הוצאה כמו בעץ 3-2. כלומר, חיפוש לפי הגדרת עץ B + בדרגה m, הכנסה או הוצאה של העלה המבוקש, ותיקון העץ מהעלה ועד השורש במסלול החיפוש כך שמספר הבנים בכל רמה יעמוד בדרישות עץ B + בדרגה m. דוגמא : עץ 3-2. 1 2 3 1014 22 25 27 2, 3 14 25, 27 10, 22 2, 3 7 דוגמא : עץ 4-3-2.,7

22 2-3 trees  cs,Technion 22 דוגמא להכנסה לעץ B + מדרגה 4 דוגמא : הכנס 5 5 1 2 3 101422 25 27 2, 3, 7 14 25, 27 10, 22 7 1014 22 25 27 14 25, 27 5, 10, 22 57 7 1 2 3 2, 3 במקרה זה נדרש פיצול בודד. מחצית הצמתים ( מעוגל כלפי מעלה ) בענף השמאלי ומחצית ( מעוגל כלפי מטה ) בימני. דוגמאות נוספות בתרגול.

23 2-3 trees 23 שימוש עיקרי לעץ B + הזיכרון ברוב המחשבים מורכב משני חלקים: זיכרון ראשי (RAM), מהיר, ללא חלקים נעים, שבב סיליקון בודד. זיכרון משני (DISK), גדול, איטי יחסית לזיכרון הראשי, בעל חלקים מכניים. כאשר לא ניתן להכניס את כל מבנה הנתונים לזיכרון הראשי יש לפנות מדי פעם לזיכרון המשני לקבלת אינפורמציה נוספת. זמן הגישה לזיכרון המשני גבוה מאד יחסית לזמן הקריאה של הנתונים והקריאה נעשית בבלוקים. 1…1000 עצי +B מדרגה גבוהה מספקים פתרון: בכל צומת פנימי נשמור כמספר הבלוקים של מפתחות שניתן לשמור בזיכרון הראשי. מספר הגישות לזיכרון המשני תלוי במספר הרמות (וזהו מספר נמוך) הנקבע ע"י גודל הבלוק. המחיר יהיה בסקירה ליניארית של המפתחות על מנת לקבוע את המשך החיפוש בעץ (תוך שימוש בזיכרון המהיר).

24 2-3 trees 24 מידע נוסף בעצי חיפוש בעיה I : לממש עץ חיפוש התומך, בנוסף לפעולות הכנסה/הוצאה/חיפוש, גם במציאת האינדקס של x בעץ בזמןO(height) כאשר height הוא גובה העץ. בשימושים רבים של עצי חיפוש כדאי לשמור אינפורמציה נוספת בכל צומת. אינפורמציה זו משמשת להאצת פעולות נוספות הנדרשות מעצי חיפוש. למשל: הגדרה: האינדקס (rank)של מספר x בקבוצה S הוא מקומו בסדרה ממוינת של איברי S. האינדקס של 5 בקבוצה {8,2,7,5} הוא 2. בעיה II: לממש עץ חיפוש התומך במציאת סכום האיברים בעץ הקטנים מ – x בזמן O(height). בבעיות אלה יש לשמור מידע נוסף בעץ החיפוש כדי שנוכל לממש את הפעולות הנוספות ביעילות הנדרשת. אנו ניראה מהו המידע שיש לשמור וכיצד להשתמש בו. אח"כ ניראה כיצד לעדכן את המידע הנוסף כך שהעץ יישאר מאוזן.

25 2-3 trees 25 עץ דרגות (Rank Tree) עץ דרגות הוא דוגמא למבנה נתונים בו בכל צומת נשמר מידע על תת - העץ שמתחתיו. סוג המידע השמור תלוי בבעיה אותה יש לפתור. הגדרה: עץ דרגות (rank tree) הוא עץ בו בכל צומת v נשמרים מספר הצמתים בתת-העץ ששורשו v. מסקנה: בעץ דרגות מציאת ה-rank דורשת זמן.O(height) בעיה I: לממש עץ חיפוש התומך במציאת האינדקס של איבר x. rank(x) = 2 + 1+ 1 + |{z, y}| = 6 rank(x) =  w n(w) + | {v  path | v < x}| נספור את מספר הצמתים על מסלול החיפוש ל- x הקטנים מ- x בתוספת הערכים השמורים בבניהם השמאליים. (w בן שמאלי של צומת במסלול path) פתרון: נשמר בכל צומתv (מלבד המפתח) את מספר הצמתים בתת-העץ ששורשו v. נסמן מספר זה ב-n(v). 11 z y x 1 2 1 3 5 8 1 1 1 3 2 6 15

26 2-3 trees  cs,Technion 26 דוגמא למידע נוסף בעיה II: לממש עץ חיפוש התומך במציאת סכום האיברים בעץ הקטנים מ – x בזמן O(height). נסכם את הערכים על מסלול החיפוש ל- x הקטנים מ- x בתוספת הערכים השמורים בבניהם השמאליים. דוגמא: סכום הקטן מ- 17 מחושב ע"י(8+13) + (10+9) + (15 +0) = 55 פתרון: נשמר בכל צומתv את סכום ערכי הצמתים בתת- העץ ששורשו v. נסמן מספר זה ב-.S(v) 5 2 6 8 10 9 20 15 25 2 6 13 15 25 9 60 79 100 מסקנה: זמן הריצה הוא O(height). כיצד נבטיח זמן ריצה O(log n) ?

27 2-3 trees 27 עץ דרגות מאוזן (Rank tree) בעיה: לממש עץ חיפוש מאוזן התומך במציאת האינדקס (rank) של איבר x בזמן O(log n) (כמה צמתים נמצאים לפני x בעץ). פתרון: לדוגמא באמצעות עץ AVL. נשמור בכל צומתv (מלבד המפתח) את מספר הצמתים בתת-העץ ששורשו v. זיכרו שסימנו מספר זה ב-n(v). נעדכן את n(v) בזמן גלגול.

28 2-3 trees  cs,Technion 28 עדכון השדה הנוסף כיצד נעדכן את n(v) ? בזמן הכנסה נגדיל את n(v) באחד לאורך המסלול מהשורש לעלה שהוכנס. בזמן גלגול נעדכן את השדה כנדרש. למשל בגלגול LL נעדכן כך: ALAL BRBR ARAR h B A v ARAR ALAL BRBR v B A n(B) n(A) n(1) n(2) n(3) n(A)+n(3)+1 n(1) n(2) n(3) n(B)-n(A)+n(2)

29 2-3 trees  cs,Technion 29 דוגמא נוספת כיצד נעדכן את סכום המפתחות בכל תת-עץ של עץ AVL ? בזמן הכנסה נגדיל את הסכום לאורך המסלול מהשורש לעלה שהוכנס. בזמן גלגול נעדכן את השדה כנדרש. למשל בגלגול LL נעדכן כך: ALAL BRBR ARAR h B A v ARAR ALAL BRBR v B A S(B) S(A) S(1) S(2) S(3) S(A)+S(3)+B S(1) S(2) S(3) S(B)-S(A)+S(2) תרגיל בית: מהו העדכון בגלגולים האחרים ? כיצד מבצעים זאת עם עץ 3-2 ?


Download ppt "2-3 trees עצי 3-2 ועצי דרגות Chapter 19: B trees (381 – 397) Chapter 15: Augmenting data structures (281 – 290) חומר קריאה לשיעור זה Lecture5 of Geiger."

Similar presentations


Ads by Google