บทที่ 8 แฮช (Hash)

Download Report

Transcript บทที่ 8 แฮช (Hash)

่
บทที 8 แฮช (Hash)
1
บทที่ 8 แฮช (Hash)
•
•
•
•
กล่าวนาแฮช
แฮชฟังก ์ช ัน (Hash Functions)
การแก ้ปัญหาการชนกันของแฮชคีย ์
้
่8
สรุ
ปเนื อหาบทที
(Resolving
Collision)
2
กล่าวนาแฮช
่
่
• แนะนาเกียวกั
บการจัดการขอ้ ความหรือขอ้ มูลใหเ้ ป็ นดัชนี เพือใช
้
อ ้างอิงตาแหน่ งการเก็บข ้อมูลของอาร ์เรย ์หรือฐานข ้อมูล เรียกรูปแบบ
่ อ้ งการค
้ั ยว สามารถใช ้รูปแบบการ
การหาคี
ย ์ดัชนี้นหาข
วา่ การท
าแฮช
• เมื
อต
อ้ มูลให
เ้ จอเพี(Hash)
ยงครงเดี
อ า้ งอิง ต าแหน่ งในการเก็ บ ข อ้ มู ล ด ว้ ยดัช นี เ พื่อที่จะสามารถเข า้ ถึง
้ั ยว โดยการหาคีย ์ดัชนี เพื่อใช ้อา้ งอิงตาแหน่ งใน
ขอ้ มูลไดเ้ พียงครงเดี
่ ข ้อมู
่ ขนาด n ข ้อมูล พบว่า ในแต่ละเรคอร ์ดของ
ล
• เก็
เมืบอพิ
จารณาอาร
์เรย ์ทีมี
่
อาร ์เรย ์สามารถเก็บข ้อมูลได ้เพียงหนึ่ งข ้อมูล ในการหาตาแหน่ งเพือ
่ ้อมูลเข ้าไปในอาร ์เรย ์เรียกว่า “การคานวณหาแอดเดรส”
เพิมข
(Address Calculator)
3
กล่าวนาแฮช
• แฮชฟั งก ์ชน
ั (Hash
function)
เป็ นแนวความคิดในการ
คานวณหาแอดรเดรสในการจัดการข ้อมูลในอาร ์เรย ์ และเรียกอาร ์เรย ์
ในการเก็
บข ้อมูลแฮชว่างกแฮชเทเบิ
ล (Hash table)
• ตั
วอย่างการของแฮชฟั
์ชัน
่
่ า้ มา
o เมือโรงพยาบาลต
อ้ งการเก็บขอ้ มูลเบอร ์โทรศัพท ์บุคคลทีเข
่
รกั ษาพยาบาล แลว้ กาหนดใหด้ ช
ั นี เพือใช
้อา้ งอิงตาแหน่ งในการ
เก็ บ ข อ้ มู ลในอาร ์เรย ์ คือ หมายเลขโทรศัพ ท แ์ ทนด ว้ ยตัว แปร
num
จะได ว้ ่า ต าแหน่ งในการเก็ บ ข อ้ มู ล บุ ค คลที่เข า้ มา
ร ักษาพยาบาลคือ table[num]
o ใช ้หมายเลขโทรศัพ ท ์ 123-4567
เก็ บ ข อ้ มู ลในต าแหน่ ง
่
้ ้องใช ้การจองพืนที
้ ในการเก็
่
table[1234567] ซึงในกรณี
นีต
บ
้
ข ้อมูลทังหมดสิ
บล ้านข ้อมูลในการประกาศอาร ์เรย ์ table
้ ในหน่
่
o แต่ถา้ ไม่ตอ้ งการใช ้พืนที
วยความจาเพื่อเก็บขอ้ มูลถึงสิบ
ลา้ นขอ้ มูล และเมื่อพิจารณาเฉพาะหมายเลขโทรศัพทเ์ พียง 4
ตัวหลังมาเป็ นตาแหน่ งในการเก็บขอ้ มูล เช่นหมายเลขโทรศัพท ์
คือ 123-4567 จะเก็บในอาร ์เรย ์ตาแหน่ งที่ table[4567] แทน 4
กล่าวนาแฮช
่
o การเปลียนข
้อมูลหมายเลขโทรศัพท ์ในการเก็บข ้อมูลในอาร ์เรย ์
ในตาแหน่ ง 1234567 เป็ นการอ ้างอิงตาแหน่ งในการเก็บข ้อมูล
้ นตัวอย่างในการใช ้แฮช
ในอาร ์เรย ์ตาแหน่ ง 4567 ในรูปแบบนี เป็
งก
์ช ันh(Hash
function)
• สัญฟั
ลัก
ษณ์
แทนแฮชฟั
งก ์ชัน และตัวแปร x คือ ตาแหน่ ง
่ จ้ ากแฮชฟั งก ์ชันในการอา้ งอิงตาแหน่ งแอดเดรสใน
แอดเดรสทีได
์เรย ์
• มีอาร
หมายเลขโทรศั
พท ์สองเบอร ์คือ 1234567
และ 1114567
ต าแหน่ งในการเก็ บ ข อ้ มู ลในอาร ์เรย อ์ ยู่ ที่ ต าแหน่ งเดี ย วกัน
เนื่ องจากก าหนดให ต
้ วั เลขสี่ตัว หลัง เป็ นต าแหน่ งในการอ า้ งอิง
่ ยกรูปแบบ
ตาแหน่ งแอดเดรส คือตาแหน่ งแอดเดรส 4567 ซึงเรี
้ น นี ้ว่ า การชนกัน ข้อ มู ล (Collision
การมีแ อดเดรสที่ซ ากั
data)
5
แฮชฟังก ์ช ัน (Hash Functions)
่
• แฮชฟั งก ์ชัน (Hash Functions) เป็ นการจัดการเกียวกั
บตัวเลข
่
่
่ ่
จานวนเต็ม เช่น การเปลียนตั
วเลขทีหลากหลายให
เ้ ป็ นตัวเลขทีอยู
่ าหนด, การกาหนดให ้ข ้อมูลทีหลากหลายให
่
ช่วงทีก
้มาเก็บอยู่ในช่วง
0 ถึง 100 เป็ นต ้น แต่ถ ้าคีย ์ในการค ้นหาไม่ใช่ตวั เลขจานวนเต็มก็
่ น
สามารถเปลี่ยนรู ป แบบให เ้ ป็ นเลขจ านวนเต็ มได เ้ ช่น กัน ซึงเป็
หลักการของการท
งก ์ชัน
การเลื
อกหลักาแฮชฟั
(Selection
digits)
่ จานวนเก ้าหลัก เช่น
• ถ ้าคีย ์ในการคน้ หา คือ รหัสของลูกจา้ งทีมี
001364825 ถ ้าเลือกหลักที่ 4 และหลักสุดทา้ ย จะได ้เลข 35
เป็ นตาแหน่ งในอ ้างอิงแอดเดรสในตารางแฮช
่ และหลั
่
h(001364825) = 35 (เลือกจากหลักทีสี
ก
ท ้าย) ง เกี่ยวกับ การเลื อ กหลัก ที่ น ามาท าแฮชฟั ง ก ช
• ขสุอ้ ดควรระวั
์ น
ั
งนัา้นงเช่
คียน์ในการค
้อมูล่ ง 001354825
ในตาราง
ตัวดัอย่
การเลื้นหาของข
อ กหลัก ที่หนึ
และหลัก ที่สามมาเป็
นแฮช
่ 35
่ หลายคนทีจะมี
่ ตวั เลขของหลักทีหนึ
่ ่ งและ
แฮชฟังคืกอ์ชัtable[
] กทีมี
น ซึงเป็
นหลั
่
้ นได ้เป็ นจานวนมาก
หลักทีสามซ
ากั
6
แฮชฟังก ์ช ัน (Hash Functions)
การบวกหลัก (Folding)
• หลักการของการบวกหลัก คือ การเลือกหลักและนาตัวเลขในหลักนั้ น
มาบวกกัน จากตัวอย่างเช่น นาข ้อมูลตัวตัวจากทุกหลักมาบวกกัน เช่น
ข ้อมูลคือ 001364825 จะได ้ดังนี ้
0 + 0 + 1 + 3 + 6 + 4 + 8 + 2 + 5 = 29
้น คีย ์ในการค ้นหาของ 001364825 ในตารางแฮชคื
ดั
ง
นั
อ ละหลัก
้
• มีข ้อกาหนดของจากการบวกทุกหลักจากทังหมดเก
้าหลักในแต่
table[29]
จะมีข ้อมูลได ้คือ 0 ถึง 9 ดังนั้นตารางแฮชจะเก็บข ้อมูลได ้ระหว่าง 0 ถึง
่มขนาดของตารางแฮช
ข ้อมู
ล (0 < h(คีย ์ในการค ้นหา)
81)บั รูปแบบของการบวก เช่น
• 81
เมื่อเพิ
จะตอ้ <งปร
จัดกลุ่มของหลักและนาขอ้ มูลของหลักในแต่ละกลุ่มมาบวกกัน เป็ น
ต ้น ดังตัวอย่างข ้อมูล 001364825 จะแบ่งข ้อมูลออกเป็ น 3 กลุ่ม แต่
ละกลุม
่ มี 3 หลัก และนามาบวกกันได ้ดังนี ้
001 + 364 + 825 = 1,190
ดังนั้น แฮชฟังก ์ชันจะเก็บข ้อมูลอยู่ระหว่าง 0 < h(คีย ์ในการค ้นหา)
< 3 * 999 = 2,997
7
แฮชฟังก ์ช ัน (Hash Functions)
การหารเอาเศษ (Modulate arithmetic)
• หลัก การหารเอาเศษเป็ นรูป แบบที่ง่ า ยของแฮชฟั ง ก ์ชัน โดยมี
รูปแบบ คือ
h(x) = x mod tableSize
่
เมือ
tableSize
เป็ นขนาดของตารางแฮช
table
• ตัวอย่างเช่น ถ ้า tableSize มีค่าคือ 101 จะไดว้ ่า h(x) = x
mod 101 ทาให ้ค่าตัวเลข x จะอยู่ในช่วง 0 ถึง 100 และจาก
ตัวอย่างข ้อมูล 001364825 จะทาให ้มีคา่ แฮชคือ 12
• จากหลักการ h(x) = x mod tableSize จะพบว่ามักจะมีข ้อมูล
้ น
แฮชในตาแหน่ งที่ table[0] และตาแหน่ งที่ table[1] ซากั
8
แฮชฟังก ์ช ัน (Hash Functions)
่
การเปลียนข้
อความเป็ นต ัวเลข
(Converting a character string to an integer)
• กรณี ที่ คีย ใ์ นการค น
้ หาเป็ นข อ้ ความ เช่น การใช ช
้ อเป็
ื่
นคีย ใ์ นการค น
้ หา
่
่ เ้ ป็ นตัวเลขในแฮชฟังก ์ช ัน h(x) ได ้ โดยสิงแรกที
่
่
สามารถเปลียนข
้อความชือให
ต อ้ งท าคือ เปลี่ยนตัว อัก ษรแต่ ล ะตัวให เ้ ป็ นค่ า ตัว เลข ตัว อย่ า งเช่น ข อ้ ความ
่
่
“NOTE” เมือใช
้รหัส ASCII ของตัวอักษรในการเปลียนเป็
นตัวเลข ได ้เป็ น 78,
79, 84 และ 69 ของตัวอักษร N, O, T และ E ตามลาดับ หรือสามารถใช ้ค่า
่
ตัวเลขระหว่าง 1 ถึง 26 แทนตัวอักษร A ถึง Z ซึงจะได
้ 14, 15, 20 และ 5 ของ
ตัวอักษร N, O, T และ E
• แทนตัวอักษร A ถึง Z ดว้ ยค่าตัวเลข 1 ถึง 26 จากขอ้ ความ “NOTE” จะ
่
เปลียนเป็
นเลขฐานสองได ้ดังนี ้
N เท่ากับ 14 หรือ 01110 ในเลขฐานสอง
O เท่ากับ 15 หรือ 01111 ในเลขฐานสอง
T เท่ากับ 20 หรือ 10100 ในเลขฐานสอง
E เท่ากับ 5 หรือ 00101 ในเลขฐานสอง
เมื่อน าค่ า ตัว เลขฐานสองของข อ้ ความ “NOTE”
มาเรีย งต่ อ กัน จะได ้
01110011111010000101 ซึง่
9
แฮชฟังก ์ช ัน (Hash Functions)
่
การเปลียนข้
อความเป็ นต ัวเลข
(Converting a character string to an integer)
่
• เป็ นการยากในการเปลียนข
้อมูลเลขฐานสองจานวนหลายหลักให ้เป็ นเลขฐานสิบ
่ จารณาจาบิตของเลขฐานสองทีมี
่
ดังนั้นได ้มีหลักการของ Horner’s rule ทีพิ
่ ดมาใช ้ในการเปลียนข
่
จานวนบิตน้อยทีสุ
อ้ ความเป็ นตัวเลข (ตัวอักษร A ถึง Z
่
เท่ากับ 26 ตัว) ซึงจะมี
จานวน 5 บิต ดังนั้น เลขฐานสองคือ 25 คือ 32 ดังนั้น
่
เปลียนตั
วอักษรเป็ นตัวเลขได ้ดังนี ้
(14 * 323) + (15 * 322) + (20 * 321) + (5 * 320) =
474,757
่
แลว้ นาค่าเลขฐานสิบในการเปลียนตั
วอักษรเป็ นตัวเลขไปใช ้แฮชฟังก ์ชนั h(x)
= x mod tableSize เพือ่
หาค่าแอดเดรสในการอ ้างอิงในตารางแฮช
10
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
่
่ ขนาด tableSize
• คีย ์ในการค ้นหาคือ 4567 เพิมเข
้าไปในตารางแฮช table ทีมี
เท่ากับ 101 (แฮชฟังก ์ช ันคือ h(x) = x mod 101) จะได ้ตาแหน่ งใหม่ในตาราง
่ ้จาก 4567 mod 101 เท่ากับ 22) ดังแสดงในรูป
แฮชเท่ากับ table[22] (ซึงได
่ มคี
่ ย ์ในการค ้นหาคือ 7597 ตาแหน่ งในการเพิมข
่ ้อมูลคือ table[22]
5.2 และเมือเพิ
่ นตาแหน่ งทีไม่
่ อนุ ญาตให ้เพิม
่
เช่นกัน (ได ้จาก 7597 mod 101 เท่ากับ 22) ซึงเป็
่
ข ้อมูลในตารางแฮชเนื่องจากเป็ นตาแหน่ งทีชนกั
น
จากปัญหาการชนกันของแฮชคีย ์ จะมีวธิ แี ก ้ไขปัญหา 2 วิธ ี คือ
่
่
1. ใช ้ตาแหน่ งแอดเดรสถัดไปทีใกล
เ้ คียงกับคีย ์แฮชทีหาได
จ้ ากฟังก ์ชน
ั แฮชมาเป็ น
่ ้อมูล
ตาแหน่ งในการเพิมข
่
2. เปลียนโครงสร
้างของตารางแฮชในตาแหน่ ง table[ i ] ให ้สามารถเก็บข ้อมูลได ้
11
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
่
แก้ปัญหาการชนกันด้วยการหาแอดเดรสถัดไปทีใกล
o การแก้ปัญหาแบบลาดบ
ั (Linear probing)
่ ดในการแก ้ปัญหาการชนกันของคีย ์แฮช
 เป็ นรูปแบบทีง่่ ายทีสุ
่
 ใช ้รูปแบบการเลือนต
าแหน่ งแอดเดรสไปยังตาแหน่ งถัดไปในตารางแฮชมาเก็บ
่
่ คอื ตาแหน่ ง
ข ้อมูลแทนตาแหน่ งแอดเดรสทีชนกั
น ซึงก็
table[h(searchKey)+1], table[h(searchKey)+2] ตามลาดับ
่
่
่
่ งไม่เก็บข ้อมูล
 จะเลือนต
าแหน่ งไปเรือยๆ
จนกระทังเจอต
าแหน่ งทียั
12
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
่
แก้ปัญหาการชนกันด้วยการหาแอดเดรสถัดไปทีใกล
o การแก้ปัญหาแบบกาลังสอง (Quadratic probing)
 เป็ นการแก ้ไขปัญหาการชนกันของแฮชคีย ์ด ้วยการปร ับโครงสร ้างการแก ้ปัญหา
แบบลาดับ
่
 แก ้ปัญหาด ้วยการนาคีย ์ยกกาลังสอง เพือตรวจสอบต
าแหน่ ง
table[h(serchKey)+12], table[h(serchKey)+22],
่
่ งไม่เก็บข ้อมูล
table[h(serchKey)+32] จนกระทังเจอต
าแหน่ งทียั
13
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
่
แก้ปัญหาการชนกันด้วยการหาแอดเดรสถัดไปทีใกล
o การทาแฮช 2 ครง้ั (Double hashing)
้ั นการแก ้ปัญหาโดยใช ้คีย ์แบบไม่อส
 การทาแฮช 2 ครงเป็
ิ ระ
่ ้หลักการแก ้ไขปัญหาแบบลาดับ โดยเริมจากหาแอดเดรสที
่
่ ้
 เป็ นโครงสร ้างทีใช
ได
่ ่ ง h1(key) ก่อนและเมือต
่ าแหน่ งทีจากแฮชฟั
่
แฮชฟังก ์ชน
ั ในลาดับทีหนึ
งก ์ชน
ั
้ั ่ 1 มีขอ้ มูลอยู่แลว้ จะหาแฮชฟังก ์ชน
่
่
ครงที
ั ในลาดับทีสอง
h2(key) เพือหา
้ั
ตาแหน่ งแอดเดรสในตาแหน่ งถัดไป โดยมีข ้อกาหนดในการทาแฮช 2 ครงของ
แฮชฟังก ์ช ัน h1(key) และ h2(key) ดังนี ้
h2(key) ≠ 0
h 1 ≠ h2
่ ่ งและลาดับทีสองของแฮช
่
ตัวอย่างเช่น กาหนดให ้ h1 และ h2 เป็ นลาดับทีหนึ
ฟังก ์ช ันดังนี ้
h1(key) = key mod 11
h2(key) = 7 – (key mod 7)
่
เมือตารางแฮชสามารถเก็
บข ้อมูลได ้ 11 ข ้อมูลและถ ้า key = 58 ทาใหแ้ ฮช
คีย ์ h1 อยู่ในตาแหน่ ง 3 (58 mod 11) และ h2 เป็ นการแก ้ไขปัญหาการชนกัน
ด ้วยการหาตาแหน่ งแอดเดรสในลาดับถัดไปคือ 5
(7 – 58 mod 7)
14
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
่
แก้ปัญหาการชนกันด้วยการหาแอดเดรสถัดไปทีใกล
o การทาแฮช 2 ครง้ั (Double hashing)
่
หาแฮชคีย ์ของคีย ์ในการคน้ หา 14 คือ h1(14) = 3 ซึงชนกั
บคีย ์ 58 ดังนั้น
่ ย ์ในการค ้นหาของ 14 ใน
ต ้องหาแฮชคีย ์ในลาดับที่ 2 คือ h2(14) = 7 จึงเพิมคี
ตาแหน่ ง 10 คือ table[3+7] หรือ table[10]
สุดทา้ ยคีย ์ในการค ้นหา 91 คือ h1(91) = 3 และ h2(91) = 7 แต่ table[3]
่ กครอบครองแล ้ว สุดทา้ ยในการหาคีย ์ค ้นหา 91 กลับไป
และ table[10] มีข ้อมูลทีถู
้ั เปลียนคี
่
่ ้จาก
ใช ้ฟังก ์แฮช h1 ใหม่อก
ี ครงแต่
ย ์ทีได
key = h1(91) + h2(91) +
่
่ ย ์ในการค ้นหา 91
h2(91) ซึงจะได
้ 3 + 7 + 7 = 17 ดังนั้น ตาแหน่ งในการเพิมคี
คือ h1(key) = 17 mod 11 = 6 อยู่ใน table[6]
15
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
การแก้ปัญหาการชนกันด้วยวิธก
ี ารปร ับโครงสร ้างตา
o การเก็บข้อมู ลแบบกลุ่ม (Buckets)
่ ยกว่า
 ในแต่ละตารางแฮช table ของแต่ละตาแหน่ ง table[ i ] จะมีอาร ์เรย ์ทีเรี
่ บข ้อมูลแฮชเข ้าไปในแต่ละ table[ i ] ใน
Bucket (กลุ่มข้อมู ล) ทาหน้าทีเก็
อาร ์เรย ์
้ ้าขนาดของ Bucket ทีมี
่ ขนาดเท่ากับ B มีขนาดที่
 แต่ก็อาจจะเกิดปัญหาขึนถ
่
น้อ ยกว่า ขนาดของข อ้ มู ล ที่จะเพิ่มเข า้ ไปในตารางแฮช ซึงจะเกิ
ด การชนของ
ข ้อมูลใน Bucket ได ้
 ดังนั้น จะปรบั ใหข
้ นาดของ Bucket มีขนาดเป็ น B + 1 ในตาแหน่ งอาร ์เรย ์
่ นความคิดทีดี
่ ในการเก็บข ้อมูลในตารางแฮช
เดียวกัน ซึงเป็
16
การแก ้ปัญหาการชนกันของแฮชคีย ์
(Resolving Collision)
การแก้ปัญหาการชนกันด้วยวิธก
ี ารปร ับโครงสร ้างตา
่
o การแยกออกจากกน
ั ด้วยการเชือมโยง
(Separate Chaining)
่
 การแยกออกจากกันด ว้ ยการเชือมโยง
(Separate
Chaining) เป็ นอีก
ทางเลือกหนึ่ งในการออกแบบตารางแฮชดว้ ยการใช ้อาร ์เรย ์ของลิงค ์ลิสต ใ์ น
การเก็บข ้อมูล
้ นรูปแบบการแก ้ปัญหาการชนกันด ้วยการกาหนดให ้ในแต่ละ table[ i ]
 วิธน
ี ี เป็
่ ้ในการเชือมโยงข
่
ทาหน้าทีอ่ ้างอิงไปยัง ลิงค ์ลิสต ์เพือใช
้อมูล
17
แฮช (Hash)
่ ้อมูลในแฮชแบบแยกออกจาก
ตวั อย่างที่ 8.1 โค ้ดรหัสเทียมการเพิมข
่
:Initialize
array of linked list
กั1นด//hashTable
้วยการเชื
อมโยง
+inserthash(in hashTable:HashTable,in key:keyType,in value:TreeItemType)
2
3
4
5
6
7
8
entry = key.hashCode() mod numBuckets
if (hashTable[entry] is null){
hashTable[entry] = new linked list
hashTable[entry].add(key,value)
}else{
hashTable[entry].add(key,value)
}
ต ัวอย่างที่ 8.2 โค ้ดรหัสเทียมค ้นหาข ้อมูลในแฮช
1
2
3
4
5
6
7
+searchhash(in hashTable:HashTable,in key:keyType):boolean
entry = key.hashCode() mod numBuckets;
if (hashTable[entry] is null){
retrun null
}else{
return hashTable[entry].search(key);
}
18
้
่8
สรุปเนื อหาบทที
• แฮชเป็ นการจัด การข อ้ ความหรือ ข อ้ มู ลโดยการเปลี่ยนให เ้ ป็ นดัช นี
่ แ้ ฮช
(index) เพื่ อใช อ้ า้ งอิง ข อ้ มู ลในอาร ์เรย ห
์ รือ ฐานข อ้ มู ล ซึงใช
่
ฟังก ์ชันในการเปลียนข
้อความหรือข ้อมูลเป็ นคีย ์ในการอา้ งอิงใน แฮท
เทเบิล
่
• แฮชฟั งก ์ชันมีหลายวิธใี นเปลียนตั
วเลขใหเ้ ป็ นคีย ์ และเมื่อไดค้ ย
ี ์จาก
่
แฮชฟังก ์ชันแล ้วอาจจะมีคยี ์ทีชนกั
นได ้
• การชนกัน คือ ตาแหน่ งของคีย ์ทีได ้จากแฮชฟังก ์ชันมีข ้อมูลอยู่แล ้ว
• การแก ้ปัญหาการชนกันของคีย ์มี 2 วิธ ี คือ
o การหาตาแหน่ งใหม่ทว่ี่ างแล ้วนาข ้อมูลนั้นไปเก็บไว ้ในคีย ์
o การปรบั โครงสร ้างแฮทเทเบิลโดยนาอาร ์เรย ์มาเก็บคีย ์และนาลิงค ์
่
่ าหน้าทีเก็
่ บข ้อมูล
ลิสต ์มาเชือมโยงกั
บอาร ์เรย ์เพือท
19