ตารางแฮช HASH TABLE แนวคิดพื้นฐานของตารางแฮช เป็ นโครงสร้างที่มปี ระสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และ การลบข้อมูล โดยไม่มีการดาเนิ นการที่เกี่ยวกับลาดับของข้อมูล อาศัยฟังก์ชนั การคานวณเลขที่อยูข่ องข้อมูล ที่เรียกว่า “ฟั งก์ชนั แฮช” (Hash Function) ซึ่งมีหน้าที่แปลงคียข์ องข้อมูลไปเป็นเลขที่อยู.
Download ReportTranscript ตารางแฮช HASH TABLE แนวคิดพื้นฐานของตารางแฮช เป็ นโครงสร้างที่มปี ระสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และ การลบข้อมูล โดยไม่มีการดาเนิ นการที่เกี่ยวกับลาดับของข้อมูล อาศัยฟังก์ชนั การคานวณเลขที่อยูข่ องข้อมูล ที่เรียกว่า “ฟั งก์ชนั แฮช” (Hash Function) ซึ่งมีหน้าที่แปลงคียข์ องข้อมูลไปเป็นเลขที่อยู.
ตารางแฮช 1 HASH TABLE แนวคิดพื้นฐานของตารางแฮช 2 เป็ นโครงสร้างที่มปี ระสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และ การลบข้อมูล โดยไม่มีการดาเนิ นการที่เกี่ยวกับลาดับของข้อมูล อาศัยฟังก์ชนั การคานวณเลขที่อยูข่ องข้อมูล ที่เรียกว่า “ฟั งก์ชนั แฮช” (Hash Function) ซึ่งมีหน้าที่แปลงคียข์ องข้อมูลไปเป็นเลขที่อยู ่ (Address) ในช่องในตารางแฮช ฟังก์ชนั แฮชที่ดจี ะใช้สามารถคานวณเลขที่อยูไ่ ด้รวดเร็ว มีพฤติกรรมกระจาย อย่างสม่ าเสมอ และแปลงคียไ์ ปเป็นเลขที่อยูข่ องตารางที่มขี นาดเล็ก Hashing 3 เป็นเทคนิ คการสร้างตารางเก็บค่าคียแ์ บบหนึ่ ง ช่วยให้สามารถค้นหาข้อมูลใน ตารางนั้นได้งา่ ยและรวดเร็วยิ่งขึ้น โดยอาศัยเทคนิ คของการแปลงค่าคียเ์ ป็ น เลขที่อยู่ (Address) ของข้อมูลนั้นในตาราง Key Hashing Function Address คุณสมบัติของฟั งก์ชนั แฮชที่ดี 4 คานวณตาแหน่งที่อยู ได รวดเร็ว ในเวลาคงตัว (เวลาแปรตามขนาดของคีย)์ สามารถกระจายค่าตาแหน่งที่อยูต่ า่ ง ๆ ที่ไม่ซา้ กัน หรื อ ซา้ กันน้อยที่สด Hashing Function 5 Division Hashing Digit Hashing Mid Square Hashing Fold Hashing Fold Shift Boundary Shift Rotation Hashing Division Hashing 6 Key Concept 7 เป็ นฟังก์ชนั โมดูลาในรู ปแบบ K mod N ตาแหน่งที่อยู ่ (Address) คือ ค่าเศษที่เหลือจากการหาร K/N Key K mod N + L0 Address H(K) = K mod N + L0 K N L0 คือ ค่าคีย์ของข้อมูล คือ ขนาดของตาราง คือ ค่าคงทีท ่ ป ี่ รับเพือ ่ ปรับค่าตาแหน่ งทีอ่ ยูเ่ ร่ม ่ ต้น Ex. ให้คานวณหาตาแหน่ งของคียต์ ่อไปนี้ 8 กาหนดให้ใช้ตารางแฮชขนาด 7 และมีตาแหน่งที่อยูเ่ ริ่ มต้นเป็น 0 Address ?? ?? ?? ?? ?? ?? ?? ?? Key 31 42 51 14 12 3 7 17 Data cat rat bat toy man big boy zoo เทคนิ ค Division Hashing Division Hashing :: Example Address9 31 42 51 14 12 3 7 17 3 0 2 0 5 3 0 3 H(K) = K mod 7 Key :: K Hash Table 0 42, 14, 7 1 2 51 3 31, 3, 17 4 5 6 เกิดการซา้ กันของคียท์ ่ีได้จากการคานวณทัง้ หมด 4 ครัง้ 12 Digit and Mid Square Hashing 10 Digit Hashing :: Key Concept 11 เป็ นการเลือกค่าคียม์ าจากบางตาแหน่งเท่านั้น เช่น ค่าคียม์ ที งั้ หมด 6 ตาแหน่ง แต่ตอ้ งการจัดเก็บในตารางแฮชเพียง 3 ตาแหน่ง อาจเลือกตาแหน่งที่ 1, 3 และ 4 มาเป็นค่าเลขที่อยูใ่ นตารางแฮช Key 379452 121276 378845 160252 045128 ตาแหน่ ง 1, 3 และ 4 3 1 3 1 0 79 21 78 60 45 4 2 8 2 1 52 76 45 52 28 Address 394 112 388 102 051 เทคนิ ค Digit Hashing Mid Square Hashing :: Key Concept 12 นาค่าคียม์ ายกกาลังสองตัดค่าด้านซ้ายและขวาออก k หลัก k=4 Key Square Address 379452 121276 378845 160252 045128 143983820304 014707868176 143523534025 025680703504 002036536384 8382 0789 2353 8070 3653 เทคนิ ค Mid Square Hashing Digit Square 13 เป็ นการใช้เทคนิ ค Digit Hashing ร่วมกับ Mid Square Hashing Key Square (1, 3, 5, 7) Address 379452 121276 378845 160252 045128 143983820304 014707868176 143523534025 025680703504 002036536384 1388 0408 1325 0587 0235 เทคนิ ค Digit Square Hashing Fold Hashing 14 Key Concept 15 แบ่งคียอ์ อกเป็ นส่วนๆ แล้วนาส่วนต่างๆ เหล่านี้มา "รวม" กัน Summation Exclusive OR Fold Hashing มี 2 วิธไี ด้แก่ Fold Shift Boundary Shift เทคนิ ค Fold Hashing Fold Shift :: Summation 16 กาหนดให้แบ่งกลม่ ๆ กลม่ ละ 3 หลัก 2 2 1 7 3 6 5 2 2 1 7 3 6 5 7 3 6 5 9 6 2 เทคนิ ค Fold Shift Hashing Boundary Shift :: Summation 17 กาหนดให้แบ่งกลม่ ๆ กลม่ ละ 3 หลัก 2 2 1 7 3 6 5 2 2 1 7 3 6 5 6 3 7 5 8 5 3 เทคนิ ค Boundary Shift Hashing Rotation Hashing 18 Rotation Hashing 19 3 7 9 4 5 2 3 7 9 4 5 2 2 3 7 9 4 5 7 9 4 5 2 3 2 3 7 9 4 5 7 9 4 5 2 3 เทคนิ ค Rotation Hashing เทคนิ คการเลือกใช้ Hashing Function 20 จะต้องคานึ งถึงสิ่งต่อไปนี้ ค่า H(K) ที่ใช้ตอ้ งเป็ นฟังก์ชนั ที่คานวณง่าย ไม่เสียเวลามาก Address ที่ได้จาก H(K) ต้องทาให้เกิดการซา้ กันน้อยที่สด ขนาดของตารางควรมีขนาดใหญ่กว่า ขนาดของข้อมูลชดที่มอี ยูจ่ ริ ง ๆ เพราะถ้า ช่วงฟังก์ชนั มีขนาดใหญ่ ย่อมทาให้โอกาสที่จะเกิดการชนกันน้อยลง การชนกันของคียแ์ ละการแก้ปัญหา 21 การชนกันของคีย ์ (Collision) 22 การชนกันของคีย ์ คือ การที่นาคียไ์ ปผ่าน Hashing Function แล้ว ได้ตาแหน่ งแอดเดรสเป็ นค่าเดียวกัน H(k1) = H(k2) เมื่อเกิดการชนกันขึ้น ( collision) ระหว่าง k1 และ k2 โดยมี ฟังก์ชนั H เป็นตัวแปลงค่า เราต้องมีวิธจี ดั การกับเหตการณ์น้ ี เพื่อให้ k1 และ k2 สามารถอยูร่ วมกันได้ โดยต้องหาที่อยู่ให้กบั k1 และ k2 ใหม่แล้วแต่วา่ ใครมาก่อนมาหลัง การแก้ปัญหาการชนกันของคีย ์ 23 เทคนิ คเพื่อจัดการกับการชนกันที่นิยมใช้มาก มี 2 เทคนิ ค คือ 1. Chaining เป็นหลักการที่ใช้พอย์เตอร์แบบลิงค์ลิสต์หรื อใช้แอดเดรสถัด ๆ ไปในอาร์เรย์ 1. chain มีขนาดคงที่ 2. chain มีขนาดไม่เท่ากัน (ขนาดขึ้นกับจานวนคียท์ ่ อี ยูใ่ น chain นั้น) 2. Rehashing ( Open Addressing ) Chaining :: ขนาดคงที่ 24 แบ่งตารางข้อมูลที่ใช้ถูกแบ่งออกเป็ นส่วน ๆ (bucket) จานวน n bucket แต่ละ bucket มีขนาด m ช่อง ถ้าคียใ์ ดมีแอดเดรสซา้ กัน ให้เก็บในตาแหน่งถัดไปใน Bucket เดียวกัน ถ้า bucket ใดถูกใช้จนหมด (Bucket เต็ม) ให้ถา่ ยเทไปอยูใ่ นส่วน overflow ซึ่งอาจเป็นอีกอาร์เรย์หนึ่ ง หรื ออาจเป็น bucket ที่ถดั จาก bucket n โดยอาจมีมากกว่า 1 bucket Chaining :: ขนาดคงที่ 25 ตัวอย่าง จงแปลงคียต์ อ่ ไปนี้ให้เป็นแอดเดรส และให้หลีกเลี่ยงการชนโดยใช้ Bucket โดยกาหนดให้แต่ละ Bucket มี 4 ช่อง และตารางนี้มที งั้ หมด 5 Bucket ฟังก์ชนั ที่ใช้คือ H(K) = K mod 5+1 ชดคีย ์ ( 42 , 51, 82, 14, 2, 15, 5, 6, 62, 25, 37, 21) 15 ่ Chaining :: ขนาดคงที Bucket#1 26 Key H(K) 42 3 51 2 82 3* 14 5 2 3** 15 1 5 1* 6 2* 62 3*** 25 1** 37 3**** 21 2** Bucket#2 Bucket#3 5 25 Overflow 51 6 21 42 82 2 62 Bucket#4 14 Bucket#5 37 Bucket#เต็ม Chaining :: ขนาดไม่คงที่ 27 จะอาศัย linked list ขนาด n ตัว แต่ละตัวสาหรับค่า address ค่าหนึ่ ง แต่ละโหนดที่เก็บค่า คีย ์ จะมี 2 ส่วนคือ สาหรับเก็บคีย ์ และ ส่วนเก็บพอยน์เตอร์ ตัวอย่าง จงสร้างตารางสาหรับ key ต่อไปนี้ ชดคีย ์ ( 42 , 49 , 82, 14, 2, 15, 5, 6 ) กาหนดฟังก์ชน่ั H(K) = K mod 7 +1 ให้ใช้หลักการหลีกเลี่ยงการชนกันแบบ chaining (ขนาดไม่คงที่) H(42) = 1 H(2) =3 H(49) = 1 H(82) = 6 H(14) = 1 H(15) H(5) H(6) =2 =6 =7 Chaining :: ขนาดไม่คงที่ H(K) = K mod 7 +1 1 42 2 15 3 2 Key H(K) 42 1 49 1 82 6 14 1 2 3 4 15 2 5 5 6 6 7 6 82 7 6 49 14 5 28 Rehashing 29 เป็ นเทคนิ คหนึ่ งใช้หลักการ Open Addressing “ถ้าเกิดการชนกันขึ้นระหว่างคีย ์ K1 และ K2 เนื่ องจากการใช้ฟงั ก์ชนั แฮชชิ่ง H1 ให้ทาการคานวณที่อยูข่ อง K2 ใหม่ โดยใช้ ฟังก์ชนั แฮชชิ่ง H2” K -------- > H1 (K) -------- > H2 (H1 (K) ) ฟังก์ชนั H2 อาจเป็ นฟังก์ชนั ใหม่หรื อเหมือนกับ H1 ก็ได้ H(K) = K mod 7 +1 30 Key Key H(K) 42 1 1 49 1 2 82 6 3 14 1 4 2 3 5 15 2 6 5 6 7 6 7 42