View
34
Download
2
Category
Preview:
DESCRIPTION
วิชา COSC2202 โครงสร้างข้อมูล (Data Structure). การค้นหาข้อมูล (Searching). การค้นหาข้อมูล (Searching). - PowerPoint PPT Presentation
Citation preview
การค้�นหาข้�อมู�ล (Searching)
วิ�ชา COSC2202 โครงสร�างข้�อมู�ล (Data Structure)
การค้�นหาข้�อมู�ล (Searching) การค�นหาข้�อมู�ลจะมู�ประส�ทธิ�ภาพมูากน�อยเพ�ยงใด ข้ !น
อย�"ก#บข้#!นตอนวิ�ธิ�การค�นหาข้�อมู�ลเป&นส'าค#ญ การค�นหาข้�อมู�ลมู�หลายวิ�ธิ� แต"ละวิ�ธิ�ก*มู�ข้�อด�ข้�อเส�ยด�วิยก#นท#!งส�!น และย#งเหมูาะสมูเฉพาะงาน ซึ่ -งในจะแสดงวิ�ธิ�การค�นหาข้�อมู�ล 3 วิ�ธิ�ด�วิยก#นค.อ
การค�นหาแบบล'าด#บ (Sequential search ) การค�นหาแบบทวิ�ภาค (Binary search ) การค�นหาแบบแฮช (Hashing search )
การค�นหาแบบล'าด#บ (Sequential search ) Sequential search เป&นกรรมูวิ�ธิ�ค�นหาข้�อมู�ลท�-ง"าย
ท�-ส0ด และสามูารถกระท'าบนโครงสร�างข้�อมู�ลท�-ถ�กจ#ดเร�ยงหร.อไมู"ก*ได�
หล#กการข้อง 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) ค"าเฉล�-ยข้องจ'านวินคร#!งข้องการค�นหาเมู.-อไฟล4ข้นาด N
ค.อ O (N/2)
การค�นหาแบบล'าด#บ (Sequential search) ข้#!นตอนวิ�ธิ�ข้�างต�นข้องการค�นหาแบบเร�ยงล'าด#บจะ
เหมูาะก#บการค�นหาค"าในช0ดข้�อมู�ลท�-ไมู"ได�เร�ยง แต"ถ�าข้�อมู�ลเร�ยงเร�ยบร�อยแล�วิ จะมู�ข้�อเส�ยบางประการ
ค.อ กรณี�ท�-ค�นหาไมู"พบ แมู�วิ"าเมู.-อค�น target ในช0ดข้�อมู�ลจนถ งต#วิท�-มู�ค"ามูากกวิ"า target แล�วิ การค�นหาย#งไมู"ย0ต�การค�น ย#งคงวินรอบเพ.-อเปร�ยบเท�ยบข้�อมู�ลจนถ งต#วิส0ดท�ายในช0ดข้�อมู�ล ท'าให�เส�ยเวิลา
การค�นหาแบบล'าด#บ (Sequential search) การปร#บปร0งประส�ทธิ�ภาพการค�นหาแบบล'าด#บ
การค�นหาข้�อมู�ลแบบล'าด#บด�วิยเทคน�คการเร�ยงล'าด#บข้�อมู�ล เร�ยงล'าด#บข้�อมู�ลจากน�อยไปหามูาก
การค�นหาข้�อมู�ลแบบล'าด#บด�วิยเทคน�คเซึ่ล4ฟร�ออร4เดอร4ร�-ง (Self Reordering)ปร#บปร0งข้#!นตอนวิ�ธิ�การค�นหา โดย
การค�นหาข้�อมู�ลจะหย0ดท'าการค�นหาเมู.-อพบวิ"าค�ย4ท�-ใช�ค�นมู�ค"าน�อยกวิ"าข้�อมู�ลในช0ดข้�อมู�ล
การค�นหาแบบล'าด#บแบบปร#บปร0ง 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) เป&นการค�นหาก#บข้�อมู�ลท�-ถ�กเร�ยงล'าด#บแล�วิ ป6ญหากรณี�ท�-ข้�อมู�ลจ'านวินมูากจะต�องเส�ยเวิลาในการเร�ยง ข้#!นตอนในการค�นหาข้�อมู�ลมู�ด#งน�!
ก'าหนด หร.อร#บข้�อมู�ลท�-ต�องการค�นหา แบ"งคร -งแฟ7มูข้�อมู�ลหร.อแถวิล'าด#บข้�อมู�ล ท'าการเปร�ยบเท�ยบข้�อมู�ลในแฟ7มูข้�อมู�ลหร.อแถวิล'าด#บข้�อมู�ล
โดยแบ"งคร -งลงไปเร.-อยๆ จนกวิ"าจะพบหร.อไมู"สามูารถแบ"งได�อ�กต"อไป น#!นหมูายควิามูวิ"าไมู"พบข้�อมู�ลน#!นแน"นอน
การค�นหาแบบทวิ�ภาค (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 อ�กแล�วิเพราะฉะน#!นสร0ปได�วิ"า ไมู"พบข้�อมู�ล 7 ในข้�อมู�ลช0ดน�!
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 ) เป&นวิ�ธิ�การค�นหาข้�อมู�ลท�-ใช�การแปลงค�ย4 (Key) ให�เป&น
ต'าแหน"ง (Address) ท�-อย�"ในพ.!นท�-เก*บข้�อมู�ล โดยใช�เทคน�คการสร�างตารางมูาเพ.-อเก*บค�ย4ด#งกล"าวิ
การแปลงค�ย4ให�เป&นแอดเดรส ค.อ การแปลงข้�อมู�ลให�ไปอย�"ในตารางแอดเดรสท�-เตร�ยมูไวิ�ซึ่ -งตารางน�!เร�ยกวิ"า ตารางแฮช
(Hash Table) การแปลงค"าน�!ต�องอาศั#ยฟ6งช#น H(k) เป&นต#วิช"วิยในการหา
แอดเดรสข้องค"าค�ย4 k (ค"า H(k) ค.อ แอดเดรสข้องค�ย4 K น#!นเอง)
การค�นหาแบบแฮช (Hashing search) การค�นหาด�วิยวิ�ธิ�น�!จะไมู"ข้ !นอย�"ก#บจ'านวินข้�อมู�ล อาศั#ยหล#กการค'านวิณีต'าแหน"งท�-เก*บข้�อมู�ลจากค�ย4ท�-ก'าหนด
น#-นค.อจะต�องหา Hashing Function ท�-เหมูาะสมู บางคร#!ง Hashing Function จะค'านวิณีค"า key ท�-ต"าง
ก#นแต"ให�ค"าต'าแหน"งเพ.-อเก*บข้�อมู�ลท�-เด�ยวิก#น ซึ่ -งเหต0การณี4ท�-เก�ดข้ !นในล#กษณีะน�!เร�ยกวิ"าการชนก#นข้องค�ย4 (Collision)
การค�นหาแบบแฮช (Hashing search)hash function อย"างง"าย
hash(key) = key MOD TableSize
TableSize ค.อ ข้นาดข้องตารางท�-จ#ดเก*บ ควิรเล.อกค"าท�-เป&นจ'านวินเฉพาะ (Prime Number)
การค�นหาแบบแฮช (Hashing search) ช0ดต#วิเลข้ 9, 17, 22, 14, 13, 5 ถ�าก'าหนดแฮชช�-งฟ6ง
ก4ช# -นด�วิยสมูการ H(K ) = K MOD 9ค"าท�-ได�จากแฮชช�-งฟ6งก4ช# -นแสดงได�ด#งน�!
H(9 ) = 0 H(17 ) = 8 H(22 ) =4
H(14 ) = 5 H(13 ) = 4H(8 ) = 8
ค�ย4 17 ได�ต'าแหน"งแอดเดรสตรงก#บค�ย4 8 ค�ย4 22ได�ต'าแหน"งแอดเดรสตรงก#บค�ย4 13
ล�กษณะเช่�นน��เร�ยกว�าเก!ดการช่นก�นข้องค้�ย#
การค�นหาแบบแฮช (Hashing search) การแก�ป6ญหาการชนก#นข้องค�ย4 (Collision)
ท'าโดยการเก*บค"าค�ย4ใน Hash table แบบ Chaining Open Addressing
Chaining วิ�ธิ� Chaining เป&นวิ�ธิ�การแก�ไข้ป6ญหาข้องการชนก#นท�-
ด�ท�-ส0ด มู�การใช� linked list เข้�ามูาช"วิย โดยมู�การแบ"งเน.!อท�-ออกเป&น 2 ส"วิน ส"วินแรกจะเก*บ address ส"วินท�-สองจะเก*บค"าข้�อมู�ลท#!ง list ท�-มู� address เด�ยวิก#น
Chaining
Key={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 addressing
Key {89, 18, 49, 58, 69}Hash function:
hash(x) = x MOD 10Collision resolution strategy:
f(i) = i ( i แทน คร#!งท�-หา )hi(x) = (hash(x)+f(i)) mod 10)
Open addressing with Linear Probing
Open addressing
Key {89, 18, 49, 58, 69}Hash function:
hash(x) = x MOD 10Collision 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
Recommended