User Tools

Site Tools


Sidebar

1. บทนำ

2. การวิเคราะห์ Algorithm

3. List, Stack and Queue

4. Tree

5. Hashing

6. Priority Queues

7. การจัดเรียง (Sorting)

8. The Disjoint Set

9. Graph Algorithms

dsa:hgeneral

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 สถานการณ์สมบูรณ์ของตารางแฮช

dsa/hgeneral.txt · Last modified: 2021/09/08 21:44 by wasu

Page Tools