29
กกกกกกกกกกกกกก (Searching) วววว COSC2202 ววววววววววววววว (Data Structure)

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)

Embed Size (px)

DESCRIPTION

วิชา COSC2202 โครงสร้างข้อมูล (Data Structure). การค้นหาข้อมูล (Searching). การค้นหาข้อมูล (Searching). - PowerPoint PPT Presentation

Citation preview

Page 1: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

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

วิ�ชา COSC2202 โครงสร�างข้�อมู�ล (Data Structure)

Page 2: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค้�นหาข้�อมู�ล (Searching) การค�นหาข้�อมู�ลจะมู�ประส�ทธิ�ภาพมูากน�อยเพ�ยงใด ข้ !น

อย�"ก#บข้#!นตอนวิ�ธิ�การค�นหาข้�อมู�ลเป&นส'าค#ญ การค�นหาข้�อมู�ลมู�หลายวิ�ธิ� แต"ละวิ�ธิ�ก*มู�ข้�อด�ข้�อเส�ยด�วิยก#นท#!งส�!น และย#งเหมูาะสมูเฉพาะงาน ซึ่ -งในจะแสดงวิ�ธิ�การค�นหาข้�อมู�ล 3 วิ�ธิ�ด�วิยก#นค.อ

การค�นหาแบบล'าด#บ (Sequential search ) การค�นหาแบบทวิ�ภาค (Binary search ) การค�นหาแบบแฮช (Hashing search )

Page 3: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บ (Sequential search ) Sequential search เป&นกรรมูวิ�ธิ�ค�นหาข้�อมู�ลท�-ง"าย

ท�-ส0ด และสามูารถกระท'าบนโครงสร�างข้�อมู�ลท�-ถ�กจ#ดเร�ยงหร.อไมู"ก*ได�

หล#กการข้อง Sequential search ค.อ เอาค"าข้�อมู�ลท�-ต�องการหาต'าแหน"งในโครงสร�าง  ไปไล"เท�ยบข้�อมู�ลในโครงสร�างท�ละต#วิตามูล'าด#บ 

Page 4: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บ (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

Page 5: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บ (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…!!!

Page 6: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บ (Sequential search) จ'านวินคร#!งข้องการเปร�ยบเท�ยบ

หาเจอเมู.-อเปร�ยบเท�ยบคร#!งแรกเจอ = O (1) ไมู"มู�ข้�อมู�ลน#!นอย�" = O (n) ค"าเฉล�-ยข้องจ'านวินคร#!งข้องการค�นหาเมู.-อไฟล4ข้นาด N

ค.อ O (N/2)

Page 7: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บ (Sequential search) ข้#!นตอนวิ�ธิ�ข้�างต�นข้องการค�นหาแบบเร�ยงล'าด#บจะ

เหมูาะก#บการค�นหาค"าในช0ดข้�อมู�ลท�-ไมู"ได�เร�ยง แต"ถ�าข้�อมู�ลเร�ยงเร�ยบร�อยแล�วิ จะมู�ข้�อเส�ยบางประการ

ค.อ กรณี�ท�-ค�นหาไมู"พบ แมู�วิ"าเมู.-อค�น target ในช0ดข้�อมู�ลจนถ งต#วิท�-มู�ค"ามูากกวิ"า target แล�วิ การค�นหาย#งไมู"ย0ต�การค�น ย#งคงวินรอบเพ.-อเปร�ยบเท�ยบข้�อมู�ลจนถ งต#วิส0ดท�ายในช0ดข้�อมู�ล ท'าให�เส�ยเวิลา

Page 8: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บ (Sequential search) การปร#บปร0งประส�ทธิ�ภาพการค�นหาแบบล'าด#บ

การค�นหาข้�อมู�ลแบบล'าด#บด�วิยเทคน�คการเร�ยงล'าด#บข้�อมู�ล เร�ยงล'าด#บข้�อมู�ลจากน�อยไปหามูาก

การค�นหาข้�อมู�ลแบบล'าด#บด�วิยเทคน�คเซึ่ล4ฟร�ออร4เดอร4ร�-ง (Self Reordering)ปร#บปร0งข้#!นตอนวิ�ธิ�การค�นหา โดย

การค�นหาข้�อมู�ลจะหย0ดท'าการค�นหาเมู.-อพบวิ"าค�ย4ท�-ใช�ค�นมู�ค"าน�อยกวิ"าข้�อมู�ลในช0ดข้�อมู�ล

Page 9: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบล'าด#บแบบปร#บปร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

Page 10: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (Binary Search) เป&นการค�นหาก#บข้�อมู�ลท�-ถ�กเร�ยงล'าด#บแล�วิ ป6ญหากรณี�ท�-ข้�อมู�ลจ'านวินมูากจะต�องเส�ยเวิลาในการเร�ยง ข้#!นตอนในการค�นหาข้�อมู�ลมู�ด#งน�!

ก'าหนด หร.อร#บข้�อมู�ลท�-ต�องการค�นหา แบ"งคร -งแฟ7มูข้�อมู�ลหร.อแถวิล'าด#บข้�อมู�ล ท'าการเปร�ยบเท�ยบข้�อมู�ลในแฟ7มูข้�อมู�ลหร.อแถวิล'าด#บข้�อมู�ล

โดยแบ"งคร -งลงไปเร.-อยๆ จนกวิ"าจะพบหร.อไมู"สามูารถแบ"งได�อ�กต"อไป น#!นหมูายควิามูวิ"าไมู"พบข้�อมู�ลน#!นแน"นอน

Page 11: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (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

Page 12: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (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 หมูายควิามูพบข้�อมู�ลท�-ต�องการ

Page 13: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (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

Page 14: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (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

Page 15: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (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…!!

Page 16: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (Binary Search)

กระบวินการท'างานแบบ Binary Search จะพบวิ"าเมู.-อมู�การเปร�ยบเท�ยบแต"ละคร#!งจะมู�การต#ดข้�อมู�ลในตารางออกไปได�ท�ละคร -งหน -งเสมูอ ด#งน#!นถ�าเร�-มูต�นมู�จ'านวินข้�อมู�ล n ต#วิ จ'านวินข้�อมู�ลท�-น'ามูาเพ.-อค�นหาค"าท�-ต�องการหล#งการเปร�ยบเท�ยบแต"ละ

คร#!งจะเป&นด#งน�!คร#!งท�- 2 = n/2 (หร.อ n/21)

คร#!งท�- 3 = n/4 (หร.อ n/22)

คร#!งท�- 4 = n/8 (หร.อ n/23)

Page 17: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบทวิ�ภาค (Binary Search) การเปร�ยบเท�ยบจะได�วิ"า

n/2k < 1หร.อ n < 2k จะได� log2 n < k

จ'านวินการเปร�ยบเท�ยบข้อง Binary Search ค.อ O(log2 n )

Page 18: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบแฮช (Hashing search ) เป&นวิ�ธิ�การค�นหาข้�อมู�ลท�-ใช�การแปลงค�ย4 (Key) ให�เป&น

ต'าแหน"ง (Address) ท�-อย�"ในพ.!นท�-เก*บข้�อมู�ล โดยใช�เทคน�คการสร�างตารางมูาเพ.-อเก*บค�ย4ด#งกล"าวิ

การแปลงค�ย4ให�เป&นแอดเดรส ค.อ การแปลงข้�อมู�ลให�ไปอย�"ในตารางแอดเดรสท�-เตร�ยมูไวิ�ซึ่ -งตารางน�!เร�ยกวิ"า ตารางแฮช

(Hash Table) การแปลงค"าน�!ต�องอาศั#ยฟ6งช#น H(k) เป&นต#วิช"วิยในการหา

แอดเดรสข้องค"าค�ย4 k (ค"า H(k) ค.อ แอดเดรสข้องค�ย4 K น#!นเอง)

Page 19: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบแฮช (Hashing search) การค�นหาด�วิยวิ�ธิ�น�!จะไมู"ข้ !นอย�"ก#บจ'านวินข้�อมู�ล อาศั#ยหล#กการค'านวิณีต'าแหน"งท�-เก*บข้�อมู�ลจากค�ย4ท�-ก'าหนด

น#-นค.อจะต�องหา Hashing Function ท�-เหมูาะสมู บางคร#!ง Hashing Function จะค'านวิณีค"า key ท�-ต"าง

ก#นแต"ให�ค"าต'าแหน"งเพ.-อเก*บข้�อมู�ลท�-เด�ยวิก#น ซึ่ -งเหต0การณี4ท�-เก�ดข้ !นในล#กษณีะน�!เร�ยกวิ"าการชนก#นข้องค�ย4 (Collision)

Page 20: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบแฮช (Hashing search)hash function อย"างง"าย

hash(key) = key MOD TableSize

TableSize ค.อ ข้นาดข้องตารางท�-จ#ดเก*บ ควิรเล.อกค"าท�-เป&นจ'านวินเฉพาะ (Prime Number)

Page 21: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบแฮช (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

ล�กษณะเช่�นน��เร�ยกว�าเก!ดการช่นก�นข้องค้�ย#

Page 22: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

การค�นหาแบบแฮช (Hashing search) การแก�ป6ญหาการชนก#นข้องค�ย4 (Collision)

ท'าโดยการเก*บค"าค�ย4ใน Hash table แบบ Chaining Open Addressing

Page 23: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Chaining วิ�ธิ� Chaining เป&นวิ�ธิ�การแก�ไข้ป6ญหาข้องการชนก#นท�-

ด�ท�-ส0ด มู�การใช� linked list เข้�ามูาช"วิย โดยมู�การแบ"งเน.!อท�-ออกเป&น 2 ส"วิน ส"วินแรกจะเก*บ address  ส"วินท�-สองจะเก*บค"าข้�อมู�ลท#!ง list ท�-มู� address เด�ยวิก#น

Page 24: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Chaining

Key={0, 81, 64, 25, 36, 49, 4, 1, 9, 16}H(x) = x MOD 10

Page 25: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Open addressing open addressing วิ�ธิ�การน�!เราจะค�นหาค"าต'าแหน"ง

ถ#ดไปท�-ย#งวิ"าง แล�วิน'าข้�อมู�ลท�-ได�มูาในภายหล#งไปเก*บไวิ� แบ"งออกเป&น 3 ประเภท

Open addressing with Linear Probing Open addressing with Quadratic Probing Open addressing with Double Hashing

Page 26: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

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

Page 27: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

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

Page 28: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

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

Page 29: วิชา  COSC2202 โครงสร้างข้อมูล  (Data Structure)

Open addressing

ร�ปแบบข้อง hash2(x) ท�-น�ยมู ค.อ hash2(x) = R - (x MOD R)

เมู.-อ R ค.อ จ'านวินเฉพาะ (Prime Number) ท�-น�อยกวิ"า TableSize