1 / 30

ตารางแฮช

ตารางแฮช. Hash Table. แนวคิดพื้นฐานของตารางแฮช. เป็นโครงสร้างที่มีประสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และการลบข้อมูล โดย ไม่มีการดำเนินการที่เกี่ยวกับลำดับของข้อมูล

Download Presentation

ตารางแฮช

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ตารางแฮช Hash Table

  2. แนวคิดพื้นฐานของตารางแฮชแนวคิดพื้นฐานของตารางแฮช เป็นโครงสร้างที่มีประสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และการลบข้อมูล โดยไม่มีการดำเนินการที่เกี่ยวกับลำดับของข้อมูล อาศัยฟังก์ชันการคำนวณเลขที่อยู่ของข้อมูล ที่เรียกว่า “ฟังก์ชันแฮช”(Hash Function) ซึ่งมีหน้าที่แปลงคีย์ของข้อมูลไปเป็นเลขที่อยู่ (Address) ในช่องในตารางแฮช ฟังก์ชันแฮชที่ดีจะใช้สามารถคำนวณเลขที่อยู่ได้รวดเร็ว มีพฤติกรรมกระจายอย่างสม่ำเสมอ และแปลงคีย์ไปเป็นเลขที่อยู่ของตารางที่มีขนาดเล็ก

  3. Hashing เป็นเทคนิคการสร้างตารางเก็บค่าคีย์แบบหนึ่ง ช่วยให้สามารถค้นหาข้อมูลในตารางนั้นได้ง่ายและรวดเร็วยิ่งขึ้น โดยอาศัยเทคนิคของการแปลงค่าคีย์เป็นเลขที่อยู่ (Address)ของข้อมูลนั้นในตาราง Hashing Function Address Key

  4. คุณสมบัติของฟังก์ชันแฮชที่ดีคุณสมบัติของฟังก์ชันแฮชที่ดี คํานวณตำแหน่งที่อยูไดรวดเร็ว ในเวลาคงตัว (เวลาแปรตามขนาดของคีย์) สามารถกระจายค่าตำแหน่งที่อยู่ต่าง ๆ ที่ไม่ซ้ำกัน หรือ ซ้ำกันน้อยที่สุด

  5. HashingFunction • Division Hashing • Digit Hashing • Mid Square Hashing • Fold Hashing • Fold Shift • Boundary Shift • Rotation Hashing

  6. Division Hashing

  7. Key Concept เป็นฟังก์ชันโมดูลาในรูปแบบ K mod N ตำแหน่งที่อยู่ (Address) คือ ค่าเศษที่เหลือจากการหาร K/N K modN + L0 Key Address H(K) = K modN + L0 K คือ ค่าคีย์ของข้อมูล Nคือ ขนาดของตาราง L0คือ ค่าคงที่ที่ปรับเพื่อปรับค่าตำแหน่งที่อยู่เริ่มต้น

  8. Ex. ให้คำนวณหาตำแหน่งของคีย์ต่อไปนี้ กำหนดให้ใช้ตารางแฮชขนาด 7 และมีตำแหน่งที่อยู่เริ่มต้นเป็น 0 เทคนิคDivision Hashing

  9. Division Hashing :: Example H(K) = K mod 7 เกิดการซ้ำกันของคีย์ที่ได้จากการคำนวณทั้งหมด 4 ครั้ง

  10. Digit and Mid Square Hashing

  11. Digit Hashing :: Key Concept เป็นการเลือกค่าคีย์มาจากบางตำแหน่งเท่านั้น เช่น ค่าคีย์มีทั้งหมด 6 ตำแหน่ง แต่ต้องการจัดเก็บในตารางแฮชเพียง 3 ตำแหน่ง อาจเลือกตำแหน่งที่ 1, 3 และ 4 มาเป็นค่าเลขที่อยู่ในตารางแฮช เทคนิคDigit Hashing

  12. Mid Square Hashing :: Key Concept นำค่าคีย์มายกกำลังสองตัดค่าด้านซ้ายและขวาออก k หลัก k = 4 เทคนิคMid Square Hashing

  13. Digit Square เป็นการใช้เทคนิค Digit Hashing ร่วมกับ Mid SquareHashing เทคนิคDigit Square Hashing

  14. Fold Hashing

  15. Key Concept • แบ่งคีย์ออกเป็นส่วนๆ แล้วนำส่วนต่างๆ เหล่านี้มา "รวม" กัน • Summation • Exclusive OR • Fold Hashing มี 2 วิธีได้แก่ • Fold Shift • Boundary Shift เทคนิคFold Hashing

  16. Fold Shift :: Summation กำหนดให้แบ่งกลุ่ม ๆ กลุ่มละ 3 หลัก Key 2 2 1 7 3 6 5 2 2 1 7 3 6 5 7 3 6 5 Address 9 6 2 เทคนิคFold Shift Hashing

  17. Boundary Shift :: Summation กำหนดให้แบ่งกลุ่ม ๆ กลุ่มละ 3 หลัก Key 2 2 1 7 3 6 5 2 2 1 7 3 6 5 6 3 7 5 Address 3 5 8 เทคนิคBoundary Shift Hashing

  18. Rotation Hashing

  19. Rotation Hashing 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 Right Rotation Left Rotation

  20. เทคนิคการเลือกใช้ Hashing Function จะต้องคำนึงถึงสิ่งต่อไปนี้ ค่า H(K) ที่ใช้ต้องเป็นฟังก์ชันที่คำนวณง่าย ไม่เสียเวลามาก Address ที่ได้จาก H(K) ต้องทำให้เกิดการซ้ำกันน้อยที่สุด ขนาดของตารางควรมีขนาดใหญ่กว่า ขนาดของข้อมูลชุดที่มีอยู่จริง ๆ เพราะถ้าช่วงฟังก์ชันมีขนาดใหญ่ ย่อมทำให้โอกาสที่จะเกิดการชนกันน้อยลง

  21. การชนกันของคีย์และการแก้ปัญหาการชนกันของคีย์และการแก้ปัญหา

  22. การชนกันของคีย์ (Collision) การชนกันของคีย์ คือ การที่นำคีย์ไปผ่าน Hashing Function แล้วได้ตำแหน่งแอดเดรสเป็นค่าเดียวกัน H(k1) = H(k2) เมื่อเกิดการชนกันขึ้น ( collision) ระหว่าง k1 และ k2 โดยมีฟังก์ชัน H เป็นตัวแปลงค่า เราต้องมีวิธีจัดการกับเหตุการณ์นี้ เพื่อให้ k1 และ k2 สามารถอยู่รวมกันได้ โดยต้องหาที่อยู่ให้กับ k1 และ k2ใหม่แล้วแต่ว่าใครมาก่อนมาหลัง

  23. การแก้ปัญหาการชนกันของคีย์การแก้ปัญหาการชนกันของคีย์ เทคนิคเพื่อจัดการกับการชนกันที่นิยมใช้มาก มี 2 เทคนิค คือ • Chainingเป็นหลักการที่ใช้พอย์เตอร์แบบลิงค์ลิสต์หรือใช้แอดเดรสถัด ๆ ไปในอาร์เรย์ • chain มีขนาดคงที่ • chain มีขนาดไม่เท่ากัน (ขนาดขึ้นกับจำนวนคีย์ที่อยู่ใน chain นั้น) • Rehashing ( Open Addressing )

  24. Chaining :: ขนาดคงที่ แบ่งตารางข้อมูลที่ใช้ถูกแบ่งออกเป็นส่วน ๆ (bucket)จำนวน n bucket แต่ละ bucket มีขนาด m ช่อง ถ้าคีย์ใดมีแอดเดรสซ้ำกัน ให้เก็บในตำแหน่งถัดไปใน Bucket เดียวกัน ถ้า bucket ใดถูกใช้จนหมด (Bucket เต็ม) ให้ถ่ายเทไปอยู่ในส่วน overflow ซึ่งอาจเป็นอีกอาร์เรย์หนึ่ง หรืออาจเป็น bucket ที่ถัดจาก bucket n โดยอาจมีมากกว่า 1 bucket

  25. Chaining :: ขนาดคงที่ ตัวอย่าง จงแปลงคีย์ต่อไปนี้ให้เป็นแอดเดรส และให้หลีกเลี่ยงการชนโดยใช้ Bucket โดยกำหนดให้แต่ละ Bucket มี 4 ช่อง และตารางนี้มีทั้งหมด 5 Bucket ฟังก์ชันที่ใช้คือ H(K)= K mod 5+1 ชุดคีย์ ( 42 , 51, 82, 14, 2, 15, 5, 6, 62, 25, 37, 21)

  26. Chaining :: ขนาดคงที่ Bucket#เต็ม

  27. Chaining :: ขนาดไม่คงที่ จะอาศัย linked list ขนาด n ตัว แต่ละตัวสำหรับค่า address ค่าหนึ่ง แต่ละโหนดที่เก็บค่าคีย์ จะมี 2 ส่วนคือ สำหรับเก็บคีย์ และ ส่วนเก็บพอยน์เตอร์ ตัวอย่าง จงสร้างตารางสำหรับ key ต่อไปนี้ ชุดคีย์ ( 42 , 49 , 82, 14, 2, 15, 5, 6 )กำหนดฟังก์ชั่น H(K)= Kmod7+1 ให้ใช้หลักการหลีกเลี่ยงการชนกันแบบ chaining (ขนาดไม่คงที่) H(42) = 1 H(2) = 3 H(49) = 1 H(15) = 2 H(82) = 6 H(5) = 6 H(14) = 1 H(6) = 7

  28. 5 42 15 2 82 6 49 14 Chaining :: ขนาดไม่คงที่ H(K)= Kmod7+1 1 2 3 4 5 6 7

  29. Rehashing เป็นเทคนิคหนึ่งใช้หลักการ Open Addressing “ถ้าเกิดการชนกันขึ้นระหว่างคีย์ K1 และ K2 เนื่องจากการใช้ฟังก์ชันแฮชชิ่ง H1 ให้ทำการคำนวณที่อยู่ของ K2 ใหม่ โดยใช้ ฟังก์ชันแฮชชิ่ง H2” K -------- > H1(K) -------- > H2 (H1(K)) ฟังก์ชัน H2 อาจเป็นฟังก์ชันใหม่หรือเหมือนกับ H1 ก็ได้

  30. H(K)= Kmod7+1

More Related