1 / 40

מבני נתונים

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

alamea
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. 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. מבני נתונים שיעור 6 – עצים, עצים בינאריים עצי חיפוש, עצי AVL.

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

  3. Computers”R”Us Sales Manufacturing R&D US International Laptops Desktops Europe Asia Canada עצים - הגדרה • מבנה נתונים היררכי מופשט. • עץ מורכב מאיברים בעלי יחסי הורה-ילד • שימושים: • תרשימים לארגון נתונים • ארגון קבצים (תיקיות וקבצים) • מבנים וארגונים היררכיים (צבא, מפעל)

  4. 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

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

  6. מבנה העץ כל איבר (Node) מכיל: • נתונים • מצביע על ההורה • מערך מצביעים על הילדים B   A D F B A D F   C E C E

  7. עץ בינארי • עץ בינארי הוא עץ בעל התכונות הבאות: • לכל איבר פנימי יש לכל היותר 2 ילדים • ערכי הילדים של איבר פנימי מסודרים ע"פ סדר מסויים • הילדים של איבר פנימי נקראים "ילד שמאלי" ו"ילד ימני" בהתאמה • שימושים: • מיון • תהליכי החלטה • ביטויים אריתמטיים A C B D E F G I H

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

  9. +   2 - 3 b a 1 עץ בינארי של ביטוי אריתמטי • ניתן להגדיר ביטויים אריתמטיים בעזרת עץ בינארי • איברים פנימיים – פעולות אריתמטיות • איברים חיצוניים (עלים) – מספרים/משתנים • דוגמא: הביטוי (2  (a - 1) + (3  b)) מתואר בעץ:

  10. עצי החלטה בינאריים • עץ החלטה בינארי מתאר תהליך קבלת החלטה • איברים פנימיים – שאלות עם תשובות כן/לא • איברים חיצוניים (עלים) – החלטות • דוגמא: עץ החלטה על ארוחת ערב Want a fast meal? No Yes How about coffee? On expense account? Yes No Yes No Starbucks Spike’s Al Forno Café Paragon

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

  12. דוגמאות - עצי חיפוש בינאריים 53 Binary Search Tree 2

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

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

  15. מימוש עץ בינארי בג'אווהמחלקה Node public class Node { public int data; private Node leftChild; private Node rightChild; }

  16. מימוש עץ בינארי בג'אווהמחלקת 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… }

  17. מימוש עץ בינארי בג'אווהדוגמא למחלקת 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); } }

  18. שיטת find • פעולת חיפוש הינה פעולה פשוטה בעץ בינארי עקב המבנה והסדר המיוחד של העץ. • מחפשת אוביקט Node עם מפתח מסוים, אם נמצא מחזירה את האוביקט אם לא מחזירה null • המפתח יכול להיות תעודת זהות או מס' סידורי • מתחילים מהשורש, אם מפתח השורש שווה למבוקש סיימנו, אם המפתח המבוקש גדול ממנו עוברים לילד הימני אחרת לשמאלי. וממשיכים עד שמוצאים, או שהעץ נגמר.

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

  20. חיפוש ערך בעץ בינארי(Node = 37) Current NodeAction Root = 50 Compare item = 37 and 50 37 < 50, move to the left subtree Node = 30 Compare item = 37 and 30 37 > 30, move to the right subtree Node = 35 Compare item = 37 and 35 37 > 35, move to the right subtree Node = 37 Compare item = 37 and 37. Item found.

  21. מימוש שיטת 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;//איבר מוחזר }

  22. מימוש רקורסיבי שיטת 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); //בן ימני }

  23. שיטת insert • פעולת הכנסת איבר היא למעשה זהה לפעולת חיפוש איבר שאינו קיים. • בדומה לחיפוש איבר, בהכנסת איבר חדש "מטיילים" על העץ עד שמגיעים לעלה, אשר הופך להורה של האיבר החדש המוכנס. • האיבר החדש יהיה בן שמאלי של העלה אם הוא קטן ממנו, או בן ימני אם הוא גדול ממנו (בהתאם לחוקיות הסדר)

  24. שיטת insert - דוגמא 6 < 2 9 > 1 4 8 > • הכנסת הערך 5. • תחילה מתבצע חיפוש find עם המפתח 5 • אנו מניחים שלא קיים איבר עם ערך 5 • כאשר מגיעים לעלה W מוסיפים את האיבר החדש במקומו (מימין ל 4) w 6 2 9 1 4 8 w 5

  25. סריקת איברי העץ - Traversing • פעולה זו עוברת על כל איברי העץ ע"פ סדר מסוים • פעולת הסריקה פחות שימושית מחיפוש איבר מסוים • קיימות 3 דרכים פשוטות לסריקת עץ בינרי • Inorder: סריקה על כל איברי העץ בסדר עולה • Preorder: כל איבר נסרק לפני הילדים שלו • Postorder: כל איבר נסרק אחרי הילדים שלו

  26. סריקת Inorder • צורת הסריקה השכיחה והשימושית ביותר. • מאפשר ליצור רשימה ממוינת של איברי העץ • מימוש רקורסיבי יעיל לסריקת Inorder • השיטה נקראת עם איבר נוכחי, כאשר מתחילים מהשורש, ומבצעת שלושה פעולות: • השיטה קוראת לעצמה (רקורסיה) עם הבן השמאלי • מבצעת פעולה על האיבר הנוכחי (פעולת הביקור) • השיטה קוראת לעצמה (רקורסיה) עם הבן הימני

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

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

  29. סריקת Preorder • שיטה רקורסיבית לסריקת Preorder נקראת עם איבר נוכחי החל מהשורש: • מבצעת פעולה על האיבר הנוכחי (פעולת הביקור) • השיטה קוראת לעצמה (רקורסיה) עם הבן השמאלי • השיטה קוראת לעצמה (רקורסיה) עם הבן הימני • שיטת סריקה זו שימושית כאשר יש להדפיס מסמך עם פרקים ותתי פרקים ע"פ הסדר

  30. דוגמא – סריקת 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

  31. סריקת Postorder • שיטה רקורסיבית לסריקת Postorder נקראת עם איבר נוכחי החל מהשורש: • השיטה קוראת לעצמה (רקורסיה) עם הבן השמאלי • השיטה קוראת לעצמה (רקורסיה) עם הבן הימני • מבצעת פעולה על האיבר הנוכחי (פעולת הביקור) • שיטת סריקה זו שימושית כאשר יש לחשב נפח קבצים של תיקיות ותתי תיקיות.

  32. דוגמא – סריקת 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

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

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

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

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

  37. מקרה ב – מחיקת איבר עם שני בנים... שיעור הבא? אולי שנה הבא?

  38. נתון עץ בינארי כלשהו בעל n צמתים. בכל צומת יש: מפתח – מספר טבעי כלשהו שני מצביעים לבנים שדה נוסף המכיל מספר טבעי (מותר להשתמש בו לביצוע המשימה הנדרשת) הצע אלג' לחישוב ערכו של המסלול הכבד ביותר בעץ מהשורש לעלה. המסלול הכבד הינו המסלול שסכום המפתחות בצמתים שלו הוא מקסימלי. יש להדפיס את הערכים לאורך מסלול זה. סיבוכיות זמן נדרשת – O(n) תרגיל

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

  40. דוגמא: 100+20 20 0 100 50

More Related