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

תוכן שנמחק תוכן שנוסף
שורה 4:
 
== מבנה טבלת הגיבוב ==
טבלת הגיבוב מורכבת ממערך, והתאים שבו מפנים לרשומה הרצויה. כדי להגיע אל התא הרצוי נעשה שימוש בפונקציה שנקראת פונקציית גיבוב. הפונקציה מקבלת את המפתח של הרשומה ומחזירה את מספר התא שמפנה אל הרשומה אם היא קיימת. הפונקציה משמשת לחיפוש רשומה רצויה, מציאת מקום מתאים עבור הכנסה של רשומה חדשה, ומציאת המקום של רשומה שצריך למחוק.

כדוגמה לטבלת גיבוב פשוטה נוכל לקחת מפעל קטן שבו רוצים לשמור רשומות המכילות את פרטי העובדים והגישה לרשומות תהיה לפי מספר עובד בן 3 ספרות. כדי לבנות טבלת גיבוב מתאימה, נוכל להשתמש במערך בעל אלף תאים ונבחר פונקציית גיבוב פשוטה שעבור כל מספר עובד, מחזירה את המספר עצמו (<math>\ f(x)=x</math>) ולמעשה מצביעה על כך שאת המידע על העובד שמספרו X נוכל להשיג בתא מספר X. בדוגמה הזאת ביצענו '''מיעון ישיר''' - השתמשנו ב[[פונקציה חד-חד-ערכית]]., כלומר, לא קיים יותר ממספר עובד אחד שיופנה לתא מסוים ועבור כל מפתח, מתקבל אינדקס במערך שמפנה ישירות לרשומה.

פעמים רבות לא ניתן להשתמש להשתמש בפונקציה כזאת, למשל, אם היינו רוצים לגשת לרשומות העובדים בעזרת תעודת הזהות שלהם ושימוש באותה פונקציה אז היינו צריכים להקצות מערך של מיליארד(!) תאים כדי שיתאים לטווח של הפונקציה. הבעיה נוצרת כאשר מספר המפתחות האפשריים, גדול בהרבה מאשר מספר הרשומות שיהיו בטבלת הגיבוב . כדי להתמודד עם הבעיה משתמשים גם בפונקציות שאינן חד-חד-ערכיות, מה שיאפשר שימוש במערך קטן יותר אך יגרור בעיה נוספת של "התנגשויות", כלומר, הפונקציה מחזירה עבור הרשומה, מספר תא שמתאים גם לרשומה אחרת.
 
==סיבוכיות זמן השבת ערך בטבלת גיבוב==