Presentation is loading. Please wait.

Presentation is loading. Please wait.

עצים root הגדרת עץ חופשי: גרף לא מכוון ללא מעגלים

Similar presentations


Presentation on theme: "עצים root הגדרת עץ חופשי: גרף לא מכוון ללא מעגלים"— Presentation transcript:

1 עצים root הגדרת עץ חופשי: גרף לא מכוון ללא מעגלים
עץ מושרש: קובעים קודקוד שורש: הקודקוד העליון

2 עצים בינאריים a לכל קודקוד יש לכל היותר שני בנים.
יש חשיבות לסדר כלומר: יש הבדל בין LEFT ל- RIGHT c b d e f g h

3 מימוש עצים בינאריים *root value L R null value value L R P L R P value

4 How About Trees with Higher Degree?
If highest degree is d: value S1 S2 S3 Sd P

5 Problem: What if few nodes have high degree d
but most have very low degree? we end up wasting space! Solution: linked lists. Do: Instead of: value S P value S1 S2 S3 Sd P S1 S1 S1 S1

6 יער יער - אוסף של עצים כללים. איך לאחסן בצורה טובה?
רעיון דומה לאחסון עץ לא בינארי וקיצור דרך...

7 ייצוג יער g a b c h i j d e f k k a g l b c d e f

8 ייצוג יער בעזרת עץ בינארי
שורשי העצים k a g b c h i j l בן של g d e f g a רשמת האחים של d b c h i j d e f k l

9 ייצוג יער בעזרת עץ בינארי
שורשי העצים k a g b c h i j l בן של g d e f רשימת אחים של d

10 DFS Forest A E A B C C F D D F E B Back arrow

11 Binary Tree Traversal Do DFS on the tree: Preorder: First Visit
Inorder: Second Visit Postorder: Third Visit

12 ביטוי אלגברי -+ABC: Prefixא. A+B-C: Infixב. AB+C-: Postfixג.

13 עץ חישוב * - + 3 / 9 2 5 7 infix: (3+(5/7))*(9-2)
postfix ??? prefix ???

14 Preorder 1 2 2 3 Preorder( node* v ) if (v==null) return; 1.
Print v->value 2. Preorder( v->left ) 3. Preorder( v->right )

15 דוגמא * + 5 - 3 9 7 Prefix: * + 5 7 - 9 3

16 Inorder 2 1 3 Inorder( node* v ) if )v==null( return;
Inorder( v->left ) 1. Print v->value 2. Inorder( v->right ) 3.

17 דוגמא * + 5 - 3 9 7 Infix: ( ) 5+7 * 9-3

18 Postorder 3 1 2 Postorder( node *v ) if )v ==null ) return
Postorder( v->left ) 1. Postorder( v->right ) 2. Print v->value 3.

19 דוגמא * + 5 - 3 9 7 Postfix: *

20 סיכום - עץ חישוב * - + 3 / 9 2 5 7 infix: (3+(5/7))*(9-2)
* + 3 / 5 7 – 9 2 prefix: 3 5 7 / * postfix:

21 עץ חיפוש בינארי 6 8 2 1 5 7 9 3

22 הגדרה x <x >x T עץ חיפוש בינארי אם: T הוא עץ בינארי.
כל האברים שבתת-עץ השמאלי קטנים מהשורש. כל האברים בתת-עץ הימני גדולים מהשורש. תתי-עצים הימני והשמאלי הם עצי חיפוש בינארים. x <x >x

23 עצי חיפוש בינארי לכל קבוצת איברים יש מספר עצי חיפוש בינאריים: דוגמא:
{1,2,3,4} 1 3 4 1 2 2 2 3 1 3 4 4

24 עץ חיפוש בינארי - פעולות
6 8 2 1 5 7 9 3 פעולות: 1. T <- MAKE () 2. FIND(x) 3. INSERT(x) 4. DELETE(x)

25 עץ חיפוש בינארי - חיפוש find(3) 3<6 ? 6 3<2 ? 8 2 3<5 ? 1 5 7
עץ חיפוש בינארי - חיפוש find(3) 3<6 ? 6 3<2 ? 8 2 3<5 ? 1 5 7 9 3 found!!

26 עץ חיפוש בינארי - הוספה insert(7.5) 7.5<6 ? 6 7.5<8 ? 8 2
7.5<7 ? 1 5 7 9 7.5 3

27 עץ חיפוש בינארי -מחיקה בעיה: איך בדיוק? לדוגמא: מחק את '2' 6 8 2 1 5 7
עץ חיפוש בינארי -מחיקה בעיה: איך בדיוק? לדוגמא: מחק את '2' 6 8 2 1 5 7 9 3

28 עץ חיפוש בינארי -מחיקה ??? כדי לפתור בעיה זו נחלק למספר מקרים:
עץ חיפוש בינארי -מחיקה כדי לפתור בעיה זו נחלק למספר מקרים: א. האיבר שאנו רוצים למחוק הוא עלה (כלומר אין לו בנים). ב. לאיבר שאנו רוצים למחוק יש רק בן אחד. ג. לאיבר שאנו רוצים למחוק יש שני בנים. ???

29 מקרה א דוגמא: כדי למחוק את 3 כל מה שצריך זה לעדכן את הבן הימני של 2 ל-null ולשחרר אותו. 6 8 5 7 9 2 1 3

30 מקרה ב דוגמא: כדי למחוק את 5 נעדכן את הבן השמאלי של 6 להיות 2 ונשחרר את 5 6 8 5 7 9 2 1 3

31 מקרה ג 6 8 4 7 9 2 5 1 דוגמא: כדי למחוק את 4: נשים במקומו את האיבר הכי גדול שקטן ממנו (הקודם המיידי), נסמנו ב-x (במקרה שלנו 3). ונמחק את הקודקוד ש-x היה שם (זה קל כי ל-x לא יכול להיות בן ימיני). 3

32 מקרה ג 6 8 3 7 9 2 5 1 דוגמא: כדי למחוק את 4: נשים במקומו את האיבר הכי גדול שקטן מימנו (הקודם המיידי), נסמנו ב-x (במקרה שלנו 3). ונמחק את הקודקוד ש-x היה שם (זה קל כי ל-x לא יכול להיות בן ימיני). ?

33 מקרה ג איך מוצאים את הקודם המיידי? 6 8 3 7 9 2 5 1
פונים שמאלה ויורדים עד הסוף ימינה.

34 דוגמא נוספת delete(4) 6 8 4 7 9 2 5 1 3 2.5

35 דוגמא נוספת delete(4) 6 8 3 7 9 2 5 1 ? 2.5

36 דוגמא נוספת delete(4) 6 8 3 7 9 2 5 1 2.5

37 איך מוכיחים טענות על עצים?
אינדוקציה

38 עץ בינארי מורחב עץ בינארי שבו כל צומת הוא או אב לשני בנים או שאין לו בנים. עלה צומת פנימי הערה: כאשר מדברים על מספר הצמתים בעץ בינארי מורחב, מדברים על צמתים פנימיים ללא עלים. (בדוגמא יש 4 צמתים) טענה: בעץ בינארי מורחב בעל n צמתים יש בדיוק n+1 עלים.

39 הוכחה באינדוקציה 1. בסיס האינדוקציה: צומת אחד, שני בנים.
2. הנחת האינדוקציה: נניח כי בעץ בעל n-1 צמתים יש בדיוק n עלים. 3. נספור כמה צמתים חיצוניים יש לעץ בעל n צמתים. - נבחר קודקוד פנימי שהוא אב לשני קודקודים חיצוניים. - נוריד אותו ובמקומו נשים קודקוד חיצוני . - העץ החדש מתאים להנחת האינדוקציה, לכן מספר הקודקודים החיצוניים בעץ המקורי: 1 (שהוספנו) – 2 (שהורדנו) + n (מהנחה) = n+1

40 טענה נוספת יהיו l1,l2,…,ln+1 רמות של n+1 העלים החיצוניים בעץ בינארי מורחב בעל n צמתים פנימיים. אזי i=1n+1(2-li)= 1 1/4 1/4 1/4 1/8 1/8 Sum = 1/8 + 1/8 + 1/4 + 1/4 + 1/4 = 1

41 הוכחה באינדוקציה 1. בסיס האינדוקציה: 1/2+1/2=1.
2. הנחת האינדוקציה: נניח נכונות עבור עץ בעל n-1 צמתים פנימיים. 3. נבדוק בעץ בעל n צמתים פנימיים. - נחזור על הטריק מההוכחה הקודמת. - העץ החדש מתאים להנחת האינדוקציה, לכן נוכל לטעון : i=1n(2-li)= 1 . - נבדוק את השינוי שעשינו: 1 = 1 – 2-h + 2*(2-(h+1))

42 סיבוכיות הסיבוכיות של חיפוש במקרה הגרוע:
לכל פעולה היא O(h), כאשר h=גובה העץ. h-במקרה הגרוע הוא O(n)

43 עץ בינארי מלא אז מה העץ הכי טוב? עץ בינארי מלא!
עץ בינארי מלא קיים רק ל-n מסוימים: n=1+2+4+…+2h=2h+1-1

44 עץ בינארי מאוזן לחלוטין
אך לא בכל מקרה יש עץ בינארי מלא! לכן נוכל לקוות לבנות עץ כמעט מלא. כל העלים החיצונים נמצאים ברמה h או ברמה h-1. זה העץ הכי טוב שקיים. 2 למה? נניח כי יש שני עלים בהפרש גובה של 2. אזי נוכל לשנות מיקום כך שישמר מספר קודקודים חיצוניים ופנימיים, אבל אורך המסלול החיצוני יקטן. 1

45 עצים מאוזנים קשה (יקר) לדאוג לזה שעץ בינארי תמיד יהיה מאוזן לחלוטין (כאשר תומכים בהוספה ומחיקה). לכן נדבר על עצים מאוזנים – עצים שקרובים להיות מאוזנים לחלוטין. במקום שהעץ יהיה מאוזן לחלוטין נדרוש שהוא לא יהיה "גבוה"

46 עצים מאוזני גובה – AVL Adelson-Velskii Landis

47 עצים מאוזני גובה – AVL T Tl Tr T הוא עץ AVL אם: T הוא עץ חיפוש בינארי
|h(Tl)-h(Tr)|1 Tl, Tr הם עצי AVL Tl Tr

48 דוגמאות \ -- / נסמן \ , -- , / לפי ההפרש

49 עצי AVL הכי קטנים |Tn| = |Tn-1| + |Tn-2|1 + > 2|Tn-2| +1 T0 T1 T2

50 Solve the Recurrence: T(0)=1 T(n) > 2 T(n - 2) +1
2i T(n-2i) + 2i-1+2i-2+…+2+1 = 2n/2+ 2n/2 -1 = 2n/2+1 -1 Conclude: The number of elements in the smallest AVL tree of height n is less than 2n/2+1 – 1.

51 Solve the Recurrence: Conclude: The number of elements in the smallest AVL tree of height n is less than 2n/2+1 – 1. log |Tn| > log (2n/2+1 -1) > log (2n/2+1) = n/2 + 1 2 log|Tn| > n This means that: The height of an AVL tree with k elements can not be more than 2 log k.

52 עצי AVL ראינו שעצי AVL הם "מספיק מאוזנים" בשבילנו.

53 סיבובים a b a T1 T2 T3 b T3 T1 T2 כמובן שאפשר לסובב הפוך (בחזרה) 9 6 3

54 הוספת איבר מוסיפים איבר בדיוק כמו בעץ חיפוש רק שאחרי זה מאזנים את העץ.
הולכים ממקום ההוספה לכיוון השורש ותוך כדי משנים את הסימונים ( \ , -- , / ). מתי עוצרים? בעיה: לפעמיים יהיה הפרש 2 - לא חוקי!! במקרים כאלה נבצע סיבובים.

55 הוספה T / -- Tl Tr חדש הגובה של תת-עץ זה גדל באחד לכן ממשיכים לכיוון השורש. אין צורך בסיבובים.

56 הוספה T -- \ Tl Tr חדש הגובה של תת-עץ זה לא השתנה לכן אפשר לעצור את התהליך . אין צורך בסיבובים.

57 הוספה (סיבובים - RIGHT)
-2 y לפני:h+2 C B A x y חדש -- / / x -- -- C h h+1 A B h h h h h+1 חדש לא האם אחרי ביצוע הסיבוב יש להמשיך? אותו דבר יש ל LEFT-

58 הוספה (סיבובים: LEFT-RIGHT)
-2 לפני:h+3 z / h+3 D C B A x y z חדש -- \ y h+1 -- D -- \ / x h+1 -- h+1 A h+1 h h+1 h h B C h+1 חדש לא האם אחרי ביצוע הסיבוב יש להמשיך? אותו דבר יש ל- RIGHT-LEFT

59 Extended Example Insert 3,2,1,4,5,6,7, 16,15,14 3 3 3 5 3 2 1 Fig 3 2

60 Insert 3,2,1,4,5,6,7, 16,15,14 6 2 1 4 5 3 Fig 8 2 1 4 5 3 Fig 7 4 2 5 6 1 3 7 Fig 10 4 2 5 6 1 3 Fig 9 4 2 6 7 1 3 5 Fig 11

61 Insert 3,2,1,4,5,6,7, 16,15,14 4 2 6 7 1 3 5 16 Fig 12 4 2 6 7 1 3 5 16 15 Fig 13 4 2 6 15 1 3 5 16 7 Fig 14

62 הערה: שימו לב כי ישנן 4 אפשרויות לסיבובים: 2
Insert 3,2,1,4,5,6,7, 16,15,14 5 4 2 7 15 1 3 6 16 14 Fig 16 4 2 6 15 1 3 5 16 7 14 Fig 15 הערה: שימו לב כי ישנן 4 אפשרויות לסיבובים: 2 לסיבוב בודד ו-2 לכפול. איך נזהה את המקרים?

63 מחיקת איבר מוחקים איבר בדיוק כמו בעץ חיפש רק שאחרי זה מאזנים את העץ.
עיקרון: מחיקת איבר תמיד שקולה למחיקת עלה! מקרה 1 - מחיקת עלה. ברור. מקרה 2 - מחיקת איבר בעל בן אחד. הבן שלו חייב להיות עלה (למה??). לכן אפשר להחליף ביניהם (ולשנות צד) וזה שוב מחיקת עלה. מקרה 3 - מחיקת צומת פנימי. מחליפים אותו עם קודקוד אחר שהוא או עלה או שיש לו רק בן אחד.

64 מחיקת איבר אחרי מחיקת עלה:
הולכים ממקום המחיקה לכיוון השורש ותוך כדי משנים את הסימונים ( \ , -- , / ). מתי עוצרים? אותה בעיה: לפעמיים יהיה הפרש 2. במקרים כאלה נבצע סיבובים.

65 מחיקה T -- / Tl Tr נמחק הגובה של תת-עץ זה קטן באחד לכן ממשיכים לכיוון השורש. אין צורך בסיבובים.

66 מחיקה T \ -- Tl Tr נמחק הגובה של תת-עץ זה לא השתנה לכן אפשר לעצור את התהליך . אין צורך בסיבובים.

67 מחיקה (סיבובים - 1) לא h+2 -2 h+2 h-1 h h-1 נמחק h h h h
y h+2 C B A x y \ / x h-1 / -- C h A B h-1 נמחק h h h h *מסתכלים על הסימון של האח שלו לא האם אחרי ביצוע הסיבוב יש להמשיך?

68 מחיקה (סיבובים - 2) כן h+1 -2 h+2 h-1 h h-1 h-1 h נמחק h-1 h
y h+2 C B A x y -- / x h-1 -- / C h h-1 A B h-1 נמחק h h-1 h *מסתכלים על הסימון של האח שלו כן האם אחרי ביצוע הסיבוב יש להמשיך?

69 מחיקה (סיבוב כפול - 3) כן h+3 -2 h h+2 h +1 -- h h h B או C גובהם h
z h h+2 / h +1 D C B A x y z -- y \ D נמחק x ? A h B C h h B או C גובהם h כן האם אחרי ביצוע הסיבוב יש להמשיך?

70 סיבוכיות - הוכחנו כי גובה עץ AVL הוא O(logn).
- בכל הוספה/מחיקה מבקרים לכל היותר בכל הקודקודים במסלול מעלה עד לשורש ומבצעים עבודה בזמן קבוע בכל קודקוד.


Download ppt "עצים root הגדרת עץ חופשי: גרף לא מכוון ללא מעגלים"

Similar presentations


Ads by Google