29
การค้นหาข้อมูล (Searching) โครงสร้างข้อมูล (Data Structure)

การค้นหาข้อมูล (searching)

  • Upload
    tumetr

  • View
    275

  • Download
    0

Embed Size (px)

Citation preview

การคนหาขอม ล (Searching)

โครงสรางขอมล (Data Structure)

การคนหาขอมล (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 เดยวกน

ChainingKey={0, 81, 64, 25, 36, 49, 4, 1, 9, 16}

H(x) = x MOD 10

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

Open addressing รปแบบของ hash2(x) ทนยม คอ

hash2(x) = R - (x MOD R)

เมอ R คอ จำานวนเฉพาะ (Prime Number) ท นอยกวา TableSize