תרגול Hash Tables ds-ps
חידה מהשיעור הקודם בכל השקים המטבעות שוקלים ורק בשק אחד המטבעות שוקלים.. מותר לנו לבצע שקילה אחת בלבד! איך נדע מה השק הקל יותר? שקים עם מטבעות ds-ps
מה היה לנו דיברנו על מבני נתונים מוכרים תור, מחסנית, מערך וכו' פגשנו את הצורך בעצים וראינו סוגים שונים שלהם עץ חיפוש בינארי, B-tree,AVL וכו' 3 ds-ps
מה יהיה לנו מה היה לנו רע עם עצים? אני רוצה להגיע מהר לכל אחד מהתאים אולי מערך? HASH TABLE ds-ps
- הגדרות Hash Tables Hash Function A hash function h maps keys of a given type into integers in a fixed interval [,m-] Uniform Hash Pr h key = i = m hash table., where m is the size of the Hash Table A hash table for a given key type consists of: Hash function h: keys-set [,m-] Array (called table) of size m ds-ps
- הגדרות Hash Tables Dictionary ADT The dictionary ADT models a searchable collection of keyelement items, and supports the following operations: Insert Delete Search ds-ps
Hash Tables שיטות לגיבוב Direct Addressing K is a set whose elements' keys are in the range [,m-]. Use a table of size m and store each element x in index x.key. Disadvantage: when K << m waste of space Chaining h(k) = k mod m (This is an example of a common hash function) If h(k) is occupied, add the new element in the head of the chain at index h(k) ds-ps
Hash Tables שיטות לגיבוב Direct Addressing K is a set whose elements' keys are in the range [,m-]. Use a table of size m and store each element x in index x.key. Disadvantage: when K << m waste of space דוגמא: נרצה לשמור תלמידים בכיתה לפי תעודות זהות Chaining h(k) = k mod m (This is an example of a common hash function) If h(k) is occupied, add the new element in the head of the chain at index h(k) ds-ps
שאלה נתון: טבלת גיבוב עם =m ופונקציות גיבוב h (k) = k mod m h (k) = + (k mod (m )) הכניסו את האיברים הבאים לפי הסדר )משמאל לימין(,, 3,,, 33,,, 3 לטבלת גיבוב מבוססת שרשור,.h(k) = h (k) עם פונקציית גיבוב.a h k היא הפונ' שאיתה עובדים. * ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k) = k mod 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h(3)= 3 ds-ps
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h(3)= 3 ds-ps 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 ds-ps 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 ds-ps 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 ds-ps 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h()= 3 3 ds-ps 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod h(33)= 3 ds-ps 33 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 h()= ds-ps 33 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 h()= ds-ps 33 3
שאלה,, 3,,, 33,,, 3 Chaining h(k)=k mod 3 h(3)= ds-ps 33 3 3
- שיטות נוספות Hash Tables Open Addressing רעיון בסיסי אם תא כלשהו מלא, חפש תא אחר עד שתמצא תא ריק. מחיקה נסמן בדגל כל תא שבו מחקנו ערך. למה?! ds-ps
- שיטות נוספות Hash Tables Open Addressing Linear Probing: h k, i = h k + i mod m, i m h (k) - common hash function First try h(k,) = h'(k), if it is occupied, try h(k,) etc.. Advantage: simplicity Disadvantage: clusters, uses Θ(m) permutations of index addressing sequences Double Hashing: h(k,i) = (h (k) + i h (k))mod m i m- h hash function h step function First try h(k,) = h (k), if it is occupied, try h(k,) etc. Advantage: less clusters, uses Θ(m*m) permutations of index addressing sequences ds-ps
שאלה.h(k)=h (k) m= נתון: טבלת גיבוב עם ופונקציות גיבוב h (k) = k mod m h (k) = + (k mod (m )) הכניסו את האיברים הבאים לפי הסדר )משמאל לימין(,, 3,,, 33,,, 3 לטבלת גיבוב מבוססת שרשור, עם פונקציית גיבוב לטבלת גיבוב מבוססת,linear probing עם אותה פונקציית גיבוב. לטבלת גיבוב מבוססת,double hashing עם פונקציית גיבוב ראשית (k) h ופונקציית צעד (k).h.a.b.c 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 33 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h(3)= 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h(3)= 3 פנוי 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 3 ds-ps תפוס תפוס תפוס פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 ds-ps תפוס תפוס פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h(33)= 3 3 ds-ps תפוס תפוס תפוס תפוס תפוס פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h(33)= 3 3 פנוי 33 ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 33 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h()= 3 3 33 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h(3)= 3 3 33 ds-ps תפוס פנוי
שאלה,, 3,,, 33,,, 3 Linear Probing h(k)=k mod h(3)= 3 3 33 פנוי 3ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod Step Function h (k)=+ (k mod ) 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod Step Function h (k)=+ (k mod ) 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod Step Function h (k)=+ (k mod ) 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod Step Function h (k)=+ (k mod ) 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h (3)= Step Function h (k)=+ (k mod ) 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h (3)= Step Function h (k)=+ (k mod ) 3 3 פנוי 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod Step Function h (k)=+ (k mod ) 3 3 ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) h ()= 3 3 ds-ps תפוס תפוס פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) h ()= 3 3 פנוי ds-ps
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) h ()= 3 3 ds-ps תפוס פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) h ()= 3 3 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h (33)= Step Function h (k)=+ (k mod ) h (33)= 3 3 ds-ps תפוס תפוס פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h (33)= Step Function h (k)=+ (k mod ) h (33)= 3 3 33 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) h ()= 3 3 33 ds-ps פנוי תפוס
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h ()= Step Function h (k)=+ (k mod ) 3 3 33 ds-ps פנוי
שאלה,, 3,,, 33,,, 3 Double Hashing h (k)=k mod h (3)= Step Function h (k)=+ (k mod ) h (3)= 3 3 3 3 33 ds-ps תפוס תפוס תפוס פנוי תפוס
שאלה 3 Chaining Linear Probing Double Hashing 33 טבלת תוצאות: 3 3 3 3 33 3 33 3 3 ds-ps
Hash Tables Load Factor α α = n, Hash table with m slots that stores n m elements (keys) Average (expected) Search Time Open Addressing unsuccessful search: O( + α ) successful search: O( + α ln α ) Chaining unsuccessful search: Θ ( + α) successful search: Θ ( + α ) = Θ ( + α) ds-ps
Hash Tables הערות חשובות: היעילות בטבלאות גיבוב נמדדת בזמן הממוצע, לא הגרוע ביותר. ה load factor מייצג את מספר המפתחות בממוצע שמקבלים את אותו ערך בפונקציית הגיבוב. דוגמא : נסתכל על טבלת גיבוב עם שרשור הfactor load הינו האורך הממוצע של שרשרת בטבלה אם נסתכל במקרה הגרוע ביותר, כל המפתחות מקבלים אותו ערך גיבוב ומושמים באותו תא, ולכן נוצרת שרשרת באורך n. לכן, במקרה הגרוע ביותר, זמן החיפוש של מפתח בטבלה הינו hash).(θ n + time to compute על כן, ברור שאיננו משתמשים בטבלאות גיבוב עקב הביצועים בזמן הגרוע ביותר, וכשננתח זמן בפעולות גיבוב נחשב לפי המקרה הממוצע.
שאלה בשאלה השתמשנו, עבור טבלת גיבוב עם h (k)=k בפונקציית גיבוב ראשית mod,m= ופונקציית צעד.h (k)= k mod + a. האם ניתן היה להשתמש בפונקציה h כפונקציית הצעד ובפונקציה כפונקציית הגיבוב? h ds-ps
h (k)=k mod h (k)=k mod + שאלה h.a האם ניתן היה להשתמש בפונקציה h כפונקציית הצעד ובפונקציה כפונקציית הגיבוב? תשובה: לא, כיוון ש( k ) h עלול לקבל ערך, ואם התא כבר תפוס לא נוכל למקם את הערך החדש. לדוגמא, אם נכניס את הערך, ולאחר מכן ננסה להכניס את הערך, לא נוכל. בעיה נוספת היא ש h לא מקבלת את הערך. ds-ps
שאלה בשאלה השתמשנו, עבור טבלת גיבוב עם h (k)=k בפונקציית גיבוב ראשית mod,m= ופונקציית צעד.h (k)=k mod + a. האם ניתן היה להשתמש בפונקציה h כפונקציית הצעד ובפונקציה כפונקציית הגיבוב? h.b מדוע חשוב שתוצאת פונקציית הצעד וגודל הטבלה יהיו זרים? כלומר, אם h step הינה פונקציית הצעד, מדוע חשוב לדרוש?k לכל gcd(h step (k),m) = ds-ps
שאלה k d b. מדוע חשוב שתוצאת פונקציית הצעד וגודל הטבלה יהיו זרים? כלומר, אם h step הינה פונקציית הצעד, מדוע חשוב לדרוש?k לכל gcd(h step (k),m) = תשובה: אם (k),m)=d> gcd(h step אז ההשמה של m אפשרית רק ב מהתאים. לכן, ייתכן שלא נוכל למצוא תא פנוי עבור מלאה. k, אפילו אם הטבלה אינה ds-ps
שאלה 3 הדגמה: נניח ש,m=.h step (k)=,h (k)= אז (k),m)=,gcd(h step לכן ניתן להכניס את k רק ב = תאים אפשריים. לא אפשרי אפשרי לא אפשרי אפשרי לא אפשרי אפשרי לא אפשרי אפשרי ds-ps
שאלה דרכים להבטיח (k),m)= gcd(h step לכל מפתח: גודל הטבלה הוא מספר ראשוני, ו h step (k)<m לכל k.. גודל הטבלה הוא חזקה של ),(m = ופונקציית. הצעד מחזירה רק תוצאות אי-זוגיות. ds-ps
שאלה 3 נתונות שתי קבוצות של מספרים שלמים.m n כאשר,T={t,t,,t n } ו S={s,s,,s m } הציעו אלגוריתם דטרמיניסטי לבדיקה האם S T בעל זמן ריצה יעיל במקרה הגרוע ביותר..a 3 ds-ps
שאלה 3 נתונות שתי קבוצות של מספרים שלמים.m n כאשר,T={t,t,,t n } ו S={s,s,,s m } S T הציעו אלגוריתם דטרמיניסטי לבדיקה האם a. בעל זמן ריצה יעיל במקרה הגרוע ביותר. קוד: תשובה: ראשית, נמיין את T. לאחר מכן נעבור על האיברים בS ונחפש אותם בT באמצעות חיפוש בינארי. זמן ריצה: n) O(nlog n+mlog n)=o(nlog Subset(T,S,n,m) T:=sort(T) for each s j S found := BinarySearch(T, s j ) if (!found) return "S is not a subset of T" return "S is a subset of T" ds-ps
שאלה 3 נתונות שתי קבוצות של מספרים שלמים.m n כאשר,T={t,t,,t n } ו S={s,s,,s m } S T הציעו אלגוריתם דטרמיניסטי לבדיקה האם a. בעל זמן ריצה יעיל במקרה הגרוע ביותר. b. הציעו אלגוריתם בעל זמן ריצה יותר טוב בממוצע, ע"י שימוש בטבלת גיבוב בגודל m. ds-ps
שאלה 3 b. הציעו אלגוריתם בעל זמן ריצה יותר טוב בממוצע, ע"י שימוש בטבלת גיבוב בגודל m. תשובה: ראשית, נכניס את ערכי T לטבלת גיבוב )מבוססת שרשור(. לאחר מכן, נחפש עבור כל ערך בS אם הוא כבר נמצא SubsetWithHashTable(T,S,n,m) for each t i T insert(ht, t i ) for each s j S found = search(ht, s j ) if (!found) return "S is not a subset of T" return "S is a subset of T" בטבלת הגיבוב. קוד: ds-ps
שאלה 3 b. הציעו אלגוריתם בעל זמן ריצה יותר טוב בממוצע, ע"י שימוש בטבלת גיבוב בגודל m. ניתוח זמן הריצה הממוצע: הכנסת הערכים של T לטבלת הגיבוב - n n O = O אם S T במצב זה ישנם m חיפושים מוצלחים. לכן זמן m + α n הריצה הוא = m + = O m + n m = O n אם S T במקרה הגרוע ביותר ישנם (-m) חיפושים מוצלחים והחיפוש האחרון אינו מוצלח. לכן באופן דומה, הריצה הוא זמן m + α + + α = O(n) ds-ps
שאלה 3 נתונות שתי קבוצות של מספרים שלמים.m n כאשר,T={t,t,,t n } ו S={s,s,,s m } S T הציעו אלגוריתם דטרמיניסטי לבדיקה האם a. בעל זמן ריצה יעיל במקרה הגרוע ביותר. b. הציעו אלגוריתם בעל זמן ריצה יותר טוב בממוצע, ע"י שימוש בטבלת גיבוב בגודל m. c. בהינתן פילטר בלום בגודל r ו k פונקציות גיבוב S T הראו כיצד ניתן לבדוק אם h,h,,h k :U [r] בזמן O(n) במקרה הגרוע ביותר. מהי ההסתברות לקבלת false positive במקרה זה? ds-ps
Hash Tables Bloom Filter A Bloom filter model consists of a bit-array of size m (the bloom filter) and k hash functions h, h,..., h k. It supports insertion and search queries only: Insert at O(k) Search(x) in O(k), with e k n m false positive e k n m = e kn m k probability of getting a ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: 3 ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: ds-ps
Bloom Filter ניתן לחשב שהמספר האופטימלי של פונקציות ערבול עבור m.k = m איברים( הוא ln n )מספר ביטים( ו- n )מספר ln m n וההסתברות לטעות בשאילתה תהיה: ds-ps
שאלה 3 c. בהינתן בלום פילטר בגודל r ו k פונקציות גיבוב :U [r] h,h,,h k הראו כיצד ניתן לבדוק אם S T בזמן O(n) במקרה הגרוע ביותר. מהי ההסתברות לקבלת false positive במקרה זה? פתרון: ראשית, נכניס את כל האיברים בT לבלום פילטר. לאחר מכן, עבור כל איבר בS נבדוק אם הוא נמצא בבלום פילטר. זמן ריצה case( :)worst n θ k בבלום פילטר, לכן חיפושים הכנסות וm n + m θ k ds-ps = m + n θ = θ(n)
שאלה 3 ניתוח סיכוי לpositive :false עבור כל s, S נוכל לקבל תשובה שגויה רק אם s T. כלומר, ייתכן שהבלום פילטר יזהה ש s T גם כאשר זה לא המצב, בהסתברות. e kn r k האלגוריתם מחזיר שגיאה רק אם טעה בכל האיברים ב S\T וענה עליהם נכון. כלומר, אם נסמן,x= S\T אז האלגוריתם מחזיר שגיאה בהסתברות לחילופין, אם נסמן בהסתברות. e kn r kx,t= S T. e kn r k(m t) אז האלגוריתם טועה ds-ps
שאלה נתון מערך של מספרים ממשיים A וערך כלשהו X. עליכם למצוא האם קיימים שני ערכים במערך שסכומם הוא X. a. הראו כיצד ניתן לעשות זאת ב( n O(nlog במקרה הגרוע ביותר פתרון: נמיין את המערך. עבור כל ערך A[i] במערך, נבצע חיפוש בינארי במערך עבור הערך.X-A[i] סה"כ זמן ריצה: (n O(nlog ds-ps
שאלה נתון מערך של מספרים ממשיים וערך כלשהו X. עליכם למצוא האם קיימים שני ערכים במערך שסכומם הוא X..a.b הראו כיצד ניתן לעשות זאת ב( n O(nlog במקרה הגרוע ביותר. כיצד ניתן לעשות זאת ב( O(n זמן ממוצע? ds-ps
שאלה כיצד ניתן לעשות זאת ב( O(n זמן ממוצע? b. פתרון: בוחרים פונקציית גיבוב אוניברסלית h מקבוצת פונקציות גיבוב אוניברסליות H.. מכניסים את ערכי המערך לטבלת גיבוב בגודל n מבוססת שירשור ע"י פונקציית הגיבוב h.. עבור כל ערך A[i] במערך, נבדוק האם X-A[i] נמצא בטבלת הגיבוב..3 כפי שהראתם בשיעור, ע"י שימוש בפונקציית גיבוב אוניברסלית, זמן החיפוש של ערך בטבלת הגיבוב הינו ()O, ללא תלות בהתפלגות הערכים במערך. לכן זמן הריצה של האלגוריתם הינו O(n) בממוצע. ds-ps
Consistent hashing - שאלה בעיה: יש לנו כמות גדולה של גושי מידע ואנחנו רוצים לאחסן אותם בענן. כדי ליצור פיזור שווה, מבוצעת פונ' hash על כל גוש מידע שלפיה נקבע איזה שרת יטפל במידע. במצב בו שרת מפסיק לעבוד, כל גושי המידע שלו מועברים באופן שווה לשרתים הנותרים. כמובן שכל המידע שטופל ע"י השרתים האחרים נשמר כפי שהיה. הציעו דרך למימוש הבעיה. ds-ps
Consistent hashing - שאלה מימוש : נגדיר את גודל טבלת הhash שלנו לפי השרתים. לכל שרת יהיה תא וכל המידע שיכנס לתא שלו, יוכנס לשרת זה בענן. דוגמא מה יקרה אם שרת אחד יפסיק לעבוד? פונ' ה hash שלנו, שהסתמכה על גודל הטבלה עכשיו צריכה להשתנות, ומה עם כל המידע שהיה עד כה? 3 ds-ps
Consistent hashing - שאלה דוגמא: Server Server Server 3 Server Server Chunk 3 Chunk Chunk Chunk Chunk Chunk Chunk Chunk Chunk ds-ps
Consistent hashing - שאלה דוגמא: Server Server Server 3 Server Server Chunk 3 Chunk Chunk Chunk Chunk Chunk Chunk Chunk Chunk מה קורה אם Server 3 מפסיק לעבוד? ds-ps
Consistent hashing - שאלה דוגמא: Server Server Server Server Chunk 3 Chunk Chunk Chunk Chunk Chunk Chunk Chunk Chunk מה קורה אם Server 3 מפסיק לעבוד? לאן מעבירים את המידע? האם משנים את פונקציית ה- Hash? ds-ps
Consistent hashing - שאלה - השרתים והמידע מימוש : נגדיר Consistent hashing יוגרלו לאותה טבלת.hash ds-ps
Consistent hashing - שאלה מימוש : כל שרת ימופה ע"י מספר פונ' במספר מקומות בטבלה. hash כל גוש מידע ימופה לתא אחד בטבלה. כך שהוא יופיע כל שרת יאחסן את המידע מימין לו עד לשרת הבא. ds-ps
Consistent hashing - שאלה מימוש : Chunk is mapped to server Chunk is mapped to server 3 (the array is circular) Chunk 3 is mapped to server Chunk is mapped to server Chunk is mapped to server Chunk is mapped to server Chunk is mapped to server 3 Chunk is mapped to server ds-ps
Consistent hashing - שאלה מימוש : אם שרת מספר מפסיק לעבוד, אז כל השרתים האחרים ימשיכו להחזיק את המידע שלהם בנוסף למידע החדש שנוסף להם. ds-ps
Consistent hashing - שאלה מימוש : Chunk is mapped to server Chunk is mapped to server 3 (the array is circular) Chunk 3 is mapped to server Chunk is mapped to server 3 Chunk is mapped to server Chunk is mapped to server 3 Chunk is mapped to server 3 Chunk is mapped to server ds-ps
שאלה hash Rolling Rolling hash שיטה לחיפוש מהיר של חלקי כלשהו. data לדוגמא: חיפוש של מילים בודדות בתוך משפט שלם. ב-,Rolling hash נגדיר חלון בגודל קבוע. נזיז את החלון על הdata כך שבכל צעד תו אחד יוצא ותו אחד נכנס. נחשב את פונ' הגיבוב של החלון בכל צעד. I'm still, I'm still Jenny from the block ds-ps
שאלה Hash Rolling HELLO MY NAME IS INIGO MONTOYA Window size: דוגמה: Hash values example: hash on HELLOSM = hash on ELLOSMY = hash on LLOSMYS = hash on LOSMYSN = 3 3 ds-ps
שאלה Hash Rolling HELLO MY NAME IS INIGO MONTOYA Window size: דוגמה: Hash values example: hash on HELLOSM = hash on ELLOSMY = hash on LLOSMYS = hash on LOSMYSN = 3 hash on OSMYSNA = hash on SMYSNAM= hash on MYSNAME= ds-ps
שאלה hash Rolling בדרך כלל משתמשים בחלון בגודל כלומר, byte וכל שני חלונות סמוכים שונים בתו אחד בהתחלה ובתו אחד בסוף. ביצוע פונ' hash של מודולו על = bits,כלומר, על מספרים עולה הרבה מאוד! לכן נרצה להיעזר בחלון הקודם על מנת לחשב את החלון הנוכחי. בואו נראה איך עושים זאת יעיל ds-ps
שאלה hash Rolling דוגמא: נניח שנתון המספר 3 עם חלון בגודל ופונקצית -hash.h(x)=x mod יש חלונות:.3,3 ראשית נחשב את החלון 3..h(3)= 3 + + 3 + = 3 איך נקבל את החלון הבא? 3 = 3 3 + h 3 = h 3 3 + = 3 3 + mod ds-ps
שאלה hash Rolling דוגמא: נניח שנתון המספר 3 עם חלון בגודל ופונקצית.h(x)=x mod -hash 3 3 + mod = 3 3 + mod = 3 3 mod + mod = 3 mod mod mod mod + mod ds-ps
שאלה hash Rolling דוגמא: נניח שנתון המספר 3 עם חלון בגודל ופונקצית.h(x)=x mod -hash 3 3 + mod = 3 3 + mod = 3 3 mod + mod = 3 mod mod mod mod + mod קל לחשב ידוע תמיד אותו חישוב ds-ps
שאלה hash Rolling a והתו במקום.x הוא w בטקסט נתון, התו הראשון הוא ה- 3 הוא b. גודל החלון הוא. פונ' הhash היא.mod z ערך הhash של החלון הראשון מהו הערך של החלון w? ds-ps
שאלה hash Rolling פתרון: a הוא הbyte הגדול ביותר במספר בינארי בגודל ביט. b הוא הbyte הקטן ביותר במספר בינארי בגדול ביט. W כאשר = aw Wb ds-ps
שאלה hash Rolling פתרון: aw Wb כאשר = W w = w a + b w mod z = ((w a ) + b) mod z = (w a + b) mod z = ((w mod z) ( mod z) (a mod z) ( mod z) + b mod z) mod z = X ( mod z) (a mod z) ( mod z) + b mod z) mod z ds-ps
שאלה hash Rolling = X ( mod z) (a mod z) ( mod z) + b mod z) mod z פתרון: X ידוע מהחישוב הקודם. a,b, קל מאוד לחשב מספרים קטנים. mod z זהו מספר שיחזור עליו בכל חישוב של חלון לכן ניתן לחשב אותו בהתחלה, פעם אחת בלבד. ds-ps
מה היה לנו דיברנו על החיסרון במבני הנתונים שהיו לנו. הבנו שצריך רעיון כמו.hash table הכרנו סוגים שונים של טבלאות גיבוב בוא ננסה את עצמנו עם 3 ds-ps