טבלת גיבוב – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
Matanyabot (שיחה | תרומות)
מ בוט החלפות: תיתכן\1
מחיקת פסקה "סיבוכיות זמן השבת ערך בטבלת גיבוב". המידע כבר נמצא בצורה מסודרת בשאר הערך
שורה 19:
 
קיימת שיטה נוספת לפתרון התנגשויות הנקראת [[גיבוב קוקייה]].
 
קיימותכאשר טבלאותהרשומות מיוחדותשיהיו הקרויותבטבלה, ידועות מראש, ניתן להשתמש '''טבלאותבגיבוב גיבוב מושלמותמושלם''', המאפשרותכלומר, שימוש בפונקציה שידוע מראש שהיא מתאימה עבור כל מפתח את האינדקס המתאים לו בלי שום התנגשות. ולכן מאפשרת השגת נתון ב-(O(1 גם במקרה הגרוע ביותר. טבלה זו קלה לתחזוק, אך נדרש זמן גדול לבנייתה הראשונית והיא דורשת מקום מורחב יחסית לטבלת גיבוב רגילה.
 
== פונקציית הגיבוב ==
שורה 48 ⟵ 50:
 
בטבלה סגורה המחיקה מתבצעת באמצעות מציאת המקום המתאים בטבלה על ידי פונקציית הגיבוב ואז שימוש בפונקציית ההוצאה של מבנה הנתונים הנוסף אתו עובדים. סיבוכיות המחיקה תהיה כמו סיבוכיות החיפוש.
 
==סיבוכיות זמן השבת ערך בטבלת גיבוב==
כמו במבנה הנתונים [[מערך (מבנה נתונים)|מערך]], טבלת הגיבוב מאפשרת בדיקת נתון ב[[סיבוכיות זמן]] ממוצעת של (Θ(1 - ללא תלות במספר האלמנטים בטבלה. אולם, במקרה הגרוע ביותר, הבדיקה עשויה להתבצע בסיבוכיות זמן טובה פחות, של (O(n, כאשר n מייצג את מספר האיברים בטבלה. בהשוואה למבני מערך, טבלאות גיבוב מועילות כאשר יש לאחסן מספר גדול של רשומות ובמיוחד כאשר גודל קבוצת הנתונים ניתן לחיזוי.
קיימות טבלאות מיוחדות הקרויות '''טבלאות גיבוב מושלמות''', המאפשרות השגת נתון ב-(O(1 במקרה הגרוע ביותר. טבלה זו קלה לתחזוק, אך נדרש זמן גדול לבנייתה הראשונית והיא דורשת מקום מורחב יחסית לטבלת גיבוב רגילה.
 
== שיטות גיבוב ==
שורה 63 ⟵ 61:
* '''[[גיבוב כפול]]''' {{אנ|Double hashing}} '''-''' בגיבוב כפול משתמשים בפונקציית גיבוב נוספת כדי לטפל במקרה של התנגשות. הנוסחה עבור גיבוב כפול היא: <math>h(k,i) = ( h_1(k) + i \cdot h_2(k) ) \mod m</math> כאשר <math>k</math> - המפתח המבוקש, <math>h_1,h_2</math> - פונקציות גיבוב, <math>i</math> - מספר ההתנגשויות ו<math>m</math> - מספר התאים בטבלה. ההצטברות בגיבוב כפול מתרחשת רק עבור מפתחות שבאופן נדיר שני הפונקציות מחזירות עבורם את אותו הערך ובכך עדיפה על הבדיקה הריבועית אבל לא נשמרת המקומיות בכלל.
 
==שימושים שונים לטבלאות גיבוב==
טבלאות גיבוב מועילות כאשר יש לאחסן מספר גדול של רשומות ובמיוחד כאשר גודל קבוצת הנתונים ניתן לחיזוי.
 
טבלאות גיבוב משמשות לעתים למימוש [[מילון (מבנה נתונים)|מערכים אסוציאטיביים]], [[קבוצה (מבנה נתונים)|קבוצות]], ו[[זיכרון מטמון|מטמון]] (אזור אחסון של נתונים שלהם יזדקק המחשב בתדירות גבוהה). ב[[שחמט]] [[מחשב|ממוחשב]], טבלת גיבוב משמשת בדרך כלל למימוש [[טבלת מעברים]], ובמסדי נתונים שונים ניתן להשתמש בטבלת גיבוב להחזקת טבלאות תוכן.