การจัดการข้อมูลเป็นหนึ่งในส่วนสำคัญของการเขียนโปรแกรม โดยหนึ่งในเทคนิคที่ใช้ในการจัดการข้อมูลคือการใช้โครงสร้างข้อมูลประเภท Hash Table ซึ่งในบทความนี้จะพูดถึงเทคนิคหนึ่งในการแก้ไขปัญหาการชนของข้อมูล (collision) ซึ่งเรียกว่า Linear Probing Hashing ในภาษา JavaScript ซึ่งเป็นภาษาสคริปต์ที่ได้รับความนิยมอย่างมากในการพัฒนาเว็บแอปพลิเคชัน
Linear Probing เป็นเทคนิคหนึ่งในการแก้ปัญหา collision ใน hash tables โดยวิธีการนี้จะค้นหาช่องว่างถัดไปภายใน Hash table เพื่อแทรกข้อมูลต่อเมื่อเกิดการชนของข้อมูล สิ่งนี้ช่วยทำให้ข้อมูลที่ใส่เข้ามาสามารถเรียงติดกันได้อย่างเป็นระเบียบและค้นหาได้รวดเร็วยิ่งขึ้นเมื่อเทียบกับเทคนิคอื่นๆ
ก่อนที่จะไปถึงโค้ดเราจำเป็นต้องตั้งค่า hash table และ function hash ที่เหมาะสมเพื่อแปลงค่า key ให้เป็น index ภายใน table:
class HashTable {
constructor(size) {
this.data = new Array(size);
}
hashMethod(key) {
let hash = 0;
for (let i = 0; i < key.length; i++) {
hash = (hash + key.charCodeAt(i) * i) % this.data.length;
}
return hash;
}
}
ต่อไปเราจะเพิ่มโค้ดสำหรับการ `insert`, `find`, และ `delete`:
class HashTable {
// ... (โค้ดก่อนหน้านี้)
insert(key, value) {
let index = this.hashMethod(key);
while (this.data[index]) {
index++;
}
this.data[index] = [key, value];
}
find(key) {
let index = this.hashMethod(key);
while (this.data[index] && this.data[index][0] !== key) {
index++;
}
return this.data[index] ? this.data[index][1] : undefined;
}
delete(key) {
let index = this.hashMethod(key);
while (this.data[index] && this.data[index][0] !== key) {
index++;
}
if (this.data[index]) {
delete this.data[index];
}
}
}
ในโค้ดข้างต้น `insert` จะทำการแทรกข้อมูลโดยหา index ว่างเปล่าถัดไป หากเกิด collision `find` จะค้นหาข้อมูลจนกระทั่งเจอ key ที่ตรงกัน และ `delete` จะลบข้อมูลที่อยู่ใน index ที่ตรงกับ key ที่กำลังจะถูกลบ
การเลือกใช้ Linear Probing Hashing หรือไม่นั้นขึ้นอยู่กับลักษณะของข้อมูลและความต้องการในโปรแกรมของเรา อย่าลืมว่าการเลือกโครงสร้างข้อมูลที่เหมาะสมสามารถช่วยให้โปรแกรมที่เราพัฒนามีประสิทธิภาพขึ้น
สำหรับผู้ที่สนใจการเรียนรู้การเขียนโปรแกรมและการจัดการข้อมูลแบบมืออาชีพ ที่ Expert-Programming-Tutor (EPT) เรามีหลักสูตรที่จะช่วยเสริมสร้างทักษะของคุณให้เข้าใจโครงสร้างข้อมูลและอัลกอริทึมได้อย่างถ่องแท้ เพื่อต่อยอดไปยังการเขียนโปรแกรมในโปรเจ็กต์จริง หรือแม้กระทั่งการพัฒนาซอฟต์แวร์ในระดับสากล เรียนรู้กับเรา เพื่อนำงานของคุณไปอีกระดับด้วยการหล่อหลอมความรู้ด้านการเขียนโค้ดที่มีประสิทธิภาพและแม่นยำ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM