1 / 50

ערבול (Hashing)

ערבול (Hashing). Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS. חומר קריאה לשיעור זה:. Chapter 12- Hash tables (pages 219—243).  Geiger & Itai, 2001. ערבול (Hashing). Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS. 0.

love
Download Presentation

ערבול (Hashing)

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. ערבול (Hashing) Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS חומר קריאה לשיעור זה: Chapter 12- Hash tables (pages 219—243) Geiger & Itai, 2001

  2. ערבול (Hashing) Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS 0 1 2 Data 2 k Data k m-1 ראינו שלושה מימושים שונים למילון: AVL, עצי 2-3 ורשימת דילוגים הפעולות הבסיסיות (חיפוש, הכנסה, והוצאה) מתבצעות כל אחת ב-O(log n) האם אפשר לממש פעולות אלו בסיבוכיות זמן יותר טובה? לא למפתח כלשהו נניח שהמפתחות הם { 0,1,2,3,4,5,6,7,8,9 } תשובה: כן! באמצעות מערך אפשר לממש כל פעולה ב-O(1) איך?........ Geiger & Itai, 2001

  3. ערבול (Hashing) Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS נניח שהמספרים הם { 0,1,2,3,4,5,6,7,8,9 } 0 Insert(3) Insert(7) 3 Insert(0) Insert(9) Delete(7) Delete(0) 7 Search(3) Search(0) 9 Geiger & Itai, 2001

  4. ערבול (Hashing) Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS נניח שהמספרים הם { 0,1,2,3,4,5,6,7,8,9 } גישה ישירה direct addressing סבוכיות מקום סבוכיות זמן O(M) O(1) 3 למספרים 0,1,2,3,..., M אבחנה: אם נשתמש במערך, זמן של כל פעולה יהיה אמנם O(1), אך דרישות המקום הן O(M) , כאשר M הוא גודל הטווח. ייתכן n = o(M). 9 cs,Technion

  5. ערבול (Hashing) מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים? תשובה: לְעִתִּיםגודל התחום של ערכי המפתחות גדול בהרבה ממספר המפתחות בהם משתמשים. דוגמא 1: מספרי תעודת זהות מורכבים מתשע ספרות עשרוניות כלומר קיימים 109 מפתחות אך בישראל יש פחות מ 107 אנשים. לפיכך שימוש במערך ינצל פחות מ 1% בודד של הזיכרון המוקצה למערך. דוגמא 2: מספר המחרוזות של אותיות עבריות באורך 30 (באמצעותן ניתן לתאר שם פרטי, שם אמצעי, ושם משפחה של תושבי ישראל) הוא 2230 בעוד מספר האנשים קטן מ 107. cs,Technion

  6. ערבול (Hashing) מימוש מילון באמצעות מערך נקרא גישה ישירה (Direct Addressing ): המפתח עצמו משמש כאינדקס במערך. כאשר מרחב המפתחות גדול נחשבאינדקס h(k)מתוך המפתח kבאמצעות פונקציתערבול. h: key  index המטרה לממש את פעולות החיפוש,הכנסה, והוצאה בזמן ממוצע של O(1) . מפתח k יכנס לתא h(k) במערך לכן זמן חישוב h(k) חייב להיות O(1) נגדיר פונקצית ערבול (hash):h: U  {0,…,m-1} אשר בהינתן מפתח בתחום U מחשבת אינדקס בטווח המתאים. cs,Technion

  7. דוגמא נניח שהמספרים הם {0 - 1000} 60 h: {0 – 1000} {0,1,2,…,9} h(x) = x mod 10 Insert(43) h(43) = 3 43 Insert(57) h(57) = 7 Insert(60) h(60) = 0 Insert(39) h(39) = 9 57 39

  8. פעולות מילון נניח שהמספרים הם {0 - 1000} 60 h: {0 – 1000} {0,1,2,…,9} h(x) = x mod 10 Delete(57) h(57) = 7 43 Delete(50) h(50) = 0 Search(43) h(43) = 3 Search(66) h(66) = 6 57 h פונקצית ערבול hash function 39

  9. פעולות מילון נניח שהמספרים הם {0 - 1000} 60 h: {0 – 1000} {0,1,2,…,9} h(x) = x mod 10 Insert(73) h(73) = 3 43 התנגשות 57 39

  10. 0 1 51 2 92 3 4 5 15 6 7 17 8 88 9 29 דוגמא:m = 10 h(k) = k mod 10 51, 17, 15, 92, 88, 29 בשיטת הערבול נוצרות התנגשויות כאשר x  y אבל h(x) = h(y). h(81) = 1 = h(51) cs,Technion

  11. פתרון להתנגשויות באמצעות "שרשראות" (chaining) T x3 x4 x1 X1 X4 X5 X3 x5 x2 X2 הפעולות: Insert(T,x) הכנס את x בראש הרשימה T[ h(x.key)]. זמן במקרה הגרוע ביותר O(1). Search(T,k) חפש איבר עם מפתח k ברשימה T[ h(k)] זמן במקרה הגרוע ביותר (אורך הרשימה). Delete(T,x) סלק את x מהרשימה T[ h(x.key)]. זמן במקרה הגרוע ביותר (אורך הרשימה) . cs,Technion

  12. Insert(73) h(73) = 3 Insert(67) h(67) = 7 60 Insert(87) h(87) = 7 43 73 57 67 87 39

  13. 60 Insert(77) 43 73 במקום הסידורי בראש הרשימה בסוף הרשימה 57 67 87 Chaining שיטת השרשראות 39

  14. דוגמא להכנסה בראש הרשימה 0 1 2 3 4 5 6 7 8 9 12 62 12 53 37 57 17 57 37 57 19 נניח: m = 10 h(k) = k mod m קלט: 53, 62, 17, 19, 37, 12, 57 cs,Technion

  15. נכניס.... 60 Insert(37)Insert(47) Insert(77)Insert(97) Insert(107) 43 73 במקרה הגרוע ביותר כל האיברים נכנסו לאותה הרשימה ואז זמן חיפוש/הוצאה הוא (n). 57 67 87 הנחה: המפתחות מפוזרים באופן אחיד או h מפזרת את המפתחות באופן אחיד 39

  16. הנחה הפיזור האחיד הפשוט h מפזרת את המפתחות באופן אחיד אבריםn אורך ממוצע של רשימה m פקטור העומס

  17. הנחה הפיזור האחיד הפשוט h מפזרת את המפתחות באופן אחיד אורך ממוצע של רשימה זמן ממוצעחיפוש כּוֹשֵׁל m אם נבחר

  18. ניתוח זמנים (המשך) 2 9 4 6 3 5 8 0 1 7 12 62 53 ארבעה מצביעים 37 57 17 19 משפט (חיפוש כושל): בשיטת השרשראות ותחת הנחת הפיזור האחיד הפשוט הזמן הממוצע לחיפוש כושל הוא 1+=1+n/m. • הוכחה: בהנחת הפיזור האחיד הפשוט כל מפתח מגיע באקראי לאחת מ-m הרשימות. • הזמן לחיפוש כושל הוא לפיכך הזמן הממוצע לחפש באחת הרשימות עד סופה. • אורכה הממוצע של רשימה בהנחת הפיזור האחיד הוא  = n / m . • לפיכך בממוצע יידרש זמן 1+ (הכולל את זמן בדיקת המצביע בסוף הרשימה). cs,Technion

  19. ניתוח זמנים (המשך) 9 2 6 4 8 5 0 3 1 7 12 62 53 אחרי ki לפני ki 37 57 17 19 המפתח ki משפט (חיפוש מוצלח): בשיטת השרשראות ותחת הנחת הפיזור האחיד הפשוט הזמן הממוצע לחיפוש מוצלח הוא 1+/2=1+n/(2m). (הכנסה בראש הרשימש) • הוכחה: נאמר שבזמן החיפוש ישנם n מפתחות שהוכנסו בסדר k1,…,kn. • מהו זמן חיפוש הממוצע של המפתח ki ? • אחרי מפתח זה נוספו n-i מפתחות נוספים. • לכן בממוצע גודל הרשימה משמאל למפתח ki הוא (n-i)/m. • מכאן שזמן החיפוש הממוצע של המפתח ki הוא • (n-i)/m1+ • זמן החיפוש הממוצע t למפתח כלשהו יהיה לפיכך: הממוצע לחיפוש מפתיח רנדומלי!!! בְּלוֹף

  20. ניתוח זמנים (המשך) לפיכך, כאשר סדר הגודל של מספר המפתחות n בהם משתמשים הוא כגודל המערך m, כלומר עבור n = O(m), נקבל שגורם העומס קבוע כלומר  = O(1) ולכן כל הפעולות דורשות זמן ממוצע O(1). דוגמא עבור 2100n= מפתחות מטווח כלשהו U של מספרים שלמים, נאמר עד 106, נוכל להחזיק מערך ובו 700m= מקומות ובממוצע אורך כל שרשרת יהיה 3n/m= וזמני החיפוש יהיו O(1). cs,Technion

  21. ערבול (Hashing) cs,Technion

  22. שיטת Open addressing לא נשתמש בשרשראות, אלא כל האיברים יוכנסו לטבלה. התנגשות ערבול נִשְׁנָהRehashing - נניח שברשותנו סדרה אינסופית של פונקציות ערבול: h0,h1,h2,… ננסה לשמור את x במקום h0(x). אם תפוס, ננסה במקום h1(x). נמשיך עד שנצליח. נבחן שלושה שיטות: סריקה ליניארית, ערבול נשנה, וערבול כפול. ברור שבשיטות open addressing פקטור העומס 1 ≥(n  m) .

  23. שיטת Open addressing סריקה ליניארית Linear probing סריקה ליניארית linear probing -- אם המקום המיועד h(k) תפוס, שים במקום הבא מודולו m.

  24. דוגמא 17 17 0 17 דוגמא: m = 10 h(k) = k mod m 1 12 12 12 2 12 12 12 קלט: 62 53, 62, 17, 19, 37, 12, 57 62 3 53 4 5 6 57 57 57 7 57 57 57 37 37 37 8 37 37 19 19 19 9 19

  25. הוצאה בשיטת linear probing 17 12 62 0 17 53 1 2 12 3 62 57 4 53 37 5 19 6 7 57 8 9 19 כיצד נוציא איברים ? • לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתק. דוגמא: m = 10 h(k) = k mod m קלט: 53, 62, 17, 19, 37, 12 ,57 הוצא37 חפש17?

  26. פתרון 1: בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא, והכנס את כולם חזרה פרט לאיבר שרוצים להוציא. הוצאה בשיטת linear probing 17 12 62 17 0 53 1 12 12 2 62 62 3 57 53 הוצא37 53 4 37 5 19 6 57 57 7 17 37 8 19 19 9 חפש17! cs,Technion

  27. הוצאה בשיטת הַמַּצִּיבָה 17 דוגמא: m = 10 h(k) = k mod m 12 קלט: 53, 62, 17, 19, 37, 12, 57 62 0 17 17 53 1 2 12 12 3 62 62 57 4 53 53 37 5 19 6 7 57 57 8 delete 27 9 19 19 • כדי לא לנתק את שרשרת החיפוש נסמן את מקום האיבר שהוצא בסימן deleted . (שיטת המציבה) • בזמן חיפושx, במידה וניתקל בסימן delete, נמשיך את סריקת הרשימה עד למציאת x או עד שנגיע למקום ריק (המסומן ב- Null). • בזמן הכנסתx, במידה וניתקל בסימן delete, נשתמש במקום זה לשמירת x, אחרת נשמור את x במקום הריק בסוף הרשימה (המסומן ב-Null ). הוצא37, חפש17, הכנס27

  28. שיטת Open addressing דוגמא נוספת סריקה ליניארית Linear probing Insert(3) h(x) = x mod 10 Insert(7) 33 Insert(13) 13 3 D Insert(33) Search(33) Insert(43) Search(73) 43 Delete(3) 7 Search(43)

  29. שיטת Open addressing סריקה ליניארית Linear probing מהו זמן הכנסה ממוצע? ההסתברות שמקום רנדומלי תפוס מקום ראשון לא תפוס שני לא תפוס שלישי לא תפוס אורך חיפוש ממוצע

  30. יתרונות וחסרונות • היתרון העיקרי של שיטת הַמַּצִּיבָה הוא פשטות. אבל … • כאשר השימוש דורש הוצאות, אורך החיפוש תלוי גם באיברים שכבר הוצאו ולא רק באיברים שכרגע במבנה. • דוגמאות לשימוש במילון ללא הוצאות: • טבלה של שמות משתנים בהרצת תוכנית (Symbol Table). • מספרי תעודות זהות אינם ממוחזרים. נתאר כעת שיטות נוספות ל-open addressing. שיטות אלו שימושיות במיוחד במימושי מילון ללא הוצאות. כאשר יש צורך בהוצאות, עדיפה שיטתהרשימות המקושרות. cs,Technion

  31. ערבול נִשְׁנָהRehashing - נניח שברשותנו סדרה אינסופית של פונקציות ערבול: h0,h1,h2,… ננסה לשמור את x במקום h0(x). אם תפוס, ננסה במקום h1(x). נמשיך עד שנצליח. סריקה ליניארית (linear probing) היא מקרה פרטי בו: hi(x) = h(x) + i . cs,Technion

  32. ערבול כפול Double Hashing -- נגיע לתוצאות דומות לערבול נשנה ע"י שתי פונקציות בלבד d, h. כאשר: hi(x) = h(x) + i d(x) הפונקציות d, h נבחרות באופן בלתי תלוי. מהו היחס הרצוי בין d(x) לגודל הטבלה m ? גודל הטבלה ו- d(x) צריכים להיות מספרים זרים כך ש ,hm-1(x) …h0(x), תכסה את כלהאינדקסים האפשריים בתחום {0,…,m-1}. לפיכך נוח לבחור את m להיות מספר ראשוני. הוצאות נעשות ע"י שימוש בסימון delete . cs,Technion

  33. ניתוח זמנים עבור Rehashing משפט: בהנחת הפיזור האחיד, בשיטת ערבול rehashingמתקיים: זמן ממוצע של חיפוש כושל קטן מ- 1/(1 - ) זמן ממוצע של חיפוש מוצלח קטן מ- הנחת הפיזור האחיד:הסדרה (h0(x),h1(x),h2(x),…hm-1(x)) היא פרמוטציה אקראית של (0,…,m-1). הוכחה בספר הלימוד: Introduction to algorithms, Cormen et al., pp 238-239 cs,Technion

  34. ניתוח זמנים עבור סריקה ליניארית משפט: בהנחת הפיזור האחיד הפשוט, בשיטת ערבול open addressing בסריקה ליניארית מתקיים: זמן ממוצע של חיפוש כושל קטן מ- זמן ממוצע של חיפוש מוצלח קטן מ- הוכחה בספר : Knuth, The art of computer programming, Vol 3, 1973 מסקנה: המשפט מראה שאפשר להשתמש בסריקה ליניארית, כל עוד הטבלה לא מלאה מדי (80%). cs,Technion

  35. ערבול (Hashing) cs,Technion

  36. פונקציות ערבול דרישות מפונקציות ערבול: מפזרת היטב וקלה לחישוב. שיטת החילוק מודולו m: h(x) = x mod m רצוי ש-m: לא יהיה חזקה של 2 או 10. בחזקות של 2 פונקצית הערבול מסתמכת רק על log2(m) הביטים הראשונים (LSB). בחזקות של עשר, פונקצית הערבול מסתמכת רק על log10(m) הספרות הראשונות. רצוי שפונקציות הערבול ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את הנחת הפיזור האחיד. יהיה ראשוני שאינו קרוב לחזקה של 2. חזקות קרובות של 2 גורמות לפיזור לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של 2, למשל מחרוזות תווים נכתבות בבסיס 28 = 256 . הערה:רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות "אמיתיים" וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב. cs,Technion

  37. פונקציות ערבול (המשך) • שיטת הכפל בקבוע 1 > a > 0 • הכפל את המפתח k בקבוע a. • מצא את החלק השבור של התוצאה. • הכפל את החלק השבור ב- m ועגל כלפי מטה: h(k) = m  (ak mod 1) הערך של m אינו קריטי. ערך של a הגורם לפיזור טוב הוא : דוגמא:m = 10000 k = 123456 h(k) = 10000 (123456 0.61803 mod 1) = 10000 (76300.0041151 mod 1) = 10000 0.0041151 = 41.151 …  = 41 cs,Technion

  38. ערבול (Hashing) cs,Technion

  39. פונקציות ערבול למחרוזות ארוכות נשתמש בקוד ”a” = 97 = 0110 0001 :ascii ”b” = 98 = 0110 0010 וכך הלאה … פתרון נאיבי: בצע xor ביט ביט. לדוגמא: h(“ab”) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 בהינתו מחרוזת s0,…, sk בצע: =ascii(s0) xor … xor ascii(sk) (h(s0,…, sk חסרון ראשון: h(“aa”) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 h{“bb”) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0 התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים:h{“abccba”) = 0 חסרון שני: טווח הערכים מוגבל.h(x)  255 cs,Technion

  40. פונקציות ערבול למחרוזות ארוכות (המשך) T 0 23 דוגמא: hash(aa) 118 38 hash(a) = T[0] xor 97 = פתרון עדיף: בחר פרמוטציה אקראית (0,…, 255) של 0…255 ואחסן אותה במערךT . בצע xor בין האות הראשונה s0 של המפתח והערך T[0]. התוצאה a1 נמצאת בתחום0…255 . בשלב ה-i בצע xor בין האות si של המפתח והערך T[ai]כאשר ai היא תוצאת ה-xor בשלב הקודם. תוצאת פונקצית הערבול היא תוצאת ה-xor עם האות האחרונה של המפתח כלומר hash(key) = sn xor T[an]. 0001 01111 xor 0110 0001 = 0111 0110 = 118 hash(aa) = T[ hash(a) ] xor a = T[118] xor 97 = 0010 0110 xor 0110 0001 = 71 הערה: בשיטה זו נפתרה בעיית האותיות המופיעות מספר זוגי של פעמים. cs,Technion

  41. דוגמא דוגמא: hash(dat) cs,Technion

  42. פונקציות ערבול למחרוזות ארוכות (המשך) מימוש של פונקצית הערבול: int hash(char *s) { int h = 0; char *p; for (p=s; *p; p++) h = T[h]^ *p; /* Xor */ return h; } cs,Technion

  43. פונקציות ערבול למחרוזות ארוכות (המשך) כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות T1, T2 ולשרשר את התוצאות. hash(k) = [hash1(k), hash2(k)] = hash1(k) * 256 + hash2(k) גודל הטווח החדש, כלומר גודל טבלת הערבול, הוא=65,536 2562 = 216. (בעוד גודל כל Ti הוא 256). ניתן להגיע לטווח הרצוי ע"י שימוש במספר קטן של פרמוטציות נוספות. תוצאה דומה מתקבלת אם במקום hash2 נוסיף 1 לאות הראשונה של המחרוזת ונשתמש שובבפונקצית הערבול hash1. לדוגמא: hash(acb) = hash1(acb) * 256 + hash1(bcb) cs,Technion

  44. ערבול אוניברסלי אבחנה: לכל זוג מפתחות x ו-y,ההסתברותpשבבחירהאקראית של פונקצית ערבול מתוךH, תהיה התנגשות ביןx ו-y היא p = (|H|/m)/|H| = 1/m. נראה כעת ששימוש בקבוצה אוניברסלית גורם לפיזור טוב. אח"כ נראה כיצד לבנות קבוצה כזו. לכל בחירה של פונקצית ערבול קיימת סדרה גרועה של מפתחות כך שתווצר רשימה באורך מקסימלי. תכונה זו יכולה ליצור בעיה. דוגמא: יתכן מתכנת המשתמש באופן עקבי בשמות מסוימים למשתני התוכניות שהוא כותב ולצערו פונקצית הערבול הבונה את ה-symbol table ממפה את כל השמות הנ"ל לאותו המקום בטבלת הערבול. לפיכך כל תוכנית מחשב של משתמש זה אינה יעילה כפי שיכולה הייתה להיות ! הפתרון: לבחור באקראי, בזמן יצירת טבלת ערבול, פונקצית ערבול מתוך קבוצת פונקציות שהוגדרה מראש. נרצה שקבוצת הפונקציות תהיה כזו, שעבור כל סדרת מפתחות, בחירה אקראית של אחת הפונקציות תיצור פיזור טוב. הגדרה: תהי H קבוצת פונקציות ערבול מתחום U לקבוצה .{0,…,m-1} הקבוצה H נקראת אוניברסלית אם לכל זוג מפתחות שונים x,y  U מספר הפונקציות עבורן h(x) = h(y) הוא |H|/m .

  45. ערבול אוניברסלי (המשך) משפט: תהיHקבוצה אוניברסלית של פונקציות ערבול לתוך טבלהT בגודלm. אםhנבחרהבאקראי מתוךH, ונשתמש בה לערבולnמפתחות כלשהם, אזי לכל מפתח,המספר הצפוי שלהתנגשויות בשיטת הרשימות המקושרות שווה ל-(n-1)/m = α-1/m . הוכחה:ראינו שההסתברות להתנגשות של מפתח מסויםxעם מפתח מסויםyהיאp = 1/m. המספר הצפוי של התנגשויות של מפתח מסויםxעם מפתח כלשהו נתון לפיכך ע"י: מסקנה: מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומס. cs,Technion

  46. בניית קבוצה אוניברסלית נבחר את גודל הטבלה להיות מספר ראשוניm. נשבור כל מפתחxל-r + 1חלקים באורך קבועx = [ x0,…,xr]. (למשל באורך בייט = 8 ביטים). מספר הביטים יבחר כך שהערך שלxiיהיה לכל היותרm. לכל סדרהa = [a0,…,ar]מהתחום{0,..,m-1} r+1נגדיר פונקצית ערבול ha(x) בצורההבאה: קבוצת הפונקציותHמוגדרת להיותa {ha}ומספר הפונקציות בקבוצה זו הוא:mr+1. דרך השימוש בשיטה זו: נקצה טבלת ערבולTבגודלm, נגריל מספרa ונשתמש בפונקצית הערבולhaלכל הפעולות דוגמא: m=257, טווח המפתחות0-224. נשבור כל מפתח לשלושה חלקים באורך 8 ביטים.נניח שהוגרלו המספרים a=[248,223, 101]. בהינתן המפתח x = 1025 =00000000 00000100 00000001 = 4·28 +1·20 = [0,4,1] נחשב (2480+ 2234 + 1011) mod 257 = 993 mod 257 = 222 cs,Technion

  47. בניית קבוצה אוניברסלית (המשך) הניתנת לַשִּׁכְתּוּב כדלקמן: משפט: קבוצת הפונקציותH = {ha}שהוגדרה בשקף הקודם היא קבוצה אוניברסלית. הוכחה: יהיוx = [x0,…,xr] ו- y = [y0,…,yr]מפתחות שונים. ללא הגבלת הכלליות נניחx0y0. אנו טוענים שלכל בחירה שלa1,…,arקיים ערך יחיד ל-a0כך שמתקייםha(x)=ha(y). הערךaמתקבל מהפתרון היחיד למשוואה: בהנחה שהטענה נכונה, נובע שכל זוג מפתחותx,yמתנגשיםעבורmrערכים שלaשכן לכל ערך של (a1,…,ar)קיים ערך אחדa0עבורוx,yמתנגשים. נזכור שמספר הפונקציות ב-H הוא mr+1. לפיכך, ההסתברות ש-x ו-y יתנגשו היאmr/mr+1 = 1/m כנדרש מקבוצה אוניברסלית. cs,Technion

  48. בניית קבוצה אוניברסלית (המשך) במשוואה הנתונה z = x0 – y0 0 נכפיל את המשוואה בהופכי של z ונקבל את הפתרון היחיד ל-a0. טענה: למשוואה הבאה יש פתרון והפתרון יחיד. נזכר שכאשרmראשוני מתקיים:עבור כל מספרz(שאינו 0) קיים מספרwיחיד כךשz  w = 1 (mod m) . במילים אחרות: לכל מספר הופכי (כפלי) יחיד! למשל 2  2 = 1 (mod 3) 1  1 = 1 (mod 3) cs,Technion

  49. מגבלות לערבול צריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה (n). פתרון חלקי: כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל כפול,להכניס את כל האיברים לטבלה החדשה, ולהיפטר מהטבלה הישנה. 4n 2n n הזמן המשוערך הממוצע יהיהO(1) למרות שמדי פעם תתבצע פעולה יקרה. cs,Technion

  50. שימוש: בעיית היחידותElement Uniqueness נתונים מספרים0 x0,…,xn-1 < T מצא אם קיים ijעבורוxi = xj. פתרון ראשון– מיון: זמןO(n log n) פתרון שני– ערבול: הכנס את המספרים לטבלת ערבול בגודל O(n) (שיתכן וקטנה בהרבה מ-T ). בזמן התנגשות, בדוק שוויון. זמן ממוצע O(n). cs,Technion

More Related