50
Hash ללללל( Hashing ) הההה ההההה הההההה הה:Chapter 12- Hash tables (pages 219—243) Lecture7 of Geiger & Itai’s slide brochure www.cs.technion.ac.il/~dang/courseDS Geiger & Itai, 2001

ערבול (Hashing)

  • Upload
    love

  • View
    85

  • Download
    7

Embed Size (px)

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 Presentation

Citation preview

Page 1: ערבול  (Hashing)

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
Page 2: ערבול  (Hashing)

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
Page 3: ערבול  (Hashing)

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
Page 4: ערבול  (Hashing)

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
Page 5: ערבול  (Hashing)

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
Page 6: ערבול  (Hashing)

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
Page 7: ערבול  (Hashing)

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
Page 8: ערבול  (Hashing)

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
Page 9: ערבול  (Hashing)

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
Page 10: ערבול  (Hashing)

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
Page 11: ערבול  (Hashing)

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
Page 12: ערבול  (Hashing)

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
Page 13: ערבול  (Hashing)

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
Page 14: ערבול  (Hashing)

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
Page 15: ערבול  (Hashing)

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
Page 16: ערבול  (Hashing)

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
Page 17: ערבול  (Hashing)

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
Page 18: ערבול  (Hashing)

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
Page 19: ערבול  (Hashing)

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
Page 20: ערבול  (Hashing)

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
Page 21: ערבול  (Hashing)

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
Page 22: ערבול  (Hashing)

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
Page 23: ערבול  (Hashing)

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
Page 24: ערבול  (Hashing)

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
Page 25: ערבול  (Hashing)

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
Page 26: ערבול  (Hashing)

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
Page 27: ערבול  (Hashing)

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
Page 28: ערבול  (Hashing)

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
Page 29: ערבול  (Hashing)

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
Page 30: ערבול  (Hashing)

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
Page 31: ערבול  (Hashing)

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
Page 32: ערבול  (Hashing)

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
Page 33: ערבול  (Hashing)

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
Page 34: ערבול  (Hashing)

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
Page 35: ערבול  (Hashing)

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
Page 36: ערבול  (Hashing)

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
Page 37: ערבול  (Hashing)

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
Page 38: ערבול  (Hashing)

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
Page 39: ערבול  (Hashing)

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
Page 40: ערבול  (Hashing)

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
Page 41: ערבול  (Hashing)

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
Page 42: ערבול  (Hashing)

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
Page 43: ערבול  (Hashing)

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
Page 44: ערבול  (Hashing)

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
Page 45: ערבול  (Hashing)

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
Page 46: ערבול  (Hashing)

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
Page 47: ערבול  (Hashing)

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
Page 48: ערבול  (Hashing)

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
Page 49: ערבול  (Hashing)

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
Page 50: ערבול  (Hashing)

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