1 / 31

ייצוג קבוצות מתוחכם

ייצוג קבוצות מתוחכם. מתוחכם רק לקבוצות גדולות (תקורה בפעולות ובתכנות !!! ). תחום סדור (> < =). תחום איברים גדול (איברי הקבוצה לא יכולים להיות אינדקסים לתוך מערך) דוגמה : השמות בתוכנית פסקל. עץ חיפוש בינארי יתמוך ב :. נבצע ב- O(logn) בממוצע.

leigh-pratt
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. ייצוג קבוצות מתוחכם • מתוחכם רק לקבוצות גדולות (תקורה בפעולות ובתכנות!!!) תחום סדור (> < =) תחום איברים גדול (איברי הקבוצה לא יכוליםלהיות אינדקסים לתוך מערך) דוגמה: השמות בתוכנית פסקל עץ חיפוש בינארי יתמוך ב: נבצע ב- O(logn) בממוצע • ייצוג באמצעות עצים שונים עצי חיפוש בינאריים BINARY SEARCH TREES הבדל מ - DEL+MIN :Heap INSERT DELETE MEMBER MIN Data Structures, CS, TAU - 5.1

  2. abc abf דוגמה: abc acc aba abf abd aba - זהות בקבוצות - שונות בייצוג abd acc acb abe abe acb - הצמתים מסומנים בערכים הגדרה: - העץ בינארי לא בהכרח מאוזן לא בהכרח מלא - לכל צומת v שערכו x : תת העץ הימני > x תת העץ השמאלי < x ביצוע MEMBER רוץ על פני העץ (ימינה ושמאלה ע”פ הגדלים) עד שתמצא Data Structures, CS, TAU - 5.2

  3. יישום במצביעים Type nodetype = redord element: elementtype; leftchild, rightchild: nodetype; end; function MEMBER(x: elementtype; A:SET): boolean {return TRUE if x A} begin if A=nil then return(false) else if x=A .element then return(true) else if x<A .element then return(MEMBER(x, A .leftchild)) else {x>A .element} return(MEMBER(x, A .rightchild)) end; {MEMBER} Data Structures, CS, TAU - 5.3

  4. יישום INSERT (x,A) x x חפש כמו ב- MEMBER ועם המצביע שמצביע על NIL נצביע על צומת חדשה שמכילה אתx יישום DELETE(x, A) - אם x עלה: תלוש את העלה - אם ל x בן יחיד: תלה את הבן במקוםx - אם ל x שני בנים: קח את הקטן ביותר(שמאלי ביותר) בתת העץ הימני, השמיטו ושים במקום x Data Structures, CS, TAU - 5.4

  5. יישום FINDMIN רוץ שמאלה ככל האפשר יישום FINDMAX רוץ ימינה ככל האפשר יישום DELETEMIN שלב את FINDMIN ואת DELETE (ניתן גם לישם DELMIN ישירות ותוך כדי שימוש בו ליישם את DELETE –ראה AHU [158-159] ) (לך שמאלה ככל האפשר והשמט, תוך כדי תליית הבן הימני) Data Structures, CS, TAU - 5.5

  6. אנליזת זמן של עץ חיפוש בינארי O(n) לצומת 1) O(n) : Worst Case 2) כמה זמן לוקח בממוצע להכניסn איברים אקראיים? על איבר לוקח לכל היותר log n עץ מושלם: עץ קווי: ממוצע: צריך להניח הנחות - רק INSERT - כל הסדרים שווי הסתברות (סדרים בין n אלמנטים) Data Structures, CS, TAU - 5.6

  7. קח את האיבר הראשון (a) ההסתברות ש I איברים קטנים ממנו היא a i N-i-1 יהי P(i) אורך ממוצע של מסלול בעץ בגודל i (אורך מסלול כאן = מס’ צמתים במסלול) מרכז שמאל ימין (j=n-i-1) - רוצים לחשב אורך מסלול ממוצע: אזי, אם i איברים קטנים מ- a, האורך הממוצע הוא: Data Structures, CS, TAU - 5.7

  8. נוריד את ההתניה על i: הצב: נראה באינדוקציה: הוכחה: Data Structures, CS, TAU - 5.8

  9. Data Structures, CS, TAU - 5.9

  10. יישום קבוצות באמצעות עצים מאוזנים - קשיחות בבינאריות קשיחות בעומק - גמישות בבינאריות גמישות בעומק ממוצע O(log n) - עץ חיפוש בינארי: גרוע ביותר (O(n - היינו רוצים לשמור את העץ מאוזן תמיד Data Structures, CS, TAU - 5.10

  11. שימוש בעצי 2-3 (B-trees) דוגמה: 6 13 - - 17 9 5 11 2 5 6 9 11 13 17 חציצים (בין כל זוג איברים) הגדרה: 1) לכל צומת פנימי 2 או 3 ילדים 2) כל מסלול משורש לעלה - באותו אורך ייצוג קבוצה מסודרת: - האלמנטים נשמרים בעלים, מסודרים בסדר עולה מימין לשמאל. - הילדים ממוספרים (3 ,2 ,1) משמאל לימין. - בכל צומת פנימי שומרים את המפתח הנמוך ביותר בתת העץ האמצעי ו(אם צריך) הנמוך ביותר בתת העץ הימני Data Structures, CS, TAU - 5.11

  12. O(logN) Worst Case תכונות: INSERT, DELETE, FIND, MEMBER, FINDMIN. לך על פי הערכים (כמו עץ חיפוש בינארי) :MEMBER :INSERT v - צומת חדש p - צריך להיות אבא של v g - אבא של p (סבא של v) - הכנס v כבן נוסף של p - אם כעת ל p שלושה ילדים - גמרת. - אם ל p יש ארבעה ילדים: פצל p ל- p שמאל ו-‘p מימין ושתול את ‘p כבן של g Data Structures, CS, TAU - 5.12

  13. l1 l2 l1 l2 t1 t2 t3 t’1 t1 t2 t3 l1 - l’1 - l2 t1 t’1 t2 t3 שים לב: לצורך שתילה של v ב p צריך לדעת: פרט למקרה יחידי (שמאלי ביותרוהכי למטה), כל השתילות הן של צומתשלא השמאלי ביותר!!! 1)מצביע ל- v 2) ערך הנמוך ביותר בתת העץ של v כלומר, תמיד מוסיפים בן שהואאח ימני לבן הראשון Data Structures, CS, TAU - 5.13

  14. דוגמה ל-INSERT 7 15 - - 18 9 6 12 3 6 7 9 12 15 18 - 9 - 17 - 15 - 12 8 - 3 6 7 8 9 12 15 18 הכנסת 8 Data Structures, CS, TAU - 5.14

  15. ביצוע של INSERT(x) אפשרות א: 1)מצא מקומושל x 2) שתול את x באביו במעברמלמטה למעלה מצריך: 1)מעבר מעלה מטה - מעבר מטה מעלה 2) התייחסות להורים אפשרות ב: שתילה רקורסיבית של x בתת העץ של node x ערך לשתילה. פרמטרים: node תת העץ שבו תבוצע ההשתלה. ערכים מוחזרים: Pnew - מצביע לתת עץ חדש לימינו של node low - הערך הקטן ביותר בתת העץ של Pnew חשוב: לוודא שפרמטרים וערכים מוחזרים מדוייקים. Data Structures, CS, TAU - 5.15

  16. טיפול במקרי קצה צריך ליצור שורש חדש !!! - שימוש ברקורסיה כמו קודם. - בדיקות לגבי השורש 1)בדיקה האם העץ ריק או בעל איבר בודד וטיפול מתאים. 2) במקרה של עץ רגיל, רקורסיה עשוייה לחזור עם צומת חדש שמועמד להיות אחלשורש הקודם. Data Structures, CS, TAU - 5.16

  17. DELETE צריך רקורסיבית להשמיטו 1 2א 2ב p p u p u v v a c b a c d b v p u u p a a c b c b d Data Structures, CS, TAU - 5.17 v - צומת p - אב u - דוד - השמט v מp 1)אם ל v שני אחים: השמט וסיים. 2) אם ל v אח בודד: א) אם ל u שלושה בנים: p יאמץ אחד מבני הדוד ב) אם ל u שני בנים: u יאמץ את האח של v ועכשיו p ערירי

  18. יישום ב-AHU 4 3 3 4 5 פונקציה DELETE1 : לוקחת מצביע ל node ומשמיטה את x מתת העץ של node - היישום לא כולל עדכון ערכים נמוכים. - לשם עדכון: צריך להחזיר את הערך הנמוך ביותר בתת העץ! - עדכון כלפי מעלה חייב להמשך גם אם לאמשמיטים הצומת הספציפי. פונקציה DELETE: קוראת ל DELETE1 עם השורש ובודקת מקרי קצה: א) אם בעץ יש צומת אחד או אם ריק. ב) אם התוצאה היא צומת בודד. Data Structures, CS, TAU - 5.18

  19. B-TREES בין k ל 2(k+1)/ (t 2t-1) - רעיון דומה לעץ 2-3. - מעלה (דרגה) יותר גבוהה (k) לצמתים פנימיים. - עקרון גמישות רוחבית: - שימוש בדיסקים - הפקטור שמכתיב את k הינו גודל הדף. - ניתן ליישם ווריאציה שבה הערכים רק בעלים, או ווריאציה שבה יש ערכים בצמתים פנימיים. - כנ”ל לגבי עצי חיפוש בינאריים. Data Structures, CS, TAU - 5.19

  20. יישום CLR d k a, f, h, i l, m, n b SPLIT פעולה בסיסית ב Insert 2k-1 אם מס’ המפתחות = פצל לשני צמתים, כ”א עם k-1 והעבר ערך אחד לאבא (החציון). דוגמה :Insert(j) d h k j a, f l, m, i, n b - מטפל בדרגה כללית. - מטפל בוורסיה שבה המפתחות שוכנים בכל העץ (לא רק בעלים) - מס’ המפתחות נעים בין k-1 ל 2k-1 דוגמה: Data Structures, CS, TAU - 5.20

  21. קבוצות עם MERGE ו-FIND a a a b b a a b, b c a c נתון: רצף של פעולות שקילות 1 2, 3 4, 5 6, 2 3 - קבוצות של קבוצות. - מאחדים קבוצות זרות ורוצים לדעת היכן כל עצם. - פעולות MERGE ו FIND - דוגמה: יחס האקוויולנטיות/שקילות (EQUIVALENCE)מקיים: רפלקסיבי: סימטרי: טרנזיטיבי: רוצים: לייצר קבוצות שקילות. משתמשים ב- : MERGE לאיחוד הקבוצות FIND : לחפש למי שקול Data Structures, CS, TAU - 5.21

  22. פעולות A B A B A C C C 1 2 3 4 5 6 7 8 O(N) : MERGE (צריך לעבור על כל אברי המערך) MERGE(A, B) - בצע אחוד והכנס תוצאהלA או B FIND(x) - מצא באיזו קבוצה נמצא x INITIAL(A, x) - הכנס x ל A יישום פשוט: - מערך שבו כל איבר מכיל את שם הקבוצה לה האיבר שייך A={1, 3, 5}, B={2, 4}, C={6, 7, 8} יעילות: O(1) : FIND, INIT מדד יעילות: N פעולותMERGE ו- FIND Data Structures, CS, TAU - 5.22

  23. יישום מהיר יותר - עדיין n מיזוגים יכולים לעלות: 2 O(n ) - לקשר את האיברים של A לחוד ושל B לחוד (רשימה מקושרת) - לא צריך לרוץ על כל אברי התחום אלא רק על אברי הקבוצה. כי: רצף של n-1 מיזוגים שבו ממזגים אתהקבוצה שנוצרה לאיבר בודד: פתרון: - לשמור את גודל הקבוצות - למזג קבוצות קטנות לגדולות Data Structures, CS, TAU - 5.23

  24. סיבוכיות 2)כשאיבר עובר קבוצהגודל קבוצת האם לפחות מוכפל. גודל קבוצה שנייה 2 גודל קבוצה שלישית 4 גודל קבוצה רביעית 8 i-1 2 גודל קבוצה i אבל גודל הקבוצה האחרונה N גודל קבוצה אחרונה N #steps 2 כל איבר עובר לכל היותר פעמים סבוכיות כוללת סיבוכיות: 1)מתחשבנים עם כל איבר בנפרד(לא עם הקבוצה) 3)גודל קבוצה ראשונית - 1 Data Structures, CS, TAU - 5.24

  25. מבנה נתונים type nametype = 1,…,n elementype = 1, 300, n MFSET = record setheaders: array[1…n] of record count: 0,…,n; firstelement: 0,…,n; end; names: array[1…n] of record setname: nametype nextelement: 0,…,n לכל קבוצה גודלה והאיבר הראשון לכל איבר שם הקבוצה והבא. 1)צריך לכל קבוצה: א) גודלה ב) האיבר הראשון בה 2) צריך לכל איבר: א) קבוצת השייכות ב) האיבר הבא בקבוצה ישום: (הנחה: כל האיברים הם השלמים) Data Structures, CS, TAU - 5.25

  26. ביצוע MERGE - בודקים מי הקבוצה הקטנה (נניח A) - רצים לאורך הקבוצה ומשנים שמה ל- B - באיבר האחרון עושים את השרשור A ל- B - ב Headers מעדכנים את האיבר הראשוןואת גודל הקבוצה. סבוכיות: - כל איבר שעובר לבעלים חדשים, גודל הבעלים גדל פי שניים (לפחות) - לכן כל איבר עובר לכל היותר log n פעמים. סבוכיות :O(n log n) Data Structures, CS, TAU - 5.26

  27. יישום באמצעות עץ B C A 8 17 1 3 7 6 5 - נסיון למנוע ריצה על כל אברי A כשמעבירים ל B- - בעץ מייצגים איברים. - כל צומת מצביע לאביו. - בשורש יושב שם הקבוצה. ביצוע הפעולות: MERGE(A, B) - תלה את השורש של A על זה של B FIND(x) - רוץ כלפי מעלה. Data Structures, CS, TAU - 5.27

  28. סיבוכיות O(n) = FIND (יתכן) 2 N שידוכים וחיפושים O(n) (אם תולים גדול על קטן נוצרת רשימה) תלה עץ קטן על גדול - צומת משתתף בתליה עומק כל צומת סבוכיות: O(1) = MERGE שיפור: - בכל תליה עומק גדל ב- 1. - בכל תליה מס’ הצמתים בעץ לפחות מוכפל. Data Structures, CS, TAU - 5.28

  29. קיפול מחסומים A A FIND (7) 3 3 1 1 2 2 7 7 8 8 • כשמבצעים FIND לקפל את המסלול אלהשורש (כל צמתי המסלול יהפכו לבני השורש( • ביצוע קל: בשני מעברים (ראשון לזיהוי השורש,שני לקיפול ותליה) ניתוח סיבוכיות: פעולה בודדת - עדיין יתכן (O(n. ממוצע - מסובך לניתוח. אם לא תולים קטן על גדול, יקח O(NlogN) לבצועFINDS N) קשה לאנליזה ( Data Structures, CS, TAU - 5.29

  30. אם כן תולים קטן על גדול, סבוכיות ל N פעולות: O(N) = (N) : (N) הגדרה A(x, 0) = x+2 for x 2 A(x, y) = A(A(x-1, y), y-1), x,y 1 x A(x, 2) = A(A(x-1), 2), 1)=2A(x-1, 2) = 2 2 x פעמים 2 2 A(x-1, 3) A(x, 4) = אין צורה מתמטית A(x, 3) = A(A(x-1), 3), 2)=2 =2 קרובה לקבוע אינה קבוע אבל גודלת לאט מאוד עם N A(X, Y) פונקצית אקרמן: A(0, y) = 1 A(1, 0) = 2 A(x, 0) = x+2 A(x, 1) = A(A(x-1), 1), 0)=A(x-1, 1)+2=2x Data Structures, CS, TAU - 5.30

  31. 65536 פעם . : (N) . הפונקציה 2 . 2 A(4) = 2 ה x הקטן ביותר כך ש n A(x) וריאציה של אקרמן: A(x) = A(x, x) הפונקציה :A(x) A(1) = 2 A(2) = 4 A(3) = 16 הופכית של :A(x) פונקציה מונוטונית עולה (לא יורדת) פרקטית חסומה ע”י 4 Data Structures, CS, TAU - 5.31

More Related