ผลต่างระหว่างรุ่นของ "ตารางแฮช"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Nullzerobot (คุย | ส่วนร่วม)
ลบลิงก์ที่ซ้ำซ้อน wikidata
Phizaz (คุย | ส่วนร่วม)
บรรทัด 43:
ทำให้เกิดการเก็บที่เดียวกัน หรือเมื่อคำนวณผลจากฟังก์ชันแฮชแล้วอาจมีค่ามากกว่าขนาดของ
ตารางแฮชทำให้ต้องวนกลับมาใส่แล้วเจอตัวที่เดิมเคยมีอยู่แล้ว วิธีการแก้ปํญหาที่นิยมมีสองวิธีคือ วิธี SperateChaining และ OpenAddressing
=== วิธี SeparateChainingSeparate Chaining ===
[[ไฟล์:HASHTB32.svg|thumb|การแก้ปัญหาการชนกันด้วย SeparateChaining]]
SeparateChainingSeparate Chaining คือการใช้[[รายการ (โครงสร้างข้อมูล)|รายการ]]หรือ[[รายการแถวลำดับ|แถวลำดับขยายขนาดได้]]แทนการเก็บ
สมาชิกโดยตรง ตารางแฮชแต่ละช่องก็จะกลายเก็บข้อมูลในลักษณะเป็นรายการ เมื่อตัวใดที่ต้องเก็บในตารางแฮชตำแหน่งเดียวกัน ก็จะถูกเก็บไว้ในรายการนี้ต่อไปเรื่อยๆ (คล้ายๆพจนานุกรม เมื่อเปิดสารบัญแล้วเจอว่าตัวอักษรตัวแรกของคำที่เราจะหาอยู่ในหน้าใด ก็เปิดหน้านั้นแล้วต้องมานั่งไล่หาต่อในรายการของคำที่มีตัวอักษรตัวแรกเหมือนกับคำที่เราจะหาต่อไป)
 
=== วิธี OpenAddressingOpen Addressing ===
[[ไฟล์:HASHTB12.svg|thumb|การแก้ปัญหาการชนกันด้วย OpenAddressing]]
เมื่อการการชนเกิดขึ้นวิธีการของ OpenAddressingOpen Addressing คือการหาช่องในตารางแฮชใหม่โดยกระโดดไปจากที่เดิมเป็นฟังก์ชันหนึ่ง จนกว่าจะหาช่องว่างเจอจึงจะใส่ค่าลงไป
ฟังก์ชันที่มักจะใช้กระโดดมีสามแบบคือ การตรวจเชิงเส้น (Linear Probing), การตรวจกำลังสอง (Quadatic Probing) และการแฮชสองชั้น (Double Hashing)
==== การตรวจเชิงเส้น ====
การตรวจเชิงเส้นจะทำให้กระโดดไปจากจุดเดิมเป็นระยะคงที่ การกระโดดเช่นนี้จะทำให้เกิดข้อมูลอยู่