ตารางแฮช 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