1 / 34

מילון

מילון. מבנה נתונים להחזקת קבוצות שבו רוצים INSERT, DELETE, MEMBER. דוגמה :. קלט מורכב מ -. 1. (‘F’, שם ). 2. (‘U’, שם ). 3. (?, שם ). 1. סמן ח”כ מתפקד כ”טוב ”. 2. סמן ח”כ מתפקד כ“רע ”. 3. האם “רע” או “טוב ”?. רוצים לשמור האינפורמציה ולענות על שאילתות מסוג 3.

buffy
Télécharger la présentation

מילון

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. מילון מבנה נתונים להחזקת קבוצות שבו רוצים INSERT, DELETE, MEMBER דוגמה: קלט מורכב מ - 1. (‘F’, שם) 2. (‘U’, שם) 3. (?, שם) 1. סמן ח”כ \ מתפקד כ”טוב” 2. סמן ח”כ \ מתפקד כ“רע” 3. האם “רע” או “טוב”? רוצים לשמור האינפורמציה ולענות על שאילתות מסוג 3 Data Structures, CS, TAU - 4.6

  2. יישום המילון 1) רשימה מקושרת 2) Bit Vector – מאוד יעיל אם התחום מוגבל וקטן 3) מערך - טוב רק אם אין הרבה דינמיות (שינוי מבנה) אם ממויין: אם לא ממויין: INS = O(N) INS = O(1) DEL = O(N) DEL = O(N) MEM = O(logN) MEM = O(N) Data Structures, CS, TAU - 4.7

  3. HASH TABLE ליישום המילון יישום מערך ( - O(N ווקטור ביטים - O(1) אבל מוגבל בגודל. - גישה לכל סל ב O(1) -חפוש בסל לינארי. 0 1 B-1 HASH - בממוצע זמן קבוע ואין מגבלת גודל כמו בווקטור הביטים. HASH פתוח (Chaining) : - נחזיק B סלים שבהם נאחסן את האיברים (Buckets) - Overflow ברשימות פונקצית :Hash עבור כל ערך h(x) , x הוא ערך הפונקציה ונופל בתחום.0, 1, …B-1 1) חישוב h(x)o הכנסת איבר: 2) הכנסתו ברשימה המתאימה Data Structures, CS, TAU - 4.8

  4. HASH סגור (Open Addressing) 0 1 Bucket Table B-1 0 1 2 3 4 5 6 f c a b d e משתמשים רק בטבלה (בלי רשימותOverflow ) אם h(x) גורמת התנגשות: מחשבים (rehash) h2(x) ואח”כ h3(x) דוגמה פשוטה : Linear Hashing Hi(x) = (h(x)+i) mod B a b c d e f 3 4 2 3 6 0 Data Structures, CS, TAU - 4.9

  5. בדיקת חברות (MEMBER) ב-HASH סגור - אם השמטות אסורות בישום, אזי ריק x איננו. - אבל: אם השמטות מותרות: ריק איננו! 0 1 2 3 a b c נצטרך לסמן “deleted” במקוםשהושמט - בדוק h1(x), h2(x)…o והשווה את האיבר הנמצא עם x - בדיקה עד שנמצא “ריק” (צריך ערך ל”ריק”) דוגמה: Ins (a, 1), Ins (b, 1), Ins (c, 1) Del (b) Member (c) א) בחיפוש של איבר - לפסוח עליו ב) בהכנסה - ניתן להשתמש בו Data Structures, CS, TAU - 4.10

  6. ביצועים של Hash פתוח (Chaining) N/B = load factor - לכן כל N/2 האיברים האחרונים דורשים כל-אחד פעולות (הכנסת איבר לרשימה ממויינת) וסה”כ כל N האיברים דורשים: אם חפוש בשכיחות דומה: - אזי אםN B סה”כ נתון: B סלים N איברים - נניח: הכנסה של כל איבר פעם אחת Insert: Amortized Complexity. Member: regular - בממוצע יש בכל סל N/B איברים Data Structures, CS, TAU - 4.11

  7. ביצועים של Hash פתוח (Chaining) - המשך 0, 1, …B-1 לכל התאים כלומר: עבור מפתח אקראי ההסתברותליפול בכל תא הינה :SIMPLE UNIFORM HASHING (1 הנחות: לכל מפתח יש אותה הסתברות ליפול בכל תא אחרי שהופעלה עליו פונקצית ה HASH- ללא תלות במפתחות אחרים. 2)פונקצית HASH מחושבת ב O(1) זמן. • בפונקציות HASH ההגדרה “לכל מפתח ישאותה הסתברות ליפול בכל תא" אינה במובן של מפתח (ערך) ספציפי, כי:עבור פונקציה נתונה מפתח נתון ייפול בדיוק בתא אחד! • הגדרה שכן תופסת: Data Structures, CS, TAU - 4.12

  8. דוגמאות לפונקציות HASH אז h(k) = k B מקיימת את הנחה (1) h(k) = B (kA mod 1) החלק השבור של kA 1) אם : 0<A<1 B ראשוני, Knuth ממליץ: 2) אם k מספרים שלמים: h(k) = k mod B (עדיף לקחתB ראשוני) 3) אם k שלמים: Data Structures, CS, TAU - 4.13

  9. UNIVERSAL HASHING ממוצע זמן חיפוש - משתמש “זדוני” יכול לבחור n מפתחות,כולם לתוך אותו סל. - נכון עבור כל פונקצית Hash קבועה. - דרך מניעה יחידה: בחירת פונקציה באקראי לא תלויה במפתחות. - בגלל אקראיות האלגוריתם יתנהג שונה בכל ריצה (על אותו input ) input - מסויים אינו יכול “לסבול” באופן תמידי. - עבור כל input ההסתברות לבצועים גרועים קטנה (וזהה לקלטים אחרים דומים) Data Structures, CS, TAU - 4.14

  10. UNIVERSAL HASHING - המשך H - אוסף סופי של פונקציות Hash שממפות תחום U ל B סלים {0, 1,…B-1} לכל x, y U מספר הפונקציות h Hכל ש h(x )=h(y) הינו B / |H| אם h נבחרת מאוסף אוניברסלי של פונקציותhash ומשומשת להכניס N מפתחות לתוך טבלה בגודל N B ,B, אזי תוחלת מס’ ההתנגשויותהקשורות במפתח x הינה קטנה מ 1. H נקרא אוניברסלי אם: כלומר: אם פונקציה נבחרת אקראית מ- H אזי סיכוי ההתנגשות של x ו y הינו 1/B משפט Data Structures, CS, TAU - 4.15

  11. הוכחת המשפט יהי: אם z, y מתנגשים 1 =Cyz אחרת 0 לכן: E[Cyz] = 1 B )כי z, y מתנגשים בהסתברות 1 ) B אזי: הוכחה: יהי Cxמס’ ההתנגשויות הכולל של X תוחלת סכום = סכום תוחלות Data Structures, CS, TAU - 4.16

  12. בחירת קבוצה אוניברסלית x=(x0, x1,…xr) - יהי a={a0, …ar } רצף של אברים נלקחים באקראי מהקבוצה {0, 1,…B-1} ונגדיר ha H : - בחר B ראשוני. - פרק x ל r+1 בתים - דרישה: ערך כל byte קטן מ B- Data Structures, CS, TAU - 4.17

  13. משפט - ניקח שני מפתחות שונים כלשהם x y - בלי הגבלת הכלליות נניח x0 y0 a1, a2,…ar - נסתכל על בחירה שרירותית של אבל B הוא ראשוני ולכן יש יחידי הפותר את המשוואה a0w=z וזה נכון כי אם a0’w=z, a0w=z אז (a0-a0’)w=B בניגוד לראשוניות של B 0 a0 B האוסף H הוא אוסף אוניברסלי של פונקציות Hash הוכחה: טענה: עבור הבחירה הנ”ל ישנו בדיוק a0בודד המקיים h(x)=h(y) הוכחה: כדי שיתקיים h(x)=h(y) חייב להתקיים: Data Structures, CS, TAU - 4.18

  14. המשך ההוכחה - לכן יש בדיוק ערכים של{a0, …ar} שעבורם x ו y מתנגשים לכל (x,y) - היות ומס’ הערכים של a={a0, …an} הוא בדיוקx ו-y מתנגשים בדיוקבהסתברות: H אוניברסלית Data Structures, CS, TAU - 4.19

  15. הערכת ביצועים Hash סגור (OPEN ADDRESSING) Hash לינארי: אם התנגשנו סיכוי התנגשות שניה גבוה (כבר נפלנו באזור “מועד”) נניח: פונקצית rehash שולחת בצורה אקראית. “אמונה”: זה הטוב ביותר B - סלים N - איברים (כרגע בטבלה) Data Structures, CS, TAU - 4.20

  16. הערכת ביצועים : תוחלת עלות הכנסת איבר כשיש N הסתברות לפחות להתנגשות אחת: הסתברות לפחות לשתי התנגשויות: הסתברות לפחות ל i התנגשויות: עבור N, B גדולים: ממוצע: הצלחה אבל: Data Structures, CS, TAU - 4.21

  17. הערכת ביצועים - המשך אם נדייק ונחליף ב: חשבון מסובך ייתן (amortized) :1, 2,…M כמה עולה להכניס האיברים בממוצע: Data Structures, CS, TAU - 4.22

  18. הערכת ביצועים - המשך למלא את הטבלה יקח: logB בממוצע לאיבר 10/9 ln10 אבל למלא 90% (M=0.9B) : כלומר: קיים: לא קיים: - מילוי הטבלה – פונקציה B - כל שבר שונה מ- 1 – לא תלויים ב- B בדיקת חברות - לאיבר שלא קיים - כמו הכנסה - לאיבר שקיים - כמו הממוצע עד כה Data Structures, CS, TAU - 4.23

  19. הערכת ביצועים - המשך למלא 90% מ 1000 למלא 90% מ- 109 שווה!! אבל למלא הכל lnB הערה: אם M אחוז ( ) של B – אזי יעילות הכנסה היא: לא תלוי ב-B!!! כלומר: סיבה: השבריר האחרון של המילוי שבו אורך השרשרות פרופורציונלי למספרהסלים – קובע. Data Structures, CS, TAU - 4.24

  20. פתרון התנגשויות Rehash hi(x) = h(x) + i (mod B) 1) לינארי: hi(x) = h(x) + C i (mod B) 2) אם B מתחלק ב C (או גורם משותף) בעייתי כי גורם התקבצות. אזור התקבצות נוטה לגדול!! גרוע מאוד מכיוון שיחזור על עצמו !!! דוגמא: C=20 B=50 Ci = 20, 40, 10, 30, 50, 20... לכן: צריך ש B ו C בלי גורם משותף. אבל - תופעת ההתקבצות לא נפתרת. סיבה: התקבצות נובעת מכך ש hiמחושבת כפונקציה של המקום בטבלה ולא של מס’ ההתנגשויות (i) – כל מי שנופל על אותו תא מקבל את אותה !! hi Data Structures, CS, TAU - 4.25

  21. פתרון התנגשויות Rehash - המשך 1, 2, … B-1 כש diהינו פרמוטציה של לדוגמא(הפרשים זהים): d1=1, d2=2, d3=3, d4=4 hi(x) = h(x) + di (mod B) 3) יותר טוב: d0 =0 d1=4, d2=2, d3=1, d4=3 דוגמא : B=5 - מונע שכל מי שנופל על h(x) יפול באותה השרשרת. ( כמובן לא מונע שבעלי h(x) זהה יפלו עלשרשרת זהה! ) הערה: סתם פרמוטציה אינה טובה. Data Structures, CS, TAU - 4.26

  22. רה-ארגון - טבלה מלאה בעיה רה-ארגון אם N 2B כדאי להכפיל הגודל ולהעתיק. אם N > 0.9B במקרה של DELETIONS כשכמות המקומות הפנויים קטן [0.1B] כשמבנה הנתונים מתמלא (חוקי אצבע): טבלה פתוחה: לא סתם העתקה – בצוע insert טבלה סגורה: Data Structures, CS, TAU - 4.27

  23. סכום HASH - יעיל לבצוע פעולות Insert, Delete, Member כולם בסיבוכיות ממוצעת O(1) , גרוע ביותר O(N) • אינו יעיל עבור אינפרמצית סדר (MIN, עוקב, וכו') • שפור HASH פתוח: • החלף שרשרות בעצי 2-3 • סבוכיות: O(1) ממוצע, O(log N)worst case Data Structures, CS, TAU - 4.27

  24. Perfect Hashing רוצים: לבנות טבלת T Lookupבגודל (O(n שבאמצעותה אפשר לבדוק חברות, בזמן קבוע (1)O . בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hashרגיל - דינאמי) * רוצים זמן קבועWorst case * מוכנים להשקיע בבניית הטבלה (זמן בנייה (O(n בתוחלת) *מקום: (O(n שיטה: טבלה דו-שלבית

  25. T 1 2 S מפתחות i Bi f (hash) ²|Bi|  n gi (Hash) עקרונות: 1)f ממפה את כל n המפתחות לטבלת ביניים בגודל n .  בטבלת הביניים קיימים תאים עם יותר ממפתח אחד. 2)gi- פונקציה אישית של תא i : ממפה מ- Bi לתחום בגודל ²|Bi| בצורה חד-חד ערכית.

  26. בעיות שיש להתמודד איתן  * לא נצטרך לחפש הרבה 1) אם Biגדול מידי Tלא תהיה (O(n  צריך לחפשfכזה כך שלא יהיו Bi גדולים. 2) צריך למצוא (לחפש) פונקציות gi שימפו את Bi ל ²|Bi| בלי התנגשויות בסיס לפתרון: הסתברות !! * הסתברות למציאת פתרונות ל-1) ו-2) היא גבוהה. בתוחלת זמן לינארי

  27. בחירת פונקציה f בחירת פונקציה f : 1 f 1…n * ממפה n אלמנטיםל - i Bi n * תכונה נדרשת [1…n] 1) בוחרים  בצורה אקראית מקבוצה אוניברסלית של פונקציות Hash f: U 2)הוכחה: פרק על HASH אוניברסלי 2)משפט: אם f אוניברסלית וממפה N מפתחות ל B סלים אז תוחלת מס’ התנגשויות של מפתח בודד הינו (N-1)/B * ממפה לדליים B1 …Bn bi = | Bi | * * דרך להשגה : בחרו f עד שתצליחו! (מפונקציה אוניברסלית) אנליזה:

  28. 3) לכן: במיפוי n מפתחות ל תוחלת מס’ ההתנגשויות של איבר בודד: n-1/n 1…n אבל: #collisions = וכן  ניקח תוחלת  תוחלת מס’ ההתנגשויות של כל האיברים: n(n-1/n)= n-1

  29. אם xמשתנה אקראי לא שלילי 5) ולכן 4) אי שוויון מרקוב: 6) נבחר f באקראי. סיכוי להצלחה בכל ניסוי > 1/2  תוחלת מספר הניסיונות = 2

  30. מסקנה: במספר ניסיונות שתוחלתם 2 נקבל f כך ש:  גודל הטבלה לינארית + זמן הריצה של חיפוש f קבוע בתוחלת

  31. בחירת פונקציה gi: * נתונים מפתחות * נמפה אותם לתחום נבחר * תוחלת מס’ התנגשויות של מפתח בודד * תוחלת מס’ התנגשויות של כל המפתחות *אי שוויון מרקוב: *אי שוויון Boole: * נבחר gi מאוסף אוניברסלי:

  32.  תוחלת מס’ הניסיונות עד שנמצא gi כך שאין התנגשויות היא 2

  33. עלות בניית פונקציה gi: * בונים וקטור ביטים בגודל * יש לאתחלו  פעולות. * היות (בחרנו קודם את f כדי שתקיים את זה!) O(n)  עלות כוללת של בחירת כל gi כבבחירה ראשונה הינה worst case O(n)  עלות כל בחירת giבתוחלת * עבור כל gi שמנסים צריך לבדוק אם בקבוצה Bi יש התנגשויות.  היות ומס’ בחירות בתוחלת הינו 2 (עבור gi )

  34. סיכום O(n) 1) עלות העבודה בכל שלבי ההכנה בתוחלת. 2) עלות ביצוע find: : Worst Case O(1)

More Related