1 / 35

מילון (Dictionary)

מילון (Dictionary). מילון מאחסן אוסף של רְשׁוּמוֹת מהטיפוס (מפתח, אינפורמציה). המפתח שונה (בד"כ) מרשומה לרשומה. אוסף המפתחות האפשריים מסומן ב- U . לדוגמא: מספרים שלמים. פעולות: אתחול: יצירת מילון ריק. create(D) חיפוש: החזר מצביע לרשומה ב- D שמפתחה x או NULL . find(D,x)

thais
Télécharger la présentation

מילון (Dictionary)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מילון (Dictionary) מילון מאחסן אוסף של רְשׁוּמוֹת מהטיפוס (מפתח, אינפורמציה). המפתח שונה (בד"כ) מרשומה לרשומה. אוסף המפתחות האפשריים מסומן ב-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. מילון, מבנה חיפוש ועצי חיפוש פעולות נוספות כאשר מוגדר סדר על U (למשל כאשר מפתח הוא מספר): מינימום: החזר את המפתח המינימלי ב-D . עוקב:החזר מצביע לאיבר במילון D בעל המפתח הקטן ביותר שגדול מ- x. min(D) next(D,x) מילון + מינימום + עוקב נקרא = מבנה חיפוש מטרה: לבצע את כל הפעולות בזמן O(log n) (במקרה הגרוע ביותר) כאשר n הוא מספר המפתחות הנמצאים במילון בזמן ביצוע הפעולה. עצי חיפוש: היא משפחה של מימושים למבנה חיפוש. cs,Technion

  3. עץ חיפוש בינרי x y z cs,Technion

  4. Lecture 4 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS סיבוכיות הפעולות: cs,Technion

  5. h(NULL) = -1 דוגמאות לעציAVL

  6. h(NULL) = -1 דוגמאות לעצים שהם לאAVL

  7. משפט:

  8. טענה 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

  9. משפט: טענה 1: # # = +1 הגדרה: נסמן ב- Nh מספר מינימאלי של בעץ AVLבגובה≥ h Nh-2<Nh-1 טענה 2:

  10. הגדרה: נסמן ב- Nh מספר מינימאלי של בעץ AVLבגובה ≥ h Nh=Nh-1+Nh-2 טענה 3: שלשה מקרים הוכחת טענה 3: Nh-1 Nh-1 Nh-2Nh-1 Nh-1Nh-2 Nh=min(Nh-1+Nh-2 , Nh-1 +Nh-1) = Nh-1+Nh-2

  11. משפט: טענה 1: # # = +1 הגדרה: נסמן ב- Nh מספר מינימאלי של בעץ AVLבגובה h Nh-2<Nh-1 טענה 2: Nh=Nh-1+Nh-2 טענה 3: Nh> 2h/2 טענה 4:

  12. טענה 4: הוכחת טענה 4: באינדוקציה טענה 3

  13. משפט: טענה 1: # # = +1 טענה 4:

  14. משפט: הוכחנו יהי T עץ AVLבן n צמתים וגובה h, אזי h=2 log (n+1) . מספרי פיבונצ'י

  15. נקרא יחס הזהב

  16. משפחת עצי פיבונצ'יFibonacci trees) ): F0 F1 F2 F3 Fi+1 Fi-1 Fi

  17. לדוגמא: F0 F1 F2 F3 הוכחה: באינדוקציה על i בסיס האינדוקציה: ראינו בתרשים הנחת האינדוקציה:נניח נכונות לכל ij ≤ צעד האינדוקציה: מטענה 2, הנחת האינדוקציה והגדרת מספרי פיבונצ'י, n3=2,n4=3, n5=5, n6=8 ניתוח מספר צמתים בעץ פיבונצ'י טענה: לעץ פיבונאצ'י Fi יש |Fi| = ni+3 - 1 צמתים כאשר ni הוא מספר פיבונצ'י ה-i.

  18. הוכחת הטענה : נתונה המשוואה הבאה. נניח פתרון מהצורה: משוואת ההפרשים ליניארית ולכן כל צרוף ליניארי של פתרונות מהווה פתרון: שימוש בתנאי השפה מוביל למציאת הקבועים: לפיכך פתרון המשוואה (כולל תנאי ההתחלה) הוא: מספרי פיבונצ'י (המשך) נציב במשוואה ונקבל: cs,Technion

  19. 18 לאחר הוספת האיבר 18 נתקבל עץ שאינו עץ AVL. אבל נתן לשנות את תת העץ שבו הופר האיזון בצורה הבאה: תיקון כזה נקרא גלגול. 19 20 19 18 20 18 בזמן הוצאה קיימת הפרת איזון דומה. למשל בהוצאת 29. איזון בעץ AVL נובע שזמן החיפוש בעץ AVL הוא O(log n). נצטרך לדאוג שלאחר הכנסה או הוצאה, העץ הנותר יהיה עץ AVL. 12 8 15 24 10 6 14 11 29 20 4 13 19 cs,Technion

  20. בעץ AVL תקין: 1≤|BF(v)| -1 12 2- -1 -1 8 15 2- 0 -1 6 10 24 +1 +1 14 0 2+ 0 +1 0 11 20 29 13 2+ 0 19 1+ 18 אחרי ההכנסה של 18 גורם האיזון מופר על מסלול ההכנסה. איזון בעץ AVL (המשך) עבור צומת v בעץ בינרי נסמן: hL(v) גובה תת העץ השמאלי של v. hR(v) גובה תת העץ הימני של v. גורם האיזון (Balance Factor) מחושב כהפרש הגבהים:BF(v) = hL(v) – hR(v) לדוגמא: מצד שמאל של כל צומת מסומן גורם האיזון. cs,Technion

  21. -1 12 -1 -1 8 15 -1 0 10 +1 +1 6 24 14 0 0 11 0 +1 29 20 13 0 19 אבחנות • הצמתים היחידים שאולי הופר בהם האיזון הם הצמתים לאורך מסלול הכנסה/הוצאה. • אם עבור צומת v במסלול הנ"ל גובה העץ ששורשו v לא השתנה אזי גורמי האיזון בצמתים שמעליו במסלול לא השתנו. • אם גורם האיזון הופך ל-2 או ל 2-, אזי יש לבצע גלגול על מנת שהעץ יחזור להיות עץ AVL. • גורם האיזון לא יכול להיות גדול מ-2 בערכו המוחלט כי בכל הכנסה/הוצאה הוא משתנה ב-1 לכל היותר. • גלגול– פעולה המתבצעת על צומת שהופר בו האיזון על מנת להחזירו לתחום המותר [1 … 1-]. cs,Technion

  22. הצמת האחרון שהופר בו האיזון -2 BF(v) = hL(v) – hR(v) טענה גורם האיזון החדש b לא יכול להיות 0 אם גורם האיזון החדש הוא 0 ונניח האבר נכנס לתת עץ הימני b אזי גורם האיזון הישן היה +1 אזי גובה תת העץ של- b לא השתנה TR TL סתירה h-1 h לכן b=+1 או b=-1 cs,Technion

  23. גלגול LL גלגול LR גלגול RL גלגול RR +2 +2 2- 2- 1- 1+ 1- +1 הגלגול המתאים בבן הימני vR בבן השמאלי vL בשורש v LL BF(v)=2 BF(vL) =1 BF(v)=2 LR BF(vL) = -1 RR BF(vR) = -1 BF(v)= -2 RL BF(vR) = 1 BF(v)= -2 סוגי הגלגולים סוג הגלגול, כלומר הדרך לתקן חוסר איזון בצומת, תלוי בצורה בה האיזון מוּפָר. נתן לסווג חוסר איזון בארבע קטגוריות שונות המכסות את כל המקרים. cs,Technion

  24. 0 A אחרי הגלגול: גובה העץ לאחר הגלגול הוא 2+ h, כמו לפני ההכנסה. השורש מאוזן. שינינו (1)O מצביעים ולכן זמן הגלגול (1)O. 0 B h AL AR BR v גלגול LL +2 +1 B לפני הכנסת v : גובה העץ הוא 2+ h. הוכנס צומת v שהגדיל את גובה AL ל-1+h . +1 0 A מצד ימין של הצמתים מסומנים גורמי האיזון שהשתנו. גלגול LL : יעביר את A לשורש h BR h AL AR v h

  25. גלגול LR +1 +2 C -1 0 A +1 0 B h CR h-1 BL BR AL v 0 B גובה העץ אחרי הגלגול הוא 2+h , כמו לפני ההכנסה. שינינו (1)O מצביעים ולכן זמן הגלגול (1)O. A C 0 -1 h-1 BL BR h h AL CR v לפני הכנסת איבר v : הוכנס איבר ל-BL שגרם לו להעלות את גובהו ל-h. גלגול LR:

  26. 12 8 15 10 6 24 14 11 4 20 29 13 +1 19 12 18 8 15 10 6 24 14 0 11 4 19 29 13 לאחר גלגול LL: 20 18 דוגמא להכנסת ערך x לעץ AVL הוסף 18: +2 cs,Technion

  27. +2 15 -1 20 10 24 17 6 13 14 4 7 12 11 13 10 15 לאחר גלגול LR: 6 12 14 20 4 7 11 24 17 דוגמא להכנסת ערך x לעץ AVL הוסף 11 :

  28. -2 11 1 8 19 6 10 25 13 29 12 23 17 15 -1 13 11 0 8 19 12 10 25 6 17 29 23 15 דוגמא להכנסת ערך x לעץ AVL הוסף 15 (נחוץ גלגול RL) לאחר גלגול RL:

  29. אלגוריתם להכנסת ערך x לעץ AVL • הכנס את x כמו לעץ חיפוש בינרי. יהי v העלה שהוסף. • h(v) = 0 • כל עוד 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

  30. מציאת המקום הדרוש להכנסה (h)O הוספת הצומת (1)O מציאת המקום בו מופר האיזון (אם מופר) (h)O תיקון האיזון (1)O סה"כ O(h) = O(log n) זמן ההכנסה לעץ AVL כיוון שהצומת בו עושים גלגול לא משנה את גובהו, מבצעים רק גלגול אחד. cs,Technion

  31. אלגוריתם הוצאה • הוצא צומת v כפי שהפעולה מתבצעת בעץ חיפוש בינרי. • תקן את גורמי האיזון בצורה הבאה. לכל צומת v לאורך המסלול • החל מלמטה ועד לשורש בצע: • עדכן אתBF(v) • אם |BF(v)| = 2 , בצע גלגול והמשך כלפי מעלה. • אם גובה תת העץ ששורשו v לא השתנה, סיים. • אם גובה תת העץ השתנה ו-BF(v) תקין, המשך כלפי מעלה. בהוצאה יתכן יותר מגלגול אחד. cs,Technion

  32. -2 5 0 גלגול RL -1 3 8 2 4 6 10 7 9 12 11 0 8 0 גלגול RR 5 10 0 3 6 9 12 2 4 7 11 דוגמא להוצאה מעץ AVL 5 -2 2 8 1 * 4 6 10 3 7 9 12 11 cs,Technion

  33. דוגמא: הוצאה מעץ פיבונצ'י בהוצאה יתכן גלגול בכל צומת על המסלול בין הצומת המוצא ובין השורש. לדוגמא כאשר מוציאים עלה ראשון מעץ פיבונצ'י - Fi. A C * B תרגיל לבית: מהי סדרת הגלגולים המתבצעת כאשר מוציאים עלה ראשון מעץ פיבונצ'י - Fi. cs,Technion

  34. זמן ההוצאה מעץ AVL מציאת המקום הדרוש להוצאה (h)O מציאת המקום בו מופר האיזון (אם מופר) (h)O תיקון האיזון (h)O (לכל היותר פעם בכל רמה) סה"כ O(h) = O(log n) עצי AVL מאפשרים חיפוש, הכנסה, הוצאה בזמן O(log n) cs,Technion

  35. סיבוכיות הפעולות: cs,Technion

More Related