ערבול (Hashing) חומר קריאה לשיעור זה:

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
טבלאות סמלים נכתב ע"י אלכס קוגן סמסטר חורף, תשס"ח.
מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה
מתמטיקה בדידה תרגול 3.
1 - אוסף של איברים - לעיתים מסודרים לינארית 1) לכל a=b,a b 2) טרנזיטיביות: a>c b>c, a>b דוגמה: שלמים, ממשיים, אותיות. - רשום: {1,4}, {תכונה { X - חברות:
פעולות מילון Insert, Delete, Search Binary Search Tree, AVL, 2-3 Tree, Skip List O(log n) האם יש מבנה עם סבוכיות (1)O? לא למפתח כלשהו.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
A. Frank File Organization קובץ ישיר מתקדם Advanced Direct File.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
Data Structures Dana Shapira Hash Tables 26/06/07.
רקורסיות נושאי השיעור מהן רקורסיות פתרון רקורסיות : שיטת ההצבה שיטת איטרציות שיטת המסטר 14 יוני יוני יוני 1514 יוני יוני יוני 1514.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
משפט ההרכבה Composition Theorem תהי C מחלקה של פונקציות בוליניות תהי נגדיר סדרת פונקציות שניתנות לחישוב בזמן פולינומיאלי.
בהסתברות לפחות למצא בעיה במודל PAC עבור בהסתברות ε הפונקציה f טועה מודל ONLINE 1. אחרי כל טעות הפונקציה משתפרת 2. מספר הטעיות קטן.
עיבוד תמונות ואותות במחשב אלכסנדר ברנגולץ דואר אלקטרוני : שיטות קידוד שיטות קידוד אורך מלת קוד ואנטרופיה אורך מלת קוד ואנטרופיה קידוד.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
ערמות ; מבני נתונים 09 מבוסס על מצגות של ליאור שפירא, חיים קפלן, דני פלדמן וחברים.
תחשיב הפסוקים חלק ג'. צורות נורמליות א. DF – Disjunctive Form – סכום של מכפלות. דוגמא: (P  ~Q  R)  (R  P)  (R  ~Q  ~P) הגדרה: נוסחה השקולה לנוסחה.
מודל ONLINE לומדמורה 1. כל ניתן לחישוב בזמן פולינומיאלי 2. אחרי מספר פולינומיאלי של טעיות ( ) הלומד לא טועה ז"א שווה ל- Littlestone 1988.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
תכנות תרגול 10 שבוע : הקשר בין מערכים למצביעים נרצה לעמוד על הקשר בין מערך למצביע מאחר ומערכים הם הכללה של משתנים הרי שברור שלמערך ולכל אחד מאיבריו.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353)
Ray 7 דוגמא אלגוריתם 1.קבל דוגמאות 2. פלט f a עבור הדוגמה a המינימלית החיובית ?
תחשיב הפסוקים חלק ד'. תורת ההיסק של תחשיב הפסוקים.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
עצים מאוזנים הגדרה: משפחת עצים תקרא מאוזנת אם ,h(T) = O(log n) באשר T הוא עץ במשפחה, n הוא מספר הצמתים ב-T ו-h(T) הוא הגובה של T עצי (Adelson-Velsky,
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
יחס סדר חלקי.
תחשיב היחסים (הפרדיקטים)
מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א.
עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
1 מבוא למדעי המחשב backtracking. 2 מוטיבציה בעיית n המלכות: נתון: לוח שחמט בגודל. המטרה: לסדר על הלוח n מלכות כך שאף אחת לא תאיים על השנייה. דוגמא: עבור.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
- אמיר רובינשטיין מיונים - Sorting משפט : חסם תחתון על מיון ( המבוסס על השוואות בלבד ) של n מפתחות הינו Ω(nlogn) במקרה הגרוע ובממוצע. ניתן לפעמים.
Data Structures Hanoch Levi and Uri Zwick March 2011 Lecture 3 Dynamic Sets / Dictionaries Binary Search Trees.
תרגול 8 Skip Lists Hash Tables. Skip Lists Definition: – A skip list is a probabilistic data structure where elements are kept sorted by key. – It allows.
. Sequence Alignment Tutorial #3 © Ydo Wexler & Dan Geiger.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
מבוא למדעי המחשב סיבוכיות.
מבנה נתונים ואלגוריתמים
ניתוח זמן ריצה (על קצה המזלג)
SQL בסיסי – הגדרה אינדוקטיבית
תירגול 14: מבני נתונים דינאמיים
ניתוח זמן ריצה (על קצה המזלג)
בעיות נוספות ב-NPC.
ניתוח זמן ריצה (על קצה המזלג)
תרגול 11 NP complete.
שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב
NG Interpolation: Divided Differences
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

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

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

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

ערבול (Hashing) מימוש מילון באמצעות מערך נקרא גישה ישירה (Direct Addressing ): המפתח עצמו משמש כאינדקס במערך. כאשר מרחב המפתחות גדול נחשב את האינדקס מתוך המפתח באמצעות פונקצית ערבול. המטרה לממש את פעולות החיפוש,הכנסה, והוצאה בזמן ממוצע של O(1). נגדיר פונקצית ערבול (hash):h: U  {0,…,m-1} אשר בהינתן מפתח בתחום U מחשבת אינדקס בטווח המתאים. האינדקס של מפתח k הוא h(k). דוגמא:m = 10 h(k) = k mod 10 51, 17, 15, 92, 88, 29 51 1 92 2 3 4 15 5 6 17 7 88 8 29 9 בשיטת הערבול נוצרות התנגשויות כאשר x  y אבל h(x) = h(y). לדוגמא:h(81) = 1 = h(51) . cs,Technion

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

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

ניתוח זמנים במקרה הגרוע ביותר כל האיברים נכנסו לאותה הרשימה ואז זמן חיפוש/הוצאה הוא (n) . ברור לפיכך שאין משתמשים בערבול בגלל הזמן המקסימלי לפעולה אלא בגלל הזמן הממוצע לפעולה. נרצה לבחור פונקצית ערבול שמפזרת היטב את המפתחות לרשימות השונות. נניח לרגע שהצלחנו, כלומר h מפזרת את המפתחות באופן אחיד. הנחה זו נקראת הנחת הפיזור האחיד הפשוט (simple uniform hash). ננתח כעת את זמני החיפוש תחת הנחת הפיזור האחיד הפשוט. הגדרה: יהי n מספר המפתחות בשימוש ויהי m גודל הטבלה. פקטור העומס מוגדר ע"י = n / m . תחת הנחת הפיזור האחיד הפשוט ממוצע אורך שרשרת הוא , מכיוון שהאיברים מתחלקים שווה בשווה בין השרשראות השונות. cs,Technion

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

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

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

פתרון ללא שרשראות להתנגשויות לא נשתמש בשרשראות, אלא כל האיברים יוכנסו לטבלה. שיטה כזו נקראת Open addressing . נבחן שלושה פתרונות להתנגשויות : סריקה ליניארית, ערבול נשנה, וערבול כפול. סריקה ליניארית linear probing -- אם המקום המיועד h(k) תפוס, שים במקום הבא מודולו m. 12 57 1 2 3 4 5 6 7 8 9 53, 62, 17, 19, 37, 12, 57 דוגמא: m = 10 h(k) = k mod m קלט: 12 62 53 57 37 17 19 12 62 57 37 17 19 12 57 37 12 57 37 17 19 12 57 37 19 ברור שבשיטות open addressing פקטור העומס 1 ≥ (n  m) .

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

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

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

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

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

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

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

ניתוח זמנים עבור סריקה ליניארית משפט: בהנחת הפיזור האחיד הפשוט, בשיטת ערבול open addressing בסריקה ליניארית מתקיים: זמן ממוצע של חיפוש כושל קטן מ- זמן ממוצע של חיפוש מוצלח קטן מ- סריקה ליניארית חיפוש מוצלח סריקה ליניארית חיפוש כושל ערבול נשנה חיפוש מוצלח ערבול נשנה חיפוש כושל  1.5 2.5 1.836 2 0.5 3.0 13.0 3.261 5 0.8 5.5 50.5 3.669 10 0.9 הוכחה בספר : Knuth, The art of computer programming, Vol 3, 1973 מסקנה: המשפט מראה שאפשר להשתמש בסריקה ליניארית, כל עוד הטבלה לא מלאה מדי (80%). cs,Technion

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

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

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

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

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

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

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

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

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

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

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

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

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