5.1 แนวคิด

กล่าวโดยทั่วไปแล้ว โครงสร้างข้อมูลของ hash table ก็คือ อะเรย์ที่มีขนาดคงที่และมีหน่วยข้อมูล เรียกว่า keys บรรจุอยู่ เช่น หน่วยข้อมูลอาจจะประกอบด้วยสตริง (ซึ่งถูกกำหนดให้ใช้เป็น key) และฟิลด์อื่น ๆ (เช่น ชื่อลูกจ้างที่เป็นส่วนประกอบหนึ่งของโครงสร้างข้อมูลของลูกจ้าง)

เราจะใช้คำแทนขนาดของตารางว่า TableSize ซึ่งกำหนดให้เป็นองค์ประกอบหนึ่งที่อยู่ในโครงสร้างข้อมูลแฮชที่ใช้ ดังนั้นหมายเลขเซลล์ในตารางแฮชเริ่มต้นที่ 0 จนถึง TableSize – 1

แต่ละค่าของ key จะถูก mapped ไปเป็นตัวเลข (หมายเลขเซลล์) ที่อยู่ในช่วง 0 ถึง TableSize – 1 และค่าของ key นั้นก็จะถูกบรรจุลงในเซลล์ตามหมายเลขดังกล่าว

การ mapping กระทำโดยการใช้ฟังก์ชันเรียกว่า hash function ซึ่งตามปกติแล้วhash function ควรจะต้องเป็นฟังก์ชันที่ง่ายในการคำนวณและผลการคำนวณควรจะให้ผลเป็นตำแหน่งเซลล์ที่แตกต่างกันถ้าค่าของ key แตกต่างกัน ซึ่งโดยปกติแล้วเป็นเรื่องที่เป็นไปไม่ได้ ดังนั้น hash function จึงต้องสามารถกระจายการบรรจุค่าของ key ลงในเซลล์ต่าง ๆ ของตารางแฮชได้อย่างสม่ำเสมอกัน รูปที่ 5.1 เป็นตัวอย่างของสถานการณ์สมบูรณ์ของตารางแฮช

ปัญหาที่เหลืออยู่คือ การเลือกฟังก์ชันที่จะใช้ และสิ่งที่ต้องทำเมื่อมี key สองตัวที่ hash ได้ค่าเดียวกัน (เรียกว่าเกิดการชน, collision), และการกำหนดขนาดตารางที่ต้องใช้เป็นตารางแฮช

0
1
2
3 John 25000
4 Phil 31250
5
6 Dave 27500
7 Mary 28200
8
9

รูปที่ 5.1 สถานการณ์สมบูรณ์ของตารางแฮช