Upload
tumetr
View
275
Download
0
Embed Size (px)
Citation preview
การคนหาขอมล (Searching) การคนหาขอมลจะมประสทธภาพมากนอย
เพยงใด ขนอยกบขนตอนวธการคนหาขอมล เปนสำาคญ การคนหาขอมลมหลายวธ แตละ
วธกมขอดขอเสยดวยกนทงสน และยงเหมาะ สมเฉพาะงาน ซงในจะแสดงวธการคนหา
ขอมล 3 วธดวยกนคอ การคนหาแบบลำาดบ (Sequential search) การคนหาแบบทวภาค (Binary search) การคนหาแบบแฮช (Hashing search)
การคนหาแบบลำาดบ (Sequential search) Sequential search เปนกรรมวธคนหาขอมลทงาย
ทสด และสามารถกระทำาบนโครงสรางขอมลทถกจด เรยงหรอไมกได
หลกการของ Sequential search คอ เอาคาขอมลทตองการหาตำาแหนงในโครงสราง ไปไลเทยบขอมลในโครงสรางทละตวตามลำาดบ
การคนหาแบบลำาดบ (Sequential search) KEY = 54 (มข อม ล)
i = 0
not found
3 7 12 25 32 48 54 78
0 1 2 3 4 5 6 7
k
i = i + 1
not found
not found
not found
not found
not found
found
i = i + 1 i = i + 1 i = i + 1 i = i + 1 i = i + 1
i = 6
Comparison time(s)1234567
3 7 12 25 32 48
การคนหาแบบลำาดบ (Sequential search) KEY = 99 (ไม ม ข อม ล)
i = 0
not found
3 7 12 25 32 48 54 78
0 1 2 3 4 5 6 7
k
i = i + 1
not found
not found
not found
not found
not found
notfound
i = i + 1 i = i + 1 i = i + 1 i = i + 1 i = i + 1
Comparison time(s)1234567
3 7 12 25 32 48 54
i = i + 1
notfound
8
78
NOT FOUND…!!!
การคนหาแบบลำาดบ (Sequential search) จำานวนครงของการเปรยบเทยบ
หาเจอเมอเปรยบเทยบครงแรกเจอ = O (1) ไมมขอมลนนอย = O (n) คาเฉลยของจำานวนครงของการคนหาเมอไฟลขนาด N
คอ O (N/2)
การคนหาแบบลำาดบ (Sequential search) ขนตอนวธขางตนของการคนหาแบบเรยงลำาดบจะ
เหมาะกบการคนหาคาในชดขอมลทไมไดเรยง แตถาขอมลเรยงเรยบรอยแลว จะมขอเสยบาง
ประการคอ กรณทคนหาไมพบ แมวาเมอคน target ในชดขอมลจนถงตวทมคามากกวา target แลว
การคนหายงไมยตการคน ยงคงวนรอบเพอเปรยบ เทยบขอมลจนถงตวสดทายในชดขอมล ทำาใหเสย
เวลา
การคนหาแบบลำาดบ (Sequential search) การปรบปรงประสทธภาพการคนหาแบบลำาดบ
การคนหาขอมลแบบลำาดบดวยเทคนคการเรยงลำาดบ ขอมล เรยงลำาดบขอมลจากนอยไปหามาก
การคนหาขอมลแบบลำาดบดวยเทคนคเซลฟรออรเดอร รง (Self Reordering) ปรบปรงขนตอนวธการคนหา
โดยการคนหาขอมลจะหยดทำาการคนหาเมอพบวาคยทใชคนมคานอยกวาขอมลในชดขอมล
การคนหาแบบลำาดบแบบปรบปรง KEY = 29 (ไม ม ข อม ล)
i = 0
not found
3 7 12 25 32 48 54 78
0 1 2 3 4 5 6 7
k
i = i + 1
not found
not found
not found
K[i] > keyStop..!!
i = i + 1 i = i + 1 i = i + 1
Comparison time(s)1234
3 7 12 25 32
NOT FOUND…!!!5
การคนหาแบบทวภาค (Binary Search) เปนการคนหากบขอมลทถกเรยงลำาดบแลว ปญหากรณทขอมลจำานวนมากจะตองเสยเวลาในการเรยง
ขนตอนในการคนหาขอมลมดงน กำาหนด หรอรบขอมลทตองการคนหา แบงครงแฟมขอมลหรอแถวลำาดบขอมล ทำาการเปรยบเทยบขอมลในแฟมขอมลหรอแถวลำาดบ
ขอมล โดยแบงครงลงไปเรอยๆ จนกวาจะพบหรอไม สามารถแบงไดอกตอไป นนหมายความวาไมพบขอมล
นนแนนอน
การคนหาแบบทวภาค (Binary Search)
ครงท 1 เปรยบเทยบคา key = 20 กบขอมลทอยกงกลางของ list พบวา คา key มคามากกวาคากงกลางของขอมล ดงนนไปคนหาขอมลตอในสวนท 2
2 4 5 9 12 20 270 1 2 3 4 5 6
2 4 5 9 12 20 270 1 2 3 4 5 6
low upper
mid = (low+upper)/2 = (0+6)/2 = 3
9
ขอมลสวนท 1 ขอมลสวนท 2
Key = 20
การคนหาแบบทวภาค (Binary Search) ครงท 2 เปร ยบเท ยบคา key = 20 กบข อม ลท
อยก งกลางของขอม ลสวนท 2low upper
mid = (low+upper)/2 = (4+6)/2 = 5
2 4 5 9 12 20 270 1 2 3 4 5 6
ขอมลสวนท 1 ขอมลสวนท 2
20
FOUND…!!
คา key = 20 ทตองการคนหามคาตรงกบขอมลทอยกงกลางของขอมลสวนท 2 หมายความพบขอมลทตองการ
การคนหาแบบทวภาค (Binary Search)
ครงท 1 เปรยบเทยบคา key = 7 กบขอมลทอยกงกลางของ list พบวา คา key มคานอยกวาคากงกลางของขอมล ดงนนไปคนหาขอมลตอในสวนท 1
2 4 5 9 12 20 270 1 2 3 4 5 6
2 4 5 9 12 20 270 1 2 3 4 5 6
low upper
mid = (low+upper)/2 = (0+6)/2 = 3
9
ขอมลสวนท 1 ขอมลสวนท 2
Key = 7
การคนหาแบบทวภาค (Binary Search) ครงท 2 เปรยบเทยบคา key = 7 กบขอมลทอย
กงกลางของขอมลสวนท 1low upper
mid = (low+upper)/2 = (0+2)/2 = 1
2 4 5 9 12 20 270 1 2 3 4 5 6
ขอมลสวนท 1 ขอมลสวนท 2
Key มคามากกวาคากงกลางของขอมลสวนท 1 น ดงนนไปคนหา ตอทขอมลสวนท 2
4
การคนหาแบบทวภาค (Binary Search) ครงท 3 เปรยบเทยบคา key = 7 กบขอมลทอยกงกลางของขอมลlow upper
2 4 5 9 12 20 270 1 2 3 4 5 6
ขอมลทคนหา
เปรยบเทยบคา 5 กบคา 7 เนองจาก key = 7 ไมเทากบ 5 แตมคา มากกวาจงตองคนหนตอไป แตปรากฏวาไมมคาระหวาง 5 กบ 7
อกแลวเพราะฉะนนสรปไดวา ไมพบขอมล 7 ในขอมลชดน
4
NOT FOUND…!!
การคนหาแบบทวภาค (Binary Search)
กระบวนการทำางานแบบ Binary Search จะพบวาเมอมการเปรยบเทยบแตละครงจะมการตดขอมลในตาราง
ออกไปไดทละครงหนงเสมอ ดงนนถาเรมตนมจำานวน ขอมล n ตว
จำานวนขอมลทนำามาเพอคนหาคาทตองการหลงการเปรยบเทยบแตละครงจะเปนดงน
ครงท 2 = n/2 ( หรอ n/21)
ครงท 3 = n/4 ( หรอ n/22)
ครงท 4 = n/8 ( หรอ n/23)
การคนหาแบบทวภาค (Binary Search) การเปรยบเทยบจะไดวา
n/2k < 1 หรอ n < 2k จะได log2 n < k
จำานวนการเปรยบเทยบของ Binary Search คอ O(log2 n )
การคนหาแบบแฮช (Hashing search) เปนวธการคนหาขอมลทใชการแปลงคย (Key) ใหเปนตำาแหนง(Address) ทอยในพนทเกบขอมลโดยใชเทคนคการสรางตารางมาเพอเกบคยดง
กลาว การแปลงคยใหเปนแอดเดรส คอ การแปลงขอมลใหไปอยในตารางแอดเดรสทเตรยมไวซงตารางน
เรยกวา ตารางแฮช (Hash Table) การแปลงคานตองอาศยฟงชน H(k) เปนตวชวย
ในการหาแอดเดรสของคาคย k ( คา H(k) คอ แอดเดรสของคย K นนเอง)
การคนหาแบบแฮช (Hashing search) การคนหาดวยวธนจะไมขนอยกบจำานวนขอมล
อาศยหลกการคำานวณตำาแหนงทเกบขอมล จากคยทกำาหนด นนคอจะตองหา Hashing
Function ทเหมาะสม บางครง Hashing Function จะคำานวณคา
key ทตางกนแตใหคาตำาแหนงเพอเกบขอมล ทเดยวกน ซงเหตการณทเกดขนในลกษณะน
เรยกวาการชนกนของคย (Collision)
การคนหาแบบแฮช (Hashing search)hash function อยางงาย
hash(key) = key MOD TableSize
TableSize คอ ขนาดของตารางทจดเกบ ควร เลอกคาทเปนจำานวนเฉพาะ (Prime Number)
การคนหาแบบแฮช (Hashing search) ชดตวเลข 9, 17, 22, 14, 13, 5 ถากำาหนด
แฮชชงฟงกชนดวยสมการ H(K) = K MOD 9คาทไดจากแฮชชงฟงกชนแสดงไดดงน
H(9) = 0 H(17) = 8H(22) = 4
H(14) = 5 H(13) = 4H(8) = 8
คย 17 ไดตำาแหนงแอดเดรสตรงกบคย 8 คย 22 ไดตำาแหนงแอดเดรสตรงกบคย 13
ลกษณะเชนนเร ยกว าเก ดการชนกนของคย
การคนหาแบบแฮช (Hashing search)
การแกปญหาการชนกนของคย (Collision) ทำาโดยการเกบคาคยใน Hash table แบบ
Chaining Open Addressing
Chaining วธ Chaining เปนวธการแกไขปญหาของการชน
กนทดทสด มการใช linked list เขามาชวย โดยม การแบงเนอทออกเปน 2 สวน สวนแรกจะเกบ
address สวนทสองจะเกบคาขอมลทง list ทมaddress เดยวกน
Open addressing open addressing วธการนเราจะคนหาคา
ตำาแหนงถดไปทยงวาง แลวนำาขอมลทไดมาในภาย หลงไปเกบไว
แบงออกเปน 3 ประเภท Open addressing with Linear Probing Open addressing with Quadratic Probing Open addressing with Double Hashing
Open addressingKey {89, 18, 49, 58, 69}
Hash function:
hash(x) = x MOD 10
Collision resolution strategy:
f(i) = i ( i แทน ครงทหา )
hi(x) = (hash(x)+f(i)) mod 10)
Open addressing with Linear Probing
Open addressingKey {89, 18, 49, 58, 69}
Hash function:
hash(x) = x MOD 10
Collision resolution strategy:
f(i) = i2
hi(x) = (hash(x)+f(i2)) mod 10)
Open addressing with Quadratic Probing
49 MOD 10 = 9 เก ดการชนกนhi(x) = (hash(x)+f(i2)) mod 10)
= (9+12) mod 10 = 0
58 MOD 10 = 8 เก ดการชนกนhi(x) = (hash(x)+f(i2)) mod 10)
= (8+12) mod 10 = 9 (ชน)
= (8+22) mod 10 = 2
69 MOD 10 = 9 เก ดการชนกนhi(x) = (hash(x)+f(i2)) mod 10)
= (9+12) mod 10 = 0 (ชน)
= (9+22) mod 10 = 3
Open addressingKey {89, 18, 49, 58,
69}
Hash functions:
hash(x) = x MOD 10
hash2(x) = 7 - (x MOD 7)
Collision resolution strategy:
f(i) = i * hash2(x)
Open addressing with Double Hashing
49 MOD 10 = 9 เก ดการชนกนhi(x) = (hash(x)+f(i * hash2(x))) mod 10)
= (9+( 1 * (7- (49 mod 7)) mod 10
= (9+7) mod 10 = 6
58 MOD 10 = 8 เก ดการชนกนhi(x) = (hash(x)+f(i * hash2(x))) mod 10)
= (8+( 1 * (7- (58 mod 7)) mod 10
= (8+5) mod 10 = 3
69 MOD 10 = 9 เก ดการชนกนhi(x) = (hash(x)+f(i * hash2(x))) mod 10)
= (9+( 1 * (7- (69 mod 7)) mod 10
= (9+1) mod 10 = 0