1 / 47

מבני נתונים

מבני נתונים. שיעור 8 – ערמה (Heap) טבלאות ערבול (Hash Tables). ערמה Heap. ערמת מינימום הינה עץ בינארי המקיים את התנאים: מפתח הורה =< מפתח בנים (=> בערמת מקסימום) העץ חייב להיות מלא לשמאל, כלומר כל העלים הם מאותה רמה, או שמימין עומק העלים נמוך ב1. ערמה או לא?. ערמה לעומת עץ חיפוש בינארי.

zorion
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. מבני נתונים שיעור 8 – ערמה (Heap) טבלאות ערבול (Hash Tables)

  2. ערמה Heap • ערמת מינימום הינה עץ בינארי המקיים את התנאים: • מפתח הורה =< מפתח בנים (=> בערמת מקסימום) • העץ חייב להיות מלא לשמאל, כלומר כל העלים הם מאותה רמה, או שמימין עומק העלים נמוך ב1

  3. ערמה או לא?

  4. ערמה לעומת עץ חיפוש בינארי • בעץ חיפוש בינארי מפתח הבן השמאלי קטן מההורה והימני גדול ממנו • בערמה מפתח ההורה גדול (או קטן) שווה לבניו • עץ בינארי אין אילוץ להיות מלא לשמאל • גובה ערמה עם n איברים הוא : h = log(n + 1)

  5. פעולות על ערמה • ניתן להכניס ערך כלשהו לערמה insert • ניתן להוציא רק את הערך בשורש (הקטן ביותר בערמת מינימום או הגדול ביותר בערמת מקסימום)

  6. פעולת הכנסה insert • פעולת הכנסת איבר מורכבת משני שלבים: • הכנסת האיבר למקום הפנוי הבא (הראשון משמאל) • תיקון הסדר על מנת לשמור על החוקיות. פעולה הכוללת השוואת המפתח של האיבר הנכנס עם ההורה עד הגעה למיקום המתאים. פעולה זו נקראת Upheap 2 5 6 z 9 7 מיקום הכנסה

  7. הכנסת איבר - דוגמא הכנסת איבר עם מפתח 6

  8. הכנסת איבר - דוגמא הכנסת איבר עם מפתח 6 שלב 1: הכנסה למקום הפנוי הבא

  9. הכנסת איבר - דוגמא הכנסת איבר עם מפתח 6 שלב 2: תיקון Upheap

  10. הכנסת איבר - דוגמא הכנסת איבר עם מפתח 6 שלב 2: כל עוד ערך המפתח 6 קטן מההורה ממשיכים לעלות

  11. הכנסת איבר - דוגמא הכנסת איבר עם מפתח 6 סיום Unheapכאשר מגיעים לשורש או נתקלים בהורה עם מפתח קטן יותר (אך לא שווה)

  12. פעולת מחיקה delete • פעולת המחיקה מוגבלת לשורש בלבד. הפעולה מורכבת משלושה שלבים: • החלפת האיבר האחרון עם השורש • מחיקת האיבר האחרון • תיקון הסדר על מנת לשמור על החוקיות. הפעולה מתחילה מהשורש ומחליפה עם הבן בעל המפתח הקטן עד הגעה למיקום המתאים. פעולה זו נקראת Downheap

  13. מחיקת ערך - דוגמא החלפת השורש (3) עם האיבר האחרון (20) ומחיקת האחרון (לאחר ההחלפה)

  14. מחיקת ערך - דוגמא • התחל תיקון Downheap

  15. מחיקת ערך - דוגמא

  16. מחיקת ערך - דוגמא

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

  18. למה זה טוב? • מימוש תור עם עדיפויות. • הכנסת איבר ע"פ עדיפותו (מפתח) • הוצאת איבר הבא עם עדיפות מינימלית (השורש בערמת מינימום) • דוגמא: הכנס את האיברים בעלי העדיפויות 3,2,1,2 והוצא אותם באמצעות delete

  19. טבלאות ערבול / גיבוב • טבלאות ערבול הינן מבני נתונים המבוססים על מיפוי ערכי המפתחות ע"י פונקציה מתמטית • מבנה נתונים מהיר המאפשר גישה ישירה לנתונים, הכנסת איבר וחיפוש מיידי (O(1)) • טבלאות ערבול מבוססות על מערכים (חסרון של גודל ידוע מראש)

  20. מדוע? • נניח שרוצים לאחסן את סדרת האובייקטים בעלי המפתחות הבאים: 12,120,34,1145,64 • הבא נבחן את האופציות העומדות לרשותנו: • מערך • מערך ממויין • תור/מחסנית • רשימה מקושרת • עץ חיפוש בינארי

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

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

  23. תור / מחסנית • מבנים מוגבלים ביותר כאשר מעוניינים לבצע חיפוש של ערך • יש להוציא ערכים רק ע"פ הסדר המוגדר • מבנים אלו שימושיים במימושים ספציפיים כמו שהוזכרו

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

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

  26. מצב היפוטתי 1 • נניח והאובייקטים אותם אנו מעוניינים לאחסן הם בעלי המפתחות: 1,2,3,4,5,6,7 • נניח שאילו כל הנתונים שיש להכניס • נוכל להגדיר מערך באורך 7 ולהכניס את איבר עם מפתח 1 למיקום 1, וכך את כל שאר האיברים בהתאם למפתח שלהם • כך יהיה לנו מבנה נתונים מושלם כמעט המאפשר חיפוש מיידי: איבר עם מפתח i יימצא באינדקס i במערך

  27. מצב היפוטתי 2 • נניח והאובייקטים אותם אנו מעוניינים לאחסן הם בעלי המפתחות: 2,4,6,8,10,12,14 • נניח שאילו כל הנתונים שיש להכניס • נוכל להגדיר מערך באורך 7 ולהכניס את איבר עם מפתח 2 למיקום 1, וכך את כל שאר האיברים בהתאם: איבר עם מפתח i לאינדקס i/2 • ומה אם המפתחות היו: 2,4,8,16,32,64,128? • 12,120,34,1145,64? האם קיימת נוסחאת הפלא?

  28. דוגמא למצב היפוטטי אמיתי • בסיס נתונים בחברה עם 1000 עובדים • כל עובד שנקלט לחברה מקבל מספר עובד ייחודי ע"פ סדר קליטת העובד • המייסד מס 1 והעובד האחרון מספרו 1000 • במקרה זה ניתן להשתמש בערכי המפתחות ישירות כאינדקס למערך העובדים • האם היינו יכולים להשתמש בת"ז העובדים במקום מס העובד? באיזה מחיר של נפח אחסון?

  29. מגבלות בשימוש ישיר במפתח • המפתח חייב להיות ייחודי • על תחום המפתחות להיות צר אחרת המערך יהיה גדול בהרבה ממספר הרשומות • על המפתחות להיות דחוסים בתחום הצר, אם יש הרבה מרווחים בינהם זה מוריד את יעילות האחסון

  30. טבלת ערבול • טבלת ערבול מבצעת פעולה חשבונית על המפתחות כדי להגיע למצב הדומה למצב האופטימלי שראינו קודם • במקרים אילו (לרוב לא נוכל להשתמש בערכי המפתחות ישירות כאינדקסים) • המטרה: למפות את ערכי המפתחות לתחום צר של ערכים טבעיים (המתאימים לאינדקסים)

  31. פונקציות ערבול • ישנן דרכים רבות לבצע את המיפוי • פונקציות ערבול רבות מבוססות על פעולת השארית השלמה (MOD %) • אם נפעיל על ערכי המפתחות MOD Xנמפה אותם לתחום ערכים צר בגודל X • דוגמא:10 MOD 1,102,855,78,1521 • חסרון: כפילויות/התנגשויות

  32. טבלאות ערבול פונקציות ערבול • A hash functionh maps keys of a given type to integers in a fixed interval [0, N - 1] • Example:h(x) = x mod Nis a hash function for integer keys • The integer h(x) is called the hash value of key x • A hash table for a given key type consists of • Hash function h • Array (called table) of size N • When implementing a map with a hash table, the goal is to store item kat index i = h(k)

  33. 0  1 025-612-0001 2 981-101-0002 3  4 451-229-0004 … 9997  9998 200-751-9998 9999  Example • We design a hash table for a map storing entries as (SSN, Name), where SSN (social security number) is a nine-digit positive integer • Our hash table uses an array of size N = 10,000 and the hash functionh(x) = last four digits of x

  34. פונקציות ערבול Hash Functions • A hash function is usually specified as the composition of two functions: • Hash code:h1: keys  integers • Compression function:h2: integers  [0, N - 1] • The hash code is applied first, and the compression function is applied next on the result, i.e., h(x) = h2(h1(x)) • The goal of the hash function is to “disperse” the keys in an apparently random way

  35. Compression Functions examples • Division: • h2 (y) = ymodN • The size Nof the hash table is usually chosen to be a prime • The reason has to do with number theory and is beyond the scope of this course • Multiply, Add and Divide (MAD): • h2 (y) =(ay + b)modN • a and b are nonnegative integers such thatamodN 0 • Otherwise, every integer would map to the same value b

  36. Example Hash Function

  37. Example Hash Function 0 hf(22) = 22 22%7 = 1 1 tableEntry[1] hf(36) = 36 36%7 = 1 2 3 hf(4) = 4 4%7 = 4 4 tableEntry[4] 5 6

  38. 0  1 025-612-0001 2  3  4 451-229-0004 981-101-0004 טיפול בהתנגשויות • Collisions occur when different elements are mapped to the same cell • Separate Chaining: let each cell in the table point to a linked list of entries that map there • Separate chaining is simple, but requires additional memory outside the table

  39. Chaining with Separate Lists - Example Keys: 54, 77, 94, 89, 14, 45, 35, 76 Function: MOD 11

  40. סריקה לינארית Linear Probing • Open addressing: the colliding item is placed in a different cell of the table • Linear probing handles collisions by placing the colliding item in the next (circularly) available table cell • Each table cell inspected is referred to as a “probe” • Colliding items lump together, causing future collisions to cause a longer sequence of probes • Example: • h(x) = x mod13 • Insert keys 18, 41, 22, 44, 59, 32, 31, 73, in this order 0 1 2 3 4 5 6 7 8 9 10 11 12 41 18 44 59 32 22 31 73 0 1 2 3 4 5 6 7 8 9 10 11 12

  41. סריקה לינארית – דוגמא h(x)=x%11

  42. חיפוש בסריקה לינארית • Consider a hash table A that uses linear probing • get(k) • We start at cell h(k) • We probe consecutive locations until one of the following occurs • An item with key k is found, or • An empty cell is found, or • N cells have been unsuccessfully probed Algorithmget(k) i h(k) p0 repeat c A[i] if c= returnnull else if c.key () =k returnc.element() else i(i+1)mod N p p+1 untilp=N returnnull

  43. Updates with Linear Probing • To handle insertions and deletions, we introduce a special object, called AVAILABLE, which replaces deleted elements • remove(k) • We search for an entry with key k • If such an entry (k, o) is found, we replace it with the special item AVAILABLE and we return element o • Else, we return null • put(k, o) • We throw an exception if the table is full • We start at cell h(k) • We probe consecutive cells until one of the following occurs • A cell i is found that is either empty or stores AVAILABLE, or • N cells have been unsuccessfully probed • We store entry (k, o) in cell i

  44. ערבול כפול Double Hashing • Double hashing uses a secondary hash function d(k) and handles collisions by placing an item in the first available cell of the series (h(k) +jd(k)) mod Nfor j= 0, 1, … , N - 1 • The secondary hash function d(k) cannot have zero values • The table size N must be a prime to allow probing of all the cells • Common choice of compression function for the secondary hash function: • d(k) = q- k mod q • where • q<N • qis a prime • The possible values for • d(k) are 1, 2, … , q

  45. Example of Double Hashing • Consider a hash table storing integer keys that handles collision with double hashing • N= 13 • h(k) = k mod13 • d(k) =7 - k mod7 • Insert keys 18, 41, 22, 44, 59, 32, 31, 73, in this order 0 1 2 3 4 5 6 7 8 9 10 11 12 31 41 18 32 59 73 22 44 0 1 2 3 4 5 6 7 8 9 10 11 12

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

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

More Related