ตารางแฮช HASH TABLE แนวคิดพื้นฐานของตารางแฮช เป็ นโครงสร้างที่มปี ระสิทธิภาพต่อการจัดเก็บข้อมูลเพื่อการค้นหา การเพิ่ม และ การลบข้อมูล โดยไม่มีการดาเนิ นการที่เกี่ยวกับลาดับของข้อมูล อาศัยฟังก์ชนั การคานวณเลขที่อยูข่ องข้อมูล ที่เรียกว่า “ฟั งก์ชนั แฮช” (Hash Function) ซึ่งมีหน้าที่แปลงคียข์ องข้อมูลไปเป็นเลขที่อยู.
Download
Report
Transcript ตารางแฮช 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