מבני נתונים
This presentation is the property of its rightful owner.
Sponsored Links
1 / 40

מבני נתונים PowerPoint PPT Presentation


  • 141 Views
  • Uploaded on
  • Presentation posted in: General

מבני נתונים. שיעור 6 – עצים, עצים בינאריים עצי חיפוש, עצי AVL . עצים. עץ הינו מבנה נתונים היררכי הבנוי בדומה לעץ עם ענפים ועלים. Computers”R”Us. Sales. Manufacturing. R&D. US. International. Laptops. Desktops. Europe. Asia. Canada. עצים - הגדרה. מבנה נתונים היררכי מופשט.

Download Presentation

מבני נתונים

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


2696428

מבני נתונים

שיעור 6 – עצים, עצים בינאריים עצי חיפוש, עצי AVL.


2696428

עצים

  • עץ הינו מבנה נתונים היררכי הבנוי בדומה לעץ עם ענפים ועלים.


2696428

Computers”R”Us

Sales

Manufacturing

R&D

US

International

Laptops

Desktops

Europe

Asia

Canada

עצים - הגדרה

  • מבנה נתונים היררכי מופשט.

  • עץ מורכב מאיברים בעלי יחסי הורה-ילד

  • שימושים:

    • תרשימים לארגון נתונים

    • ארגון קבצים (תיקיות וקבצים)

    • מבנים וארגונים היררכיים (צבא, מפעל)


2696428

A

C

D

B

E

G

H

F

K

I

J

מושגי יסוד

  • שורש - איבר ללא הורה (A)

  • ענף (איבר פנימי) - בעל לפחות ילד אחד (A,B,C,F)

  • עלה (איבר חיצוני) – איבר ללא ילדים (D,E,G,H,I,J,K)

  • אב קדמון של איבר- כל דורות ההורים

  • עומק של איבר – מספר האבות הקדמונים (F=2)

  • גובה העץ – עומק מקסימלי בכל העץ (3)

  • צאצאים – ילדים, נכדים וכו'

  • תת עץ – מורכב מאיבר וכל צאצאיו

subtree


2696428

תכונות של עצים

  • מבנה היררכי ללא מעגלים

  • קיים מסלול יחיד מהשורש לכל אחד מאיברי העץ

  • לכל איבר הורה יחיד אך יכולים להיות לו מספר ילדים

  • סדר – קיים סדר מסויים לעבור על איברי העץ.

  • רקורסיה – כל תת-עץ מקיים את כל התכונות של העץ כולו


2696428

מבנה העץ

כל איבר (Node) מכיל:

  • נתונים

  • מצביע על ההורה

  • מערך מצביעים על הילדים

B

A

D

F

B

A

D

F

C

E

C

E


2696428

עץ בינארי

  • עץ בינארי הוא עץ בעל התכונות הבאות:

    • לכל איבר פנימי יש לכל היותר 2 ילדים

    • ערכי הילדים של איבר פנימי מסודרים ע"פ סדר מסויים

    • הילדים של איבר פנימי נקראים "ילד שמאלי" ו"ילד ימני" בהתאמה

  • שימושים:

    • מיון

    • תהליכי החלטה

    • ביטויים אריתמטיים

A

C

B

D

E

F

G

I

H


2696428

דוגמאות לעצים בינאריים


2696428

+

2

-

3

b

a

1

עץ בינארי של ביטוי אריתמטי

  • ניתן להגדיר ביטויים אריתמטיים בעזרת עץ בינארי

  • איברים פנימיים – פעולות אריתמטיות

  • איברים חיצוניים (עלים) – מספרים/משתנים

  • דוגמא: הביטוי (2  (a - 1) + (3  b)) מתואר בעץ:


2696428

עצי החלטה בינאריים

  • עץ החלטה בינארי מתאר תהליך קבלת החלטה

  • איברים פנימיים – שאלות עם תשובות כן/לא

  • איברים חיצוניים (עלים) – החלטות

  • דוגמא: עץ החלטה על ארוחת ערב

Want a fast meal?

No

Yes

How about coffee?

On expense account?

Yes

No

Yes

No

Starbucks

Spike’s

Al Forno

Café Paragon


2696428

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

  • חוקיות סדר בעץ חיפוש בינארי: לכל איבר ערך הילד השמאלי תמיד קטן מהאיבר וערך הילד הימני תמיד גדול מהאיבר.

  • חוקיות זו משמעותה שעץ בינארי לא יכיל שני ערכים זהים.

  • שיטות הכנסת והוצאת איברים מהעץ דואגות לשמר את חוקיות הסדר.


2696428

דוגמאות - עצי חיפוש בינאריים

53

Binary Search Tree 2


2696428

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

  • משלב יתרונות של מערך ממויין ורשימה מקושרת

  • ניתן לבצע חיפוש במהירות בדומה למערך ממויין

  • חיפוש ברשימה מקושרת יקר, מדוע?

  • ניתן למחוק ולהכניס איברים בקלות בדומה לרשימה מקושרת

  • הכנסת איבר למערך ממויין מורכב, מדוע?


2696428

מבנה עץ בינארי


2696428

מימוש עץ בינארי בג'אווהמחלקה Node

public class Node

{

public int data;

private Node leftChild;

private Node rightChild;

}


2696428

מימוש עץ בינארי בג'אווהמחלקת Tree

public class Tree

{

private Node root;

//Methods

public Node find(int key)

public void insert(int key)

public void delete(int key)

//and more methods…

}


2696428

מימוש עץ בינארי בג'אווהדוגמא למחלקת Main

public class Maim

{

public static void main(String[] args)

{

Tree theTree = new Tree();

theTree.insert(50);

theTree.insert(70);

theTree.insert(12);

Node x = theTree.find(70);

theTree.delete(12);

Node y = theTree.find(12);

}

}


2696428

שיטת find

  • פעולת חיפוש הינה פעולה פשוטה בעץ בינארי עקב המבנה והסדר המיוחד של העץ.

  • מחפשת אוביקט Node עם מפתח מסוים, אם נמצא מחזירה את האוביקט אם לא מחזירה null

  • המפתח יכול להיות תעודת זהות או מס' סידורי

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


2696428

דוגמא לחיפוש – איבר 57


2696428

חיפוש ערך בעץ בינארי(Node = 37)

CurrentNodeAction

Root = 50Compare item = 37 and 50

37 < 50, move to the left subtree

Node = 30Compare item = 37 and 30

37 > 30, move to the right subtree

Node = 35Compare item = 37 and 35

37 > 35, move to the right subtree

Node = 37Compare item = 37 and 37. Item

found.


2696428

מימוש שיטת find

public Node find (int key){

Node current = root;

while (current.data != key){

if(key < current.data)

current = current.leftChild; //בן שמאלי

else

current = current.rightChild; //בן ימני

if(current == null)

return null //לא נמצא

}

return current;//איבר מוחזר

}


2696428

מימוש רקורסיבי שיטת find

public Node findR (int key, Node current){

if(current == null);

return null //לא נמצא

if(key < current.data)

return findR(key, current.leftChild); //בן שמאלי

if(key == current.data)

return current;// איבר מוחזר

if(key > current.data)

return findR(key, current.rightChild); //בן ימני

}


Insert

שיטת insert

  • פעולת הכנסת איבר היא למעשה זהה לפעולת חיפוש איבר שאינו קיים.

  • בדומה לחיפוש איבר, בהכנסת איבר חדש "מטיילים" על העץ עד שמגיעים לעלה, אשר הופך להורה של האיבר החדש המוכנס.

  • האיבר החדש יהיה בן שמאלי של העלה אם הוא קטן ממנו, או בן ימני אם הוא גדול ממנו (בהתאם לחוקיות הסדר)


Insert1

שיטת insert - דוגמא

6

<

2

9

>

1

4

8

>

  • הכנסת הערך 5.

  • תחילה מתבצע חיפוש find עם המפתח 5

  • אנו מניחים שלא קיים איבר עם ערך 5

  • כאשר מגיעים לעלה W מוסיפים את האיבר החדש במקומו (מימין ל 4)

w

6

2

9

1

4

8

w

5


Traversing

סריקת איברי העץ - Traversing

  • פעולה זו עוברת על כל איברי העץ ע"פ סדר מסוים

  • פעולת הסריקה פחות שימושית מחיפוש איבר מסוים

  • קיימות 3 דרכים פשוטות לסריקת עץ בינרי

    • Inorder: סריקה על כל איברי העץ בסדר עולה

    • Preorder: כל איבר נסרק לפני הילדים שלו

    • Postorder: כל איבר נסרק אחרי הילדים שלו


Inorder

סריקת Inorder

  • צורת הסריקה השכיחה והשימושית ביותר.

  • מאפשר ליצור רשימה ממוינת של איברי העץ

  • מימוש רקורסיבי יעיל לסריקת Inorder

  • השיטה נקראת עם איבר נוכחי, כאשר מתחילים מהשורש, ומבצעת שלושה פעולות:

    • השיטה קוראת לעצמה (רקורסיה) עם הבן השמאלי

    • מבצעת פעולה על האיבר הנוכחי (פעולת הביקור)

    • השיטה קוראת לעצמה (רקורסיה) עם הבן הימני


Inorder1

דוגמא - סריקת Inorder


Inorder2

דוגמא - סריקת Inorder


Preorder

סריקת Preorder

  • שיטה רקורסיבית לסריקת Preorder נקראת עם איבר נוכחי החל מהשורש:

    • מבצעת פעולה על האיבר הנוכחי (פעולת הביקור)

    • השיטה קוראת לעצמה (רקורסיה) עם הבן השמאלי

    • השיטה קוראת לעצמה (רקורסיה) עם הבן הימני

  • שיטת סריקה זו שימושית כאשר יש להדפיס מסמך עם פרקים ותתי פרקים ע"פ הסדר


Preorder1

דוגמא – סריקת Preorder

1

Make Money Fast!

2

5

9

1. Motivations

2. Methods

References

6

7

8

3

4

2.3 BankRobbery

2.1 StockFraud

2.2 PonziScheme

1.1 Greed

1.2 Avidity


Postorder

סריקת Postorder

  • שיטה רקורסיבית לסריקת Postorder נקראת עם איבר נוכחי החל מהשורש:

    • השיטה קוראת לעצמה (רקורסיה) עם הבן השמאלי

    • השיטה קוראת לעצמה (רקורסיה) עם הבן הימני

    • מבצעת פעולה על האיבר הנוכחי (פעולת הביקור)

  • שיטת סריקה זו שימושית כאשר יש לחשב נפח קבצים של תיקיות ותתי תיקיות.


Postorder1

דוגמא – סריקת Postorder

9

cs16/

8

3

7

todo.txt1K

homeworks/

programs/

4

5

6

1

2

Robot.java20K

h1c.doc3K

h1nc.doc2K

DDR.java10K

Stocks.java25K


2696428

מחיקת איבר מעץ בינארי


2696428

מקרה א – מחיקת עלה


2696428

מקרה ב – מחיקת איבר עם בן שמאלי בלבד


2696428

מקרה ב – מחיקת איבר עם בן ימני בלבד


2696428

מקרה ב – מחיקת איבר עם שני בנים...

שיעור הבא? אולי שנה הבא?


2696428

נתון עץ בינארי כלשהו בעל n צמתים. בכל צומת יש:

מפתח – מספר טבעי כלשהו

שני מצביעים לבנים

שדה נוסף המכיל מספר טבעי (מותר להשתמש בו לביצוע המשימה הנדרשת)

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

יש להדפיס את הערכים לאורך מסלול זה.

סיבוכיות זמן נדרשת – O(n)

תרגיל


2696428

חישוב הערך:

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

הדפסת המסלול:

בשדה הנוסף בכל צומת נרשום 0 אם המקסימום התקבל מתת-העץ השמאלי, ו- 1 אם מהימני.

לאחר חישוב הערך נדפיס לאורך המסלול המסומן את ערכיו.

פתרון


2696428

דוגמא:

100+20

20

0

100

50


  • Login