15
1 םםםם םםםםםם1 םםםםםם- © םםםםם םםםם1 3 4 5 6 2 תתתתתת- תתתת תתתתתתתת תתתת תתתת: םםםם םםםםם םם םםםםם תתתת: םםם םםם תתת: םםםם םםםם םם םםםם תתתת תתתתת: םםםם םםםםם םםם תתתת תתת תתת תתתתת: םםםם םםםםםם םםםםם םםם םםם)םםםםם( םםםםםם םםםםםם. תתתת תת תתתת: םםםם םםםםם םםםםםם תתתת תת תת: םםםםם םםםםםםםם םם םםםם םםם תת תת תת תתתת : םםםם םם םםםםםם םם םםםםם םםםם םםם . םםםםםםם םםם תתתת תת תתתת : םםםם םם םםם םם .

עצים בינאריים - תזכורת

  • Upload
    marlee

  • View
    92

  • Download
    6

Embed Size (px)

DESCRIPTION

עצים בינאריים - תזכורת. 1. 2. 3. 4. 5. 6. דרגת צומת: מספר הבנים של הצומת שורש: ראש העץ עלה: צומת שאין לו בנים צומת פנימי: צומת שאינו עלה מרחק בין שני צמתים: מספר הקשתות במסלול (היחיד) שמחבר בין שתי הצמתים. עומק של צומת: מרחק הצומת מהשורש גובה של עץ: העומק המקסימלי של צומת בעץ - PowerPoint PPT Presentation

Citation preview

Page 1: עצים בינאריים - תזכורת

נתונים 1 ©טכניון - 1מבני יניב יונתן

1

3

4 5

6

2

תזכורת - בינאריים עצים

: צומת הצומת דרגת של הבנים מספרהעץ שורש: ראשבנים עלה: לו שאין צומת

: פנימי עלה צומת שאינו צומת: צמתים שני בין הקשתות מרחק מספר

. ) הצמתים ) שתי בין שמחבר היחיד במסלול

: צומת של מהשורש עומק הצומת מרחק: עץ של צומת גובה של המקסימלי העומק

בעץצומת : של עץ כך תת הצמתים כל אוסף

דרך . עובר לשורש בין שהמסלולצומת : של של .גובה העץ תת גובה

Page 2: עצים בינאריים - תזכורת

נתונים 2 ©טכניון - 1מבני יניב יונתן

התכונה חיפושעץ את המקיים בינארי עץ הינו בינאריהבאה:

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

יותר

מלא בינארי עץ(full)

שלם בינארי עץ(complete)

𝒙

¿ 𝒙 ¿ 𝒙

פנימי צומת .2לכל העלים בנים כל שבו מלא בינארי עץ. העומק באותו

בעצי הערה: עוסקים לא עוד בינאריים חיפושאנו .

Page 3: עצים בינאריים - תזכורת

נתונים 3 ©טכניון - 1מבני יניב יונתן

הערות:ייחודי. 1 מפתח צומת שמבדיל בינו לבין שאר הצמתים.keyלכל.NULL. אם לא קיים בן שמאלי או בן ימני, ערך המצביע יהיה 2. ניתן לשמור בכל צומת גם מצביע לצומת האב.3

בינאריים עצים מימוש

left_son right_son

struct node { int key; void* info;   struct node* left_son; struct node* right_son;}

Page 4: עצים בינאריים - תזכורת

נתונים 4 ©טכניון - 1מבני יניב יונתן

בעצים סיורים

,:Preorderסיור בשורש טיפול,Preorderסיור השמאלי העץ בתת.Preorderסיור הימני העץ בתת

 ,Inorderסיור :Inorderסיור השמאלי העץ בתת

, בשורש טיפול.Inorderסיור הימני העץ בתת

 ,Postorderסיור :Postorderסיור השמאלי העץ בתת

,Postorderסיור הימני העץ בתת. בשורש טיפול

http://nova.umuc.edu/~jarc/idsv/ :הדגמה

Page 5: עצים בינאריים - תזכורת

נתונים 5 ©טכניון - 1מבני יניב יונתן

ptr = root;while (1) {

while (ptr != NULL) {push(ptr);ptr = ptr->left;

}if (is_empty()) break;

 ptr = pop();do_something(ptr);ptr = ptr->right;

}

: העץ שורש עם תחילה נקראת הפונקציהinorder(root)

inorder(node* p) {if (p == NULL) return; inorder(p->left);do_something(p);inorder(p->right);}

רקורסיה :ללא רקורסיה :בעזרתסיור Inorderמימוש

: המימושים שני עבור סיבוכיות ניתוח:ש ) זמן ( לוקחת do_somethingבהנחה:כאשר הוא גובה העץ( זיכרון(

Page 6: עצים בינאריים - תזכורת

נתונים 6 ©טכניון - 1מבני יניב יונתן

סיור. Preorderאה. שסריקת עצים בשני נתבונן :Preorderלא זהה היא שלהם

שאלה

1

2

1

2

2

1

1

2

בינארי עץ לגבות מנת , על כך, העץ על סריקות של תוצאות לשמור הוחלט. , העץ את לשחזר יהיה ניתן ימחק והעץ שבמקרה

, המידע בהינתן לא או העץ את לשחזר ניתן האם קבעו הבאות מההצעות אחת לכלשנשמר.

סיור. Postorderב , ה. סריקת דוגמא אותה עבור היא .Postorderלא

סיור. Inorderג: הבאים. העצים שני על נסתכל לא

Preorder: 1,2

Inorder: 1,2

Page 7: עצים בינאריים - תזכורת

נתונים 7 ©טכניון - 1מבני יניב יונתן

סיור. Inorderוסיור Preorderד: " אלו. סיורים משני העץ את משחזרים כיצד דוגמא י ע נראה כן

Inorder Preorder

 .Preorderשורש העץ הוא האיבר הראשון בסיור ה

נחלק כל סיור לשני תתי סיורים שמתאימים לתת העץ השמאלי והימני של השורש:

שאלה

1

. המקורי העץ את ונקבל העצים תתי שני על רקורסיבית בצורה שהוצע הפתרון את נפעיל

Page 8: עצים בינאריים - תזכורת

נתונים 8 ©טכניון - 1מבני יניב יונתן

: מצביעים שני נחזיק. נמצאים - אנחנו בו הנוכחי הצומת על שיצביע. היינו - בו הקודם הצומת על שיצביע

 סיור בדומה לקוד הלא רקורסיבי שהוצג קודם, אך במקום לשמור מחסנית, Inorderנבצע

ביחס ל .נקבע בכל שלב את הצעד הבא לפי המיקום של למשל, בכל פעם שנעלה להורה , נבדוק אם עלינו מבנו השמאלי או מבנו הימני.

: אם עלינו מהבן השמאלי של.()do_something. נבצע את 1. נמשיך בתת העץ הימני של .2

אם עלינו מהבן הימני של , סימן שסיימנולסייר בתת העץ של , לכן:

. נקבע את להיות ההורה של 1 להיות .. נקבע את 2

סיור זיכרון Inorderמימוש O(1)בסיבוכיות

v v

vv

Page 9: עצים בינאריים - תזכורת

נתונים 9 ©טכניון - 1מבני יניב יונתן

1: בינארי. בעץ הצמתים מספר חישובint count(node *p) {

if (p == NULL) return 0;return (1 + count(p->left) + count(p->right));

}

בד ביותר בעץכ. מציאת המסלול ה2נתון עץ בעל צמתים, בו כל צומת מכיל מפתח ושני מצביעים לבנים.

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

זה..מותר להוסיף שדות נוספים לצמתים לצורך הפתרון

בסיורים לשימוש דוגמאות

Page 10: עצים בינאריים - תזכורת

נתונים 10 ©טכניון - 1מבני יניב יונתן

בסיורים לשימוש דוגמאותשאלה 2פתרון

Page 11: עצים בינאריים - תזכורת

נתונים 11 ©טכניון - 1מבני יניב יונתן

הנתונים מבנה את לממש ניתן בינארי חיפוש עץ .מילוןבאמצעותמבנה הנתונים מילון תומך בשלושת הפעולות הבאות:

Find().חפש האם נמצא במילוןInsert().הכנס את למילוןDelete().הוצא את מהמילון

התכונה חיפושעץ את המקיים בינארי עץ הינו בינאריהבאה:

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

יותר

בינאריים חיפוש עצי

𝒙

¿ 𝒙 ¿ 𝒙

Page 12: עצים בינאריים - תזכורת

נתונים 12 ©טכניון - 1מבני יניב יונתן

, . , , של הזמן סיבוכיות לכן העץ גובה כאשר צמתים על לעבור נצטרך הגרוע במקרההיא . החיפוש פעולת

. , : שרוך הוא העץ כאשר למשל הגרוע במקרה. , : שלם עץ עבור למשל הטוב במקרה. : הממוצע במקרה

בינארי חיפוש בעץ חיפוש

13

3

1 7

5 10

15

20

17

.) ( . נסמנו העץ משורש נתחיל בעץ מפתח בעל צומת קיים האם למצוא נרצה. , של הימני העץ בתת את רקורסיבית בצורה נחפש אם. , של השמאלי העץ בתת את רקורסיבית בצורה נחפש אם. , את מצאנו אם. בעץ , נמצא לא אז את שמצאנו מבלי החיפוש מסלול לסוף הגענו אם

Page 13: עצים בינאריים - תזכורת

נתונים 13 ©טכניון - 1מבני יניב יונתן

. לעץ מפתח בעל צומת להכניס נרצה ) ( , . , בהתאמה . שמאלי או ימני חדש בן נוסיף אחרת נסיים אותו מצאנו אם את נחפש

. החיפוש במסלול האחרון לצומת. עלה יהיה תמיד לעץ שמתווסף החדש הצומת

בינארי חיפוש לעץ הכנסה

14

Insert(14) 13

3

1 7

5 10

15

20

17

.סיבוכיות: החיפוש , פעולת עבור שהראנו כפי הינה ההכנסה פעולת של הזמן סיבוכיות

Page 14: עצים בינאריים - תזכורת

נתונים 14 ©טכניון - 1מבני יניב יונתן

. . אביו את ב נסמן מהעץ מפתח בעל צומת למחוק נרצה: מקרים ל נפריד

1: עלה. .הוא ונסיים מהעץ את נמחק 

נחבר את הבן של ל באופן הבא:. ל בן יחיד:2

בינארי חיפוש מעץ הוצאה

v

x

v

x

v

x

v

x

Page 15: עצים בינאריים - תזכורת

נתונים 15 ©טכניון - 1מבני יניב יונתן

הפעולות שלושת של הזמן . בעץ חיפוש בינארי הוא Find, Insert, Deleteסיבוכיותלכן, כל אחת מפעולות אלה לוקחות במקרה הגרוע, אך בממוצע על הקלט.

3: בנים. שני ב ) (:ל נסמנו של העוקב האיבר לבין בין נחליף. : מ שגדול בעץ ביותר הקטן האיבר של העוקב האיבר. , של הימני העץ בתת המינימלי האיבר הוא בנים שני ל אם

. .) קודם ) שתיארנו כפי את נמחק למה חשבו היותר לכל אחד בן יש ל כעת

בינארי חיפוש מעץ הוצאה

x

v

y

y

x

v

y

v