Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

การแฮชด้วยวิธีคูณ (Hashing by Multiplication) ในโครงสร้างข้อมูล


ฟังก์ชันแฮชแบบคูณ

ใช้ฟังก์ชันแฮชดังนี้:

h(x) = ⌊m × (x × A)⌋ mod m

โดยที่ A เป็นค่าคงที่จริง (Real-valued constant) ข้อดีของวิธีนี้คือ ค่า m ไม่ได้สำคัญมาก สามารถเลือก m เป็นกำลังของ 2 ได้ แม้ค่า A ใดก็ตามจะให้ฟังก์ชันแฮชได้ แต่มีค่า A บางค่าที่ดีกว่าค่าอื่น

ค่า A ที่แนะนำโดย Knuth

ตาม Knuth ควรใช้อัตราส่วนทอง (Golden Ratio) สำหรับ A:

$$A = \frac{\sqrt{5} - 1}{2} = 0.61803398$$

ข้อจำกัด

จากหลัก Piccolhole Principle: หาก u ≥ n×m จะมีค่าแฮช i หนึ่งและเซต S ⊆ U ขนาด n ที่ h(x) = i สำหรับทุก x ใน S ดังนั้น กรณีแย่ที่สุดของการแฮชแบบคูณ จึงแย่เท่ากับการแฮชแบบหาร (Hashing by Division)