הנה הסבר:
אני אסביר לך מה זה HASH פתוח (לא סגור, אם אתה רוצה הסבר ממש טוב על HASH סגור, יש בספר של קורמן) HASH פתוח: תחשוב על מערך של פוינטרים לרשימה מקושרת של סטודנטים בגודל 100 אוקיי? (כל איבר במערך הוא בעצם "ראש" של רשימה מקושרת ריקה בינתיים) עכשיו תחשוב שיש לך רשימת סטודנטים ולכל סטודנט יש מספר תעודת זהות. (כל סטודנט הוא איבר של רשימה מקושרת) אתה רוצה למיין את הסטודנטים בצורה יעילה: הצורה היעילה ביותר היא להשתמש בHASH פתוח בצורה הבאה: אתה לוקח את הסטודנט הראשון, עושה מודולו 100 על התעודת זהות שלו, והולך למערך במקום של המספר שיצא לך, למשל נגיד שיצא לך 56 אז אתה הולך למקום ה56 במערך ומשרשר את הסטודנט לשם. לוקח את הבא בתור עושה מודולו, נגיד שעכשיו יצא לך 40 אתה הולך למקום ה40 במערך (שם יש "ראש" של רשימה ריקה) ומשרשר שם את הסטודנט. ככה אתה ממשיך וממשיך ואז נגיד שאחרי 50 סטודנטים יוצא לך עוד סטודנט שהמודולו שלו הוא 56, אתה הולך למערך למקום ה56 אבל שם כבר יש סטודנט אחד!!!! אז מה שאתה עושה זה פשוט מאוד: משרשר את הסטודנט לסטודנט שכבר שם. הבנת את הרעיון? עכשיו גמרת לשרשר את כל הסטודנטים. מישהו בא אליך ואומר לך ככה: "שלוף נא את הנתונים של הסטודנט מוישה זוכמן מהHASH TABLE" ואז אתה אומר לו אוקיי מה המספר תעודת זהות שלו? ואז אתה עושה מודולו... יצא נגיד 30, אז אתה הולך למערך למקום ה30 ומתחיל לחפש את מוישה זוכמן שם. אתה מבין? נגיד שהסטודנט הראשון הוא לא מוישה זוכמן אז אתה הולך לסטודנט הבא שמשורשר אליו ואם גם זה לא הוא אז אתה הולך לבא בתור וכולי עד שאתה מגיע אליו. ככה בעצם יש לך טבלה HASH TABLE שהסיבוכיות לחיפוש בה היא (1)O יש לציין שאם לכל הסטודנטים יש אותו מודולו אז תהיה לך רשימה מקושרת ארוכה מאוד שהסיבוכיות בה יהיה O של N אבל מבחינה הסתברותית תהיה לך כאן סיבוכיות ממש נמוכה (בעקרון O של 1) יאיר