ערבול (hashing)
DESCRIPTION
ערבול (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. - PowerPoint PPT PresentationTRANSCRIPT
Hash
(Hashing)ערבול
חומר קריאה לשיעור זה
Chapter 12- Hash tables (pages 219mdash243)
Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
Geiger amp Itai 2001
Hash
(Hashing)ערבול
ורשימת דילוגים2-3 עצי AVLראינו שלושה מימושים שונים למילון
)log n(Oהפעולות הבסיסיות )חיפוש הכנסה והוצאה( מתבצעות כל אחת ב-
האם אפשר לממש פעולות אלו בסיבוכיות זמן יותר טובה
Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
Geiger amp Itai 2001
1Data 22
Data kk
0
m-1
תשובה כן
)O)1באמצעות מערך אפשר לממש כל פעולה ב-
כלשהו לא למפתח
הם שהמפתחות 0123456789נניח
איך
Hash
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
Geiger amp Itai 2001
0123456789
הם שהמספרים 0123456789נניח
Insert(3)Insert(7)Insert(0)Insert(9)
Delete(7)Delete(0)
Search(3)Search(0)
3
7
0
9
Hash
csTechnion
4
O(1)זמן סבוכיות
O(M)מקום סבוכיות
ישירה direct addressing0 גישה123456789
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
הם שהמספרים 0123456789נניח
3
9
אם נשתמש במערך אבחנה O(1)זמן של כל פעולה יהיה אמנם
O(M)אך דרישות המקום הן הטווח הוא גודל Mכאשר
n = o(M)ייתכן
M 0123 למספרים
Hash
csTechnion
5
(Hashing)ערבול
של ערכי המפתחות גדול בהרבה גודל התחום לעתים תשובה המפתחות בהם משתמשיםממספר
מספרי תעודת זהות מורכבים מתשע ספרות 1דוגמא מפתחות אך בישראל יש פחות מ 109עשרוניות כלומר קיימים
בודד של 1 אנשים לפיכך שימוש במערך ינצל פחות מ 107הזיכרון המוקצה למערך
30 מספר המחרוזות של אותיות עבריות באורך 2דוגמא )באמצעותן ניתן לתאר שם פרטי שם אמצעי ושם משפחה של
107בעוד מספר האנשים קטן מ 2230תושבי ישראל( הוא
מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים
Hash
csTechnion
6
( Hashing)ערבול
אשר בהינתן מפתח h U 0hellipm-1(hash)נגדיר פונקצית ערבול מחשבת אינדקס בטווח המתאיםUבתחום
( Direct Addressing)מימוש מילון באמצעות מערך נקרא גישה ישירה המפתח עצמו משמש כאינדקס במערך
באמצעות kמתוך המפתח )h)k אינדקס נחשבכאשר מרחב המפתחות גדול h key index ערבולפונקצית
)O)1 של ממוצעהמטרה לממש את פעולות החיפושהכנסה והוצאה בזמן במערך )h)k יכנס לתא kמפתח
)1(O חייב להיות )h)kלכן זמן חישוב
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
(Hashing)ערבול
ורשימת דילוגים2-3 עצי AVLראינו שלושה מימושים שונים למילון
)log n(Oהפעולות הבסיסיות )חיפוש הכנסה והוצאה( מתבצעות כל אחת ב-
האם אפשר לממש פעולות אלו בסיבוכיות זמן יותר טובה
Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
Geiger amp Itai 2001
1Data 22
Data kk
0
m-1
תשובה כן
)O)1באמצעות מערך אפשר לממש כל פעולה ב-
כלשהו לא למפתח
הם שהמפתחות 0123456789נניח
איך
Hash
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
Geiger amp Itai 2001
0123456789
הם שהמספרים 0123456789נניח
Insert(3)Insert(7)Insert(0)Insert(9)
Delete(7)Delete(0)
Search(3)Search(0)
3
7
0
9
Hash
csTechnion
4
O(1)זמן סבוכיות
O(M)מקום סבוכיות
ישירה direct addressing0 גישה123456789
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
הם שהמספרים 0123456789נניח
3
9
אם נשתמש במערך אבחנה O(1)זמן של כל פעולה יהיה אמנם
O(M)אך דרישות המקום הן הטווח הוא גודל Mכאשר
n = o(M)ייתכן
M 0123 למספרים
Hash
csTechnion
5
(Hashing)ערבול
של ערכי המפתחות גדול בהרבה גודל התחום לעתים תשובה המפתחות בהם משתמשיםממספר
מספרי תעודת זהות מורכבים מתשע ספרות 1דוגמא מפתחות אך בישראל יש פחות מ 109עשרוניות כלומר קיימים
בודד של 1 אנשים לפיכך שימוש במערך ינצל פחות מ 107הזיכרון המוקצה למערך
30 מספר המחרוזות של אותיות עבריות באורך 2דוגמא )באמצעותן ניתן לתאר שם פרטי שם אמצעי ושם משפחה של
107בעוד מספר האנשים קטן מ 2230תושבי ישראל( הוא
מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים
Hash
csTechnion
6
( Hashing)ערבול
אשר בהינתן מפתח h U 0hellipm-1(hash)נגדיר פונקצית ערבול מחשבת אינדקס בטווח המתאיםUבתחום
( Direct Addressing)מימוש מילון באמצעות מערך נקרא גישה ישירה המפתח עצמו משמש כאינדקס במערך
באמצעות kמתוך המפתח )h)k אינדקס נחשבכאשר מרחב המפתחות גדול h key index ערבולפונקצית
)O)1 של ממוצעהמטרה לממש את פעולות החיפושהכנסה והוצאה בזמן במערך )h)k יכנס לתא kמפתח
)1(O חייב להיות )h)kלכן זמן חישוב
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
Geiger amp Itai 2001
0123456789
הם שהמספרים 0123456789נניח
Insert(3)Insert(7)Insert(0)Insert(9)
Delete(7)Delete(0)
Search(3)Search(0)
3
7
0
9
Hash
csTechnion
4
O(1)זמן סבוכיות
O(M)מקום סבוכיות
ישירה direct addressing0 גישה123456789
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
הם שהמספרים 0123456789נניח
3
9
אם נשתמש במערך אבחנה O(1)זמן של כל פעולה יהיה אמנם
O(M)אך דרישות המקום הן הטווח הוא גודל Mכאשר
n = o(M)ייתכן
M 0123 למספרים
Hash
csTechnion
5
(Hashing)ערבול
של ערכי המפתחות גדול בהרבה גודל התחום לעתים תשובה המפתחות בהם משתמשיםממספר
מספרי תעודת זהות מורכבים מתשע ספרות 1דוגמא מפתחות אך בישראל יש פחות מ 109עשרוניות כלומר קיימים
בודד של 1 אנשים לפיכך שימוש במערך ינצל פחות מ 107הזיכרון המוקצה למערך
30 מספר המחרוזות של אותיות עבריות באורך 2דוגמא )באמצעותן ניתן לתאר שם פרטי שם אמצעי ושם משפחה של
107בעוד מספר האנשים קטן מ 2230תושבי ישראל( הוא
מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים
Hash
csTechnion
6
( Hashing)ערבול
אשר בהינתן מפתח h U 0hellipm-1(hash)נגדיר פונקצית ערבול מחשבת אינדקס בטווח המתאיםUבתחום
( Direct Addressing)מימוש מילון באמצעות מערך נקרא גישה ישירה המפתח עצמו משמש כאינדקס במערך
באמצעות kמתוך המפתח )h)k אינדקס נחשבכאשר מרחב המפתחות גדול h key index ערבולפונקצית
)O)1 של ממוצעהמטרה לממש את פעולות החיפושהכנסה והוצאה בזמן במערך )h)k יכנס לתא kמפתח
)1(O חייב להיות )h)kלכן זמן חישוב
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
4
O(1)זמן סבוכיות
O(M)מקום סבוכיות
ישירה direct addressing0 גישה123456789
(Hashing)ערבול Lecture7 of Geiger amp Itairsquos slide brochurewwwcstechnionacil~dangcourseDS
הם שהמספרים 0123456789נניח
3
9
אם נשתמש במערך אבחנה O(1)זמן של כל פעולה יהיה אמנם
O(M)אך דרישות המקום הן הטווח הוא גודל Mכאשר
n = o(M)ייתכן
M 0123 למספרים
Hash
csTechnion
5
(Hashing)ערבול
של ערכי המפתחות גדול בהרבה גודל התחום לעתים תשובה המפתחות בהם משתמשיםממספר
מספרי תעודת זהות מורכבים מתשע ספרות 1דוגמא מפתחות אך בישראל יש פחות מ 109עשרוניות כלומר קיימים
בודד של 1 אנשים לפיכך שימוש במערך ינצל פחות מ 107הזיכרון המוקצה למערך
30 מספר המחרוזות של אותיות עבריות באורך 2דוגמא )באמצעותן ניתן לתאר שם פרטי שם אמצעי ושם משפחה של
107בעוד מספר האנשים קטן מ 2230תושבי ישראל( הוא
מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים
Hash
csTechnion
6
( Hashing)ערבול
אשר בהינתן מפתח h U 0hellipm-1(hash)נגדיר פונקצית ערבול מחשבת אינדקס בטווח המתאיםUבתחום
( Direct Addressing)מימוש מילון באמצעות מערך נקרא גישה ישירה המפתח עצמו משמש כאינדקס במערך
באמצעות kמתוך המפתח )h)k אינדקס נחשבכאשר מרחב המפתחות גדול h key index ערבולפונקצית
)O)1 של ממוצעהמטרה לממש את פעולות החיפושהכנסה והוצאה בזמן במערך )h)k יכנס לתא kמפתח
)1(O חייב להיות )h)kלכן זמן חישוב
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
5
(Hashing)ערבול
של ערכי המפתחות גדול בהרבה גודל התחום לעתים תשובה המפתחות בהם משתמשיםממספר
מספרי תעודת זהות מורכבים מתשע ספרות 1דוגמא מפתחות אך בישראל יש פחות מ 109עשרוניות כלומר קיימים
בודד של 1 אנשים לפיכך שימוש במערך ינצל פחות מ 107הזיכרון המוקצה למערך
30 מספר המחרוזות של אותיות עבריות באורך 2דוגמא )באמצעותן ניתן לתאר שם פרטי שם אמצעי ושם משפחה של
107בעוד מספר האנשים קטן מ 2230תושבי ישראל( הוא
מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים
Hash
csTechnion
6
( Hashing)ערבול
אשר בהינתן מפתח h U 0hellipm-1(hash)נגדיר פונקצית ערבול מחשבת אינדקס בטווח המתאיםUבתחום
( Direct Addressing)מימוש מילון באמצעות מערך נקרא גישה ישירה המפתח עצמו משמש כאינדקס במערך
באמצעות kמתוך המפתח )h)k אינדקס נחשבכאשר מרחב המפתחות גדול h key index ערבולפונקצית
)O)1 של ממוצעהמטרה לממש את פעולות החיפושהכנסה והוצאה בזמן במערך )h)k יכנס לתא kמפתח
)1(O חייב להיות )h)kלכן זמן חישוב
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
6
( Hashing)ערבול
אשר בהינתן מפתח h U 0hellipm-1(hash)נגדיר פונקצית ערבול מחשבת אינדקס בטווח המתאיםUבתחום
( Direct Addressing)מימוש מילון באמצעות מערך נקרא גישה ישירה המפתח עצמו משמש כאינדקס במערך
באמצעות kמתוך המפתח )h)k אינדקס נחשבכאשר מרחב המפתחות גדול h key index ערבולפונקצית
)O)1 של ממוצעהמטרה לממש את פעולות החיפושהכנסה והוצאה בזמן במערך )h)k יכנס לתא kמפתח
)1(O חייב להיות )h)kלכן זמן חישוב
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
הם שהמספרים 1000 - 0נניחדוגמא
Insert(43)Insert(57)Insert(60)Insert(39)
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
h(43) = 3h(57) = 7h(60) = 0h(39) = 9
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Delete(57)Delete(50)Search(43)Search(66)
h(57) = 7h(50) = 0h(43) = 3h(66) = 6
h ערבול hash functionפונקצית
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
הם שהמספרים 1000 - 0נניחמילון פעולות
43
57
60
39
h 0 ndash 1000 012hellip9h(x) = x mod 10
Insert(73) h(73) = 3
התנגשות
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
10
בשיטת הערבול נוצרות התנגשויות
)h)x( = h)y אבל x y כאשר
m = 10 h(k) = k mod 10דוגמא
51 17 15 92 88 29
511922
34
1556
177888
0
299 h)81( = 1 = h)51(
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
11 שרשראות באמצעות להתנגשויות פתרון(chaining )
Insert)Tx( הכנס את x בראש הרשימה T[ h)xkey(]
)O)1זמן במקרה הגרוע ביותר
Search)Tk( חפש איבר עם מפתח k ברשימה T[ h)k(]
זמן במקרה הגרוע ביותר )אורך הרשימה(Delete)Tx( סלק את x מהרשימה T[ h)xkey(]
זמן במקרה הגרוע ביותר )אורך הרשימה(
הפעולות
x1 x3 x4
x2 x5
X1
X4
X5X3
X2
T
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
60
43
57
39
Insert(73) h(73) = 3
73
Insert(67) h(67) = 7
67
Insert(87) h(87) = 7
87
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
60
43
57
39
73
67 87
Insert(77)
הרשימה בראשהסידורי במקום
הרשימה בסוף
Chaining השרשראות שיטת
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
להכנסה 14 בראש דוגמאהרשימה
m = 10 h)k( = k mod m נניח
קלט
12345678
0
9
1253
19
53 62 17 19 37 12 57
62 12
5737 5717 37 57
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
60
43
57
39
73
67 87
Insert(37) Insert(47)Insert(77) Insert(97)
Insert(107)
אחיד הנחה באופן מפוזרים המפתחותאו
h אחיד באופן המפתחות את מפזרת
במקרה הגרוע ביותר כל האיברים נכנסו לאותה ))nהרשימה ואז זמן חיפושהוצאה הוא
נכניס
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
nאברים
mn
העומס פקטור
ממוצע אורךרשימה של
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
הפשוט האחיד הפיזור הנחהh אחיד באופן המפתחות את מפזרת
m
mn
ממוצע אורךרשימה שלממוצע כושל זמן חיפוש
mn
11
נבחר nOm)(אם
)1(O
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
18
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש כושל(
=1+nm+1 הזמן הממוצע לחיפוש כושל הוא הפשוט
-הוכחה מ לאחת באקראי מגיע מפתח כל הפשוט האחיד הפיזור mבהנחתהרשימות
bull סופה עד הרשימות באחת לחפש הממוצע הזמן לפיכך הוא כושל לחיפוש הזמןהוא bull האחיד הפיזור בהנחת רשימה של הממוצע = n mאורכהזמן bull יידרש בממוצע בסוף+ ) 1לפיכך המצביע בדיקת זמן את הכולל
1הרשימה(2345678
0
9
62 1253
17 37 57
19
ארבעה מצביעים
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash 19
) המשך ) זמנים ניתוחותחת הנחת הפיזור האחיד בשיטת השרשראות משפט )חיפוש מוצלח(
הכנסה בראש ))2=1+n)2m+1חיפוש מוצלח הוא לממוצעה הזמן הפשוט(הרשימש ישנם הוכחהbull החיפוש שבזמן בסדר nנאמר שהוכנסו k1hellipknמפתחות
המפתח bull של הממוצע חיפוש זמן kiמהונוספו bull זה מפתח n-iאחרי נוספים מפתחותלמפתח bull משמאל הרשימה גודל בממוצע m(n-iהוא )kiלכן
המפתח bull של הממוצע החיפוש שזמן kiמכאןהוא
( n-i) 1m+הממוצע bull החיפוש יהיה tזמן כלשהו למפתח
לפיכך
n
i min
nt
1
11
n
i
inmn 1
)(11
1
0
11n
i
imn 2
)1(11 nnmn
mmn
21
21
211
12345678
0
9
62 1253
17 37 57
19 kiהמפתח
kiאחרי kiלפני
לחיפוש מפתיח רנדומלי בלוףממוצע ה
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
20
) המשך ) זמנים ניתוח בהם משתמשים הוא כגודל nלפיכך כאשר סדר הגודל של מספר המפתחות
)1( = O נקבל שגורם העומס קבוע כלומר )n = O)m כלומר עבור mהמערך )O)1ולכן כל הפעולות דורשות זמן ממוצע
של מספרים שלמים U= מפתחות מטווח כלשהו 2100n עבור דוגמא= מקומות ובממוצע אורך כל 700m נוכל להחזיק מערך ובו 106נאמר עד
)O)1= וזמני החיפוש יהיו 3nmשרשרת יהיה
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
( Hashing)ערבול 21 ערבולפונקציית Direct
Addressingמימוש עם מערך
שרשראות זמן חישוב
חייב להיות הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
Open addressingשיטת
התנגשות
0
1
2
3
( )( )( )( )
h xh xh xh x
לא נשתמש בשרשראות אלא כל האיברים יוכנסו לטבלה
( n m le )1 פקטור העומס open addressing ברור שבשיטות
נבחן שלושה שיטות
סריקה ליניארית
ערבול נשנה
וערבול כפול
-Rehashing נשנהערבול נניח שברשותנו סדרה אינסופית
hellip h0h1h2 של פונקציות ערבול)h0)x במקום xננסה לשמור את
)h1)xאם תפוס ננסה במקום נמשיך עד שנצליח
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
0
1 0
2 1
3 2
4 3
( )( ) ( ) 1( ) ( ) 1( ) ( ) 1( ) ( ) 1
h xh x h xh x h xh x h xh x h x
Open addressingשיטת ליניארית Linear probingסריקה
-- linear probing סריקה ליניארית תפוס )h)kאם המקום המיועד
mשים במקום הבא מודולו
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash 24
דוגמא
12
57
12345678
0
9
53 62 17 19 37 12 57 m = 10 h(k) = k mod m דוגמא
קלט12
5737
12
573719
12
5737
17
19
1262
5737
17
19
126253
5737
17
19
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash 25
בשיטת linear probingהוצאהכיצד נוציא איברים
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט
126253
5737
17
19
126253
57
17
19
17חפש 37הוצא
לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתקbull
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
26
בשיטת linear probingהוצאה1פתרון
בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא והכנס את כולם חזרה פרט לאיבר שרוצים להוציא
126253
57
1917
12345678
0
9
126253
5737
17
19
17חפש 37הוצא
126253
5737
17
19
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash 27
בשיטת המציבההוצאה
12345678
0
9
53 62 17 19 37 12 57 m = 10 h)k( = k mod m דוגמא
קלט126253
5737
17
19
בסימן x חיפושבזמן bull וניתקל סריקת deleteבמידה את נמשיךלמציאת עד - xהרשימה ב ) המסומן ריק למקום שנגיע עד (Nullאו
בסימן x הכנסתבזמן bull וניתקל לשמירת deleteבמידה זה במקום נשתמשx את נשמור -xאחרת ב ) המסומן הרשימה בסוף הריק (Nullבמקום
126253
57delete
17
19
17חפש 37הוצא
126253
5727
17
19
27הכנס
כדי לא לנתק את שרשרת החיפוש נסמן את bull )שיטת המציבה(deletedמקום האיבר שהוצא בסימן
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
Open addressingשיטת ליניארית Linear probingסריקה
Insert(3)Insert(7)Insert(13)Insert(33)
Search(43)Delete(3)
Search(33)3
7
1333
Insert(43)
43
Search(73)
D
h(x) = x mod 10
נוספת דוגמא
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
0123456789
mn
ממוצע חיפוש אורך
nmm
11
1 (1 )2
2 (1 )3
תפוס לא ראשון מקוםתפוס לא שני
תפוס לא שלישי
Open addressingשיטת ליניארית Linear probingסריקה
ממוצע הכנסה זמן מהותפוס רנדומלי שמקום ההסתברות
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
30
וחסרונות יתרונות הוא פשטות אבל hellipהמציבההיתרון העיקרי של שיטת bullכאשר השימוש דורש הוצאות אורך החיפוש תלוי גם באיברים שכבר הוצאו bull
ולא רק באיברים שכרגע במבנה
- ל נוספות שיטות כעת open addressingנתאר הוצאות ללא מילון במימושי במיוחד שימושיות אלו שיטות
המקושרות הרשימות שיטת עדיפה בהוצאות צורך יש כאשר
דוגמאות לשימוש במילון ללא הוצאות(Symbol Table)טבלה של שמות משתנים בהרצת תוכנית bull מספרי תעודות זהות אינם ממוחזריםbull
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
31
-Rehashing נשנהערבול
h0h1h2 נניח שברשותנו סדרה אינסופית של פונקציות ערבול hellip
)h0)x במקום xננסה לשמור את נמשיך עד שנצליח )h1)xאם תפוס ננסה במקום
hi)x( = h)x( + i( היא מקרה פרטי בו linear probingסריקה ליניארית )
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
32
כפול --Double Hashingערבול d hנגיע לתוצאות דומות לערבול נשנה עי שתי פונקציות בלבד
)hi)x( = h)x( + i d)xכאשר
נבחרות באופן בלתי תלויd hהפונקציות
m לגודל הטבלה )d)xמהו היחס הרצוי בין
deleteהוצאות נעשות עי שימוש בסימון
תכסה )x( helliph0)x(hm-1 צריכים להיות מספרים זרים כך ש )d)xגודל הטבלה ו- m-1hellip0את כל האינדקסים האפשריים בתחום
להיות מספר ראשוניmלפיכך נוח לבחור את
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
33
עבור זמנים Rehashingניתוח( היא פרמוטציה h1(x)h2(x)helliphm-1(x))x(h0 הסדרה )הנחת הפיזור האחיד
(m-1hellip0אקראית של )מתקיים rehashing בהנחת הפיזור האחיד בשיטת ערבול משפט
( - 1)1זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ- 1
11ln1
Introduction to algorithms Cormen et al pp 238-239 הוכחה בספר הלימוד
חיפוש כושל חיפוש מוצלח גורם העומס 3386 2 053 261 5 083669 10 09
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
ליניארית 34 סריקה עבור זמנים ניתוח בהנחת הפיזור האחיד הפשוט משפט
בסריקה ליניארית מתקייםopen addressingבשיטת ערבול
זמן ממוצע של חיפוש כושל קטן מ-
זמן ממוצע של חיפוש מוצלח קטן מ-
Knuth The art of computer programming Vol 3 1973 הוכחה בספר המשפט מראה שאפשר להשתמש בסריקה ליניארית כל עוד מסקנה
(80הטבלה לא מלאה מדי )
)1(112
1
2)1(112
1
סריקה ליניארית
חיפוש מוצלח
סריקה ליניארית חיפוש כושל
ערבול נשנה חיפוש מוצלח
ערבול נשנה
חיפוש כושל
גורם העומס
15 25 1836 2 05
30 130 3261 5 08
55 505 3669 10 09
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
( Hashing)ערבול 35 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות הנחה הנחה הנחהאחיד המפתחות פיזור של
העומס- פקטוראחיד פיזורהנחה
אחיד פיזורהנחה
אחיד פיזורהנחה
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
36
ערבול פונקציותמפזרת היטב וקלה לחישוב דרישות מפונקציות ערבול
m h)x( = x mod mשיטת החילוק מודולו
mרצוי ש-
פונקצית הערבול מסתמכת רק 2 בחזקות של 10 או 2לא יהיה חזקה של ( בחזקות של עשר פונקצית הערבול LSB הביטים הראשונים ))log2)mעל
הספרות הראשונות רצוי שפונקציות הערבול )log10)mמסתמכת רק על ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את
הנחת הפיזור האחיד
גורמות לפיזור 2חזקות קרובות של 2יהיה ראשוני שאינו קרוב לחזקה של למשל 2לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של
256 = 28מחרוזות תווים נכתבות בבסיס
רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות הערהאמיתיים וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
37
ערבול (פונקציות המשך )a gt 0 lt 1שיטת הכפל בקבוע
a בקבוע kהכפל את המפתח bullמצא את החלק השבור של התוצאהbullh(k) = m (ak mod 1) ועגל כלפי מטהmהכפל את החלק השבור ב- bull
אינו קריטיmהערך של
הגורם לפיזור טוב הוא aערך של 618030215 a
m = 10000 k = 123456דוגמאh(k) = 10000 (123456 061803 mod 1) = 10000 (763000041151 mod 1) = 10000 00041151
= 41151 hellip = 41
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
( Hashing)ערבול 38 ערבולפונקציית Direct
AddressingOpen Addressing
מימוש עם מערךשרשראות
מערך
זמן חישובחייב להיות אחיד המפתחות פיזור של
העומס- פקטורשיטת
החילוקהכפל שיטת
החילוק שיטתהכפל שיטת
החילוק שיטתהכפל שיטת
כאשרהתנגשויותאבל
שרשראותchaining
RehashLinear probingDouble Hashing
Rehashאחיד פיזור
כושל חיפוש זמןמוצלח חיפוש זמן
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
למחרוזות 39 ערבול פונקציותארוכות
h(ldquoaardquo) = h( (0110 0001) xor (0110 0001)) = (0000 0000) = 0 חסרון ראשון
hldquobbrdquo) = h( (0110 0010) xor (0110 0010)) = (0000 0000) = 0
hldquoabccbardquo) = 0התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים
ardquo = 97 = 0110 0001 asciirdquoנשתמש בקוד
rdquo brdquo = 98 = 0110 0010
וכך הלאה hellip
ביט ביטxor בצע פתרון נאיבי
h(ldquoabrdquo) = h( (0110 0001) xor (0110 0010)) = (0000 0011) = 3 לדוגמא
שני חסרון מוגבל הערכים h(x) 255טווח
ascii(s0) xor hellip xor ascii(sk) (h(s0hellip sk בצע =s0hellip skבהינתו מחרוזת
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
ארוכות 40 למחרוזות ערבול פונקציות) המשך)
הראשונה xorבצע האות והערך s0בין המפתח T[0]שלבתחום a1התוצאה 255hellip0נמצאת- ה האות xorבצע iבשלב והערך siבין המפתח תוצאת aiכאשר T[ai]של היא
xorה- הקודם בשלב- ה תוצאת היא הערבול פונקצית המפתח xorתוצאת של האחרונה האות עם
כלומרhash(key) = sn xor T[an]
hash(aa) = T[ hash(a) ] xor a = T[118] xor 970001 01111 xor 0110 0001 = 0111 0110 = 118
= 0010 0110 xor 0110 0001 = 71
hash(aa) 38 דוגמא
230
118
T
hash(a) = T[0] xor 97 =
פעמים של זוגי מספר המופיעות האותיות בעיית נפתרה זו בשיטה הערה
עדיף פתרוןאקראית ) פרמוטציה במערך 255hellip0של( 0hellip 255בחר אותה Tואחסן
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
41
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 11110000 207 96 211 161 216 197 94 123 104 150 210 84 203 99 133 1120001 113 58 21 142 57 31 228 25 220 37 48 181 53 63 186 2350010 169 42 221 60 234 79 170 80 141 120 191 33 7 229 39 1960011 85 10 202 41 16 178 30 193 20 219 166 165 214 177 43 2510100 230 182 29 121 206 109 157 46 2 65 38 27 122 236 126 2120101 135 55 187 108 71 3 93 130 117 110 240 98 245 23 200 150110 217 24 116 4 74 174 129 14 247 102 111 252 115 73 136 2440111 145 198 49 128 34 66 45 103 1 64 254 8 152 255 224 1461000 223 35 134 32 147 44 97 164 243 83 88 175 253 56 225 891001 119 158 163 127 19 26 179 13 54 87 18 226 67 61 238 1621010 201 222 107 154 81 77 82 78 239 159 241 153 250 68 125 2371011 90 199 9 143 22 114 0 70 75 36 106 248 44 249 246 1951100 91 213 137 69 185 232 62 17 227 173 11 183 144 5 124 2311101 208 12 149 156 190 6 139 40 160 194 138 176 242 184 155 2041110 192 172 180 47 132 209 167 205 76 233 59 215 50 218 189 1001111 52 171 101 151 131 72 28 92 140 118 105 95 86 168 148 51
[10000110] 97 01100001T
hash(dat) דוגמא
[00000100] 216 11011000T
( ) [00000000] xor ( ) 11001111 xor 01100100 10101011hash d T ascii d
[00000000] 207 11001111T
( ) [ ( )] xor ( ) 10011001 xor 01100001 11111000hash da T hash d ascii a
[10101011] 153 10011001T
( ) [ ( )] xor ( ) 10001100 xor 01110100 11111000hash dat T hash da ascii t
דוגמא
[11111000] 140 10001100T
( ) 11111000 248hash dat
ascii symbol
0110 0001 a
0110 0010 b
0110 0011 c
0110 0100 d
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
ארוכות 42 למחרוזות ערבול פונקציות) המשך)
מימוש של פונקצית הערבול
int hash(char s)
int h = 0char pfor (p=s p p++)
h = T[h]^ p Xor return h
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
ארוכות 43 למחרוזות ערבול פונקציות) המשך)
T1 T2כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות ולשרשר את התוצאות
hash)k( = [hash1)k( hash2)k(] = hash1)k( 256 + hash2)k(
216= 2562 65536גודל הטווח החדש כלומר גודל טבלת הערבול הוא=(256 הוא Ti)בעוד גודל כל
ניתן להגיע לטווח הרצוי עי שימוש במספר קטן של פרמוטציות נוספות
לאות הראשונה של 1 נוסיף hash2תוצאה דומה מתקבלת אם במקום hash1המחרוזת ונשתמש שוב בפונקצית הערבול
)hash)acb( = hash1)acb( 256 + hash1)bcbלדוגמא
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash 44
אוניברסלי ערבול בעיה ליצור יכולה זו תכונה
ולצערו דוגמא כותב שהוא התוכניות למשתני מסוימים בשמות עקבי באופן המשתמש מתכנת יתכן- ה את הבונה הערבול symbol tableפונקצית הערבול בטבלת המקום לאותו ל הנ השמות כל את ממפה
מחשב לפיכך תוכנית להיות כל הייתה שיכולה כפי יעילה אינה זה משתמש של
מתחום Hתהי הגדרה ערבול פונקציות Hהקבוצה m-1hellip0לקבוצה Uקבוצתנקראת
שונים אוניברסלית מפתחות זוג לכל עבורן xy Uאם הפונקציות = h(x)מספרh(y)| הואH|m
הפתרון פונקציות קבוצת מתוך ערבול פונקצית ערבול טבלת יצירת בזמן באקראי לבחורשהוגדרה
של אקראית בחירה מפתחות סדרת כל שעבור כזו תהיה הפונקציות שקבוצת נרצה מראש טוב פיזור תיצור הפונקציות אחת
מקסימלי באורך רשימה שתווצר כך מפתחות של גרועה סדרה קיימת ערבול פונקצית של בחירה לכל
כזו קבוצה לבנות כיצד נראה כ אח טוב לפיזור גורם אוניברסלית בקבוצה ששימוש כעת נראה
שבבחירה אקראית של פונקצית ערבול pההסתברות y ו-x לכל זוג מפתחות אבחנה p = (|H|m)|H| = 1m היא y ו-x תהיה התנגשות בין Hמתוך
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
45
) המשך ) אוניברסלי ערבול
h אם m בגודל T קבוצה אוניברסלית של פונקציות ערבול לתוך טבלהH תהי משפט מפתחות כלשהם אזי לכל מפתח המספר n ונשתמש בה לערבול Hנבחרהבאקראי מתוך
m = α-1m(n-1הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-)
= p היא y עם מפתח מסוים x ראינו שההסתברות להתנגשות של מפתח מסוים הוכחה1m
עם מפתח כלשהו נתון לפיכך עיxהמספר הצפוי של התנגשויות של מפתח מסוים
|
1xyTy m
L
מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומסמסקנה
mmn 11
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
46
אוניברסלית קבוצה בניית mנבחר את גודל הטבלה להיות מספר ראשוני
8 )למשל באורך בייט = x = [ x0hellipxr] חלקים באורך קבוע r + 1 ל- xנשבור כל מפתח ביטים(
m יהיה לכל היותר xiמספר הביטים יבחר כך שהערך של
בצורה ha(x) נגדיר פונקצית ערבול m-1 r+10 מהתחום a = [a0hellipar]לכל סדרה mxaxhהבאה i
r
iia mod)(
0
mr+1 ומספר הפונקציות בקבוצה זו הוא a ha מוגדרת להיות Hקבוצת הפונקציות
a נגריל מספר m בגודל T נקצה טבלת ערבול דרך השימוש בשיטה זו לכל הפעולותhaונשתמש בפונקצית הערבול
המפתחות m=257 דוגמא באורך 0-224טווח חלקים לשלושה מפתח כל 8נשבור ביטים המספרים שהוגרלו a=[248223 101]נניח
המפתח = x = 1025 =00000000 00000100 00000001 = 428 +120בהינתן נחשב [041]
( 2480 + 2234 + 1011 )mod 257 = 993 mod 257 = 222
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
47
) המשך ) אוניברסלית קבוצה בניית שהוגדרה בשקף הקודם היא קבוצה H = ha קבוצת הפונקציות משפט
אוניברסלית מפתחות שונים ללא הגבלת הכלליות נניח y = [y0hellipyr] ו- x = [x0hellipxr] יהיו הוכחהx0y0
a הערך ha(x)=ha(y) כך שמתקיים a0קיים ערך יחיד ל- a1helliparאנו טוענים שלכל בחירה של מתקבל מהפתרון היחיד למשוואה)(mod0)()()(
0
myxayhxhr
iiiiaa
)(mod)()(1
000 myxayxar
iiii
הניתנת לשכתוב כדלקמן
mr+1 הוא Hנזכור שמספר הפונקציות ב-
כנדרש מקבוצה אוניברסליתmrmr+1 = 1m יתנגשו היא y ו-xלפיכך ההסתברות ש-
שכן לכל a ערכים של mr מתנגשים עבור xyבהנחה שהטענה נכונה נובע שכל זוג מפתחות ערך של
(a1hellipar) קיים ערך אחדa0 עבורו xyמתנגשים
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
48
) המשך ) אוניברסלית קבוצה בניית
)(mod)()(1
000 myxayxar
iiii
יחיד w( קיים מספר 0 )שאינו z ראשוני מתקיים עבור כל מספר mנזכר שכאשר
במילים אחרות לכל מספר הופכי )כפלי( יחידz w = 1 (mod m)כך ש
2 = 1 (mod 3) 1 1 = 1 (mod 3) 2למשל
טענה למשוואה הבאה יש פתרון והפתרון יחיד
הנתונה z = x0 ndash y0 0במשוואהשל בהופכי המשוואה את -zנכפיל ל היחיד הפתרון את a0ונקבל
)(mod)()( 100
10 myxyxaa
r
iiii
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
49
לערבול מגבלותצריך לדעת מראש סדר גודל למספר האיברים שמתעתדים להכניס למבנה
(n)
כאשר טבלת ערבול מתמלאת ניתן להקצות טבלה חדשה בגודל פתרון חלקי להכניס את כל האיברים לטבלה החדשה ולהיפטר מהטבלה הישנה כפול
n 2n4n
למרות שמדי פעם תתבצע פעולה יקרהO(1)הזמן המשוערך הממוצע יהיה
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-
Hash
csTechnion
50
היחידות בעיית Element Uniquenessשימוש
0 x0hellipxn-1 lt Tנתונים מספרים
xi = xj עבורו ijמצא אם קיים
O(n log n) ndash מיון זמן פתרון ראשון
ndash ערבולפתרון שני
O(n)הכנס את המספרים לטבלת ערבול בגודל (T)שיתכן וקטנה בהרבה מ-
בזמן התנגשות בדוק שוויון
O(n)זמן ממוצע
- ערבול (Hashing)
- ערבול (Hashing) (2)
- ערבול (Hashing) (3)
- ערבול (Hashing) (4)
- ערבול (Hashing) (5)
- ערבול (Hashing)
- Slide 7
- Slide 8
- Slide 9
- Slide 10
- פתרון להתנגשויות באמצעות שרשראות (chaining)
- Slide 12
- Slide 13
- דוגמא להכנסה בראש הרשימה
- Slide 15
- Slide 16
- Slide 17
- ניתוח זמנים (המשך)
- ניתוח זמנים (המשך) (2)
- ניתוח זמנים (המשך) (3)
- Slide 21
- Slide 22
- Slide 23
- דוגמא
- הוצאה בשיטת linear probing
- הוצאה בשיטת linear probing
- הוצאה בשיטת המציבה
- Slide 28
- Slide 29
- יתרונות וחסרונות
- ערבול נשנה Rehashing -
- ערבול כפול Double Hashing --
- ניתוח זמנים עבור Rehashing
- ניתוח זמנים עבור סריקה ליניארית
- Slide 35
- פונקציות ערבול
- פונקציות ערבול (המשך)
- Slide 38
- פונקציות ערבול למחרוזות ארוכות
- פונקציות ערבול למחרוזות ארוכות (המשך)
- Slide 41
- פונקציות ערבול למחרוזות ארוכות (המשך) (2)
- פונקציות ערבול למחרוזות ארוכות (המשך) (3)
- ערבול אוניברסלי
- ערבול אוניברסלי (המשך)
- בניית קבוצה אוניברסלית
- בניית קבוצה אוניברסלית (המשך)
- בניית קבוצה אוניברסלית (המשך) (2)
- מגבלות לערבול
- שימוש בעיית היחידותElement Uniqueness
-