ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
ตารางแฮช Hash Table
2
แนวคิดพื้นฐานของตารางแฮช
เป็นโครงสร้างที่มีประสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และ การลบข้อมูล โดยไม่มีการดำเนินการที่เกี่ยวกับลำดับของข้อมูล อาศัยฟังก์ชันการคำนวณเลขที่อยู่ของข้อมูล ที่เรียกว่า “ฟังก์ชันแฮช” (Hash Function) ซึ่งมีหน้าที่แปลงคีย์ของข้อมูลไปเป็นเลขที่อยู่ (Address) ในช่องในตารางแฮช ฟังก์ชันแฮชที่ดีจะใช้สามารถคำนวณเลขที่อยู่ได้รวดเร็ว มีพฤติกรรมกระจาย อย่างสม่ำเสมอ และแปลงคีย์ไปเป็นเลขที่อยู่ของตารางที่มีขนาดเล็ก
3
Hashing เป็นเทคนิคการสร้างตารางเก็บค่าคีย์แบบหนึ่ง ช่วยให้สามารถค้นหาข้อมูลใน ตารางนั้นได้ง่ายและรวดเร็วยิ่งขึ้น โดยอาศัยเทคนิคของการแปลงค่าคีย์เป็น เลขที่อยู่ (Address) ของข้อมูลนั้นในตาราง Hashing Function Key Address
4
คุณสมบัติของฟังก์ชันแฮชที่ดี
คํานวณตำแหน่งที่อยูไดรวดเร็ว ในเวลาคงตัว (เวลาแปรตามขนาดของคีย์) สามารถกระจายค่าตำแหน่งที่อยู่ต่าง ๆ ที่ไม่ซ้ำกัน หรือ ซ้ำกันน้อยที่สุด
5
Hashing Function 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 mod N + L0 Key Address H(K) = K mod N + L0 K คือ ค่าคีย์ของข้อมูล N คือ ขนาดของตาราง L0 คือ ค่าคงที่ที่ปรับเพื่อปรับค่าตำแหน่งที่อยู่เริ่มต้น
8
Ex. ให้คำนวณหาตำแหน่งของคีย์ต่อไปนี้
กำหนดให้ใช้ตารางแฮชขนาด 7 และมีตำแหน่งที่อยู่เริ่มต้นเป็น 0 Address ?? Key 31 42 51 14 12 3 7 17 Data cat rat bat toy man big boy zoo เทคนิค Division Hashing
9
Division Hashing :: Example
Key :: K 31 42 51 14 12 3 7 17 Address 3 2 5 Hash Table 42, 14, 7 1 2 51 3 31, 3, 17 4 5 12 6 H(K) = K mod 7 เกิดการซ้ำกันของคีย์ที่ได้จากการคำนวณทั้งหมด 4 ครั้ง
10
Digit and Mid Square Hashing
11
Digit Hashing :: Key Concept
เป็นการเลือกค่าคีย์มาจากบางตำแหน่งเท่านั้น เช่น ค่าคีย์มีทั้งหมด 6 ตำแหน่ง แต่ต้องการจัดเก็บในตารางแฮชเพียง 3 ตำแหน่ง อาจเลือกตำแหน่งที่ 1, 3 และ 4 มาเป็นค่าเลขที่อยู่ในตารางแฮช Key ตำแหน่ง 1, 3 และ 4 Address 379452 394 121276 112 378845 388 160252 102 045128 051 เทคนิค Digit Hashing
12
Mid Square Hashing :: Key Concept
Address 379452 8382 121276 0789 378845 2353 160252 8070 045128 3653 เทคนิค Mid Square Hashing
13
Digit Square เป็นการใช้เทคนิค Digit Hashing ร่วมกับ Mid Square Hashing
Key Square (1, 3, 5, 7) Address 379452 1388 121276 0408 378845 1325 160252 0587 045128 0235 เทคนิค 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 Left Rotation Right Rotation 3 7 9 4 5 2 3 7 9 4 5 2
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 :: ขนาดคงที่ 15 5 25 51 6 21 42 82 2 62 14 Bucket#เต็ม 37
Overflow Key H(K) 42 3 51 2 82 3* 14 5 3** 15 1 1* 6 2* 62 3*** 25 1** 37 3**** 21 2** Bucket#เต็ม
27
Chaining :: ขนาดไม่คงที่
จะอาศัย 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(15) = 2 H(82) = 6 H(5) = 6 H(14) = 1 H(6) = 7
28
Chaining :: ขนาดไม่คงที่
H(K) = K mod 7 +1 Key H(K) 42 1 49 82 6 14 2 3 15 5 7 1 42 49 14 2 15 3 2 4 5 6 82 5 7 6
29
K -------- > H1 (K) -------- > H2 (H1 (K) )
Rehashing เป็นเทคนิคหนึ่งใช้หลักการ Open Addressing “ถ้าเกิดการชนกันขึ้นระหว่างคีย์ K1 และ K2 เนื่องจากการใช้ฟังก์ชันแฮชชิ่ง H1 ให้ทำการคำนวณที่อยู่ของ K2 ใหม่ โดยใช้ ฟังก์ชันแฮชชิ่ง H2” K > H1 (K) > H2 (H1 (K) ) ฟังก์ชัน H2 อาจเป็นฟังก์ชันใหม่หรือเหมือนกับ H1 ก็ได้
30
H(K) = K mod 7 +1 Key H(K) 42 1 49 82 6 14 2 3 15 5 7 Key 1 42 2 3 4 5
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.