Searching

Preview:

DESCRIPTION

Searching. สาขาวิชาคอมพิวเตอร์และเทคโนโลยี อ.เลาขวัญ งามประสิทธิ์. อัลกอริทึมการค้นหาข้อมูล. Linear Searching ข้อมูลไม่มีการเรียงลำดับ Sequential Search ข้อมูลมีการเรียงลำดับ Indexed Sequential Search Binary Search Array หรือ Linked list Binary Search Tree Hash Searching. - PowerPoint PPT Presentation

Citation preview

SearchingSearchingสาขาวิ�ชาคอมพิ�วิเตอร์�และเทคโนโลยี�อ. เลาขวิ�ญ งามปร์ะส�ทธิ์��

อ�ลกอร์�ท�มการ์ค�นหาข�อม!ลอ�ลกอร์�ท�มการ์ค�นหาข�อม!ล

Linear Searching ข�อม!ลไม#ม�การ์เร์�ยีงล$าดั�บ

• Sequential Search ข�อม!ลม�การ์เร์�ยีงล$าดั�บ

• Indexed Sequential Search• Binary Search

– Array หรื�อ Linked list– Binary Search Tree

Hash Searching

Sequential Searching

• เหมาะสำ�าหรื�บใช้�กั�บโครืงสำรื�างข้�อม�ลที่��เกั�บข้�อม�ลแบบไม�เรื�ยงล�าดั�บ

• ใช้�กั�บโครืงสำรื�างข้�อม�ลที่��ม�ปรื"มาณข้�อม�ลน้�อย• ม�กัใช้�กั�บโครืงสำรื�างข้�อม�ล array และ linked list• ม�ปรืะสำ"ที่ธิ"ภาพเป(น้ O(n)• กัรืณ�ดั�ที่��สำ)ดั (best case) เป(น้ O(1)

Example 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)7

3 7 12 25 32 48

Example Sequential Search• กัารืค�น้หาแบบเรื�ยงล�าดั�บ กัรืณ�ที่��ไม�พบข้�อม�ลที่��

ต้�องกัารืKey = 94

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)

3 7 12 25 32 48 54

i = i + 1

notfound

8

78

NOT FOUND…!!!

กัารืค�น้หาแบบล�าดั�บ (Sequential Search)

• ข้�อสำ�งเกัต้– ข�'นตอนวิ�ธิ์�ข�างต�นของการ์ค�นหาแบบเร์�ยีงล$าดั�บจะ

เหมาะก�บการ์ค�นหาค#าในช*ดัข�อม!ลท�+ไม#ไดั�เร์�ยีง– แต#ถ้�าข�อม!ลเร์�ยีงเร์�ยีบร์�อยีแล�วิ จะม�ข�อเส�ยีบางปร์ะการ์

ค-อ กร์ณี�ท�+ค�นหาไม#พิบ แม�วิ#าเม-+อค�น target ในช*ดั ข�อม!ลจนถ้�งต�วิท�+ม�ค#ามากกวิ#า target แล�วิ การ์ค�นหา

ยี�งไม#ยี*ต�การ์ค�น ยี�งคงวินร์อบเพิ-+อเปร์�ยีบเท�ยีบข�อม!ล จนถ้�งต�วิส*ดัท�ายีในช*ดัข�อม!ล ท$าให�เส�ยีเวิลา

Indexed Sequential Searching

• เหมาะสำ�าหรื�บใช้�กั�บโครืงสำรื�างข้�อม�ลที่��เกั�บข้�อม�ลแบบเรื�ยงล�าดั�บ

• ใช้�งาน้ไดั�ดั�กั�บโครืงสำรื�างข้�อม�ลที่��ม�ปรื"มาณข้�อม�ลเกั�บอย��มากั

• กัารืค�น้หาข้�อม�ลโดัยวิ"ธิ�น้�, ม�กัารืที่�างาน้เช้�น้เดั�ยวิกั�บวิ"ธิ� กัารื Sequential Search แต้�ม�กัารืปรื�บปรื)งข้�,น้ต้อน้

วิ"ธิ�ให�ม�ดั�ช้น้� เพ��อที่�ากัารืค�น้หาอย�างเรื�ยงล�าดั�บกั�บช้�วิง หน้-�งๆ ข้องข้�อม�ลที่�,งหมดัเที่�าน้�,น้

Example Index Sequential Search

Key = 101

ข�'นตอนวิ�ธิ์�ในการ์ค�นหาข�อม!ลแบบดั�ชน�เร์�ยีงล$าดั�บ

• สำรื�างต้ารืางต้ารืางดั�ช้น้� (เป(น้อารื/เรืย/ 2 ม"ต้" ) โดัยกั�าหน้ดัช้�วิงข้องข้�อม�ลที่��ต้�องกัารื ( r ) แล�วิน้�าไปหาจำ�าน้วิน้ข้�อม�ล ( n ) แล�วิเกั�บค�าสำ�งสำ)ดั (หรื�อต้��าสำ)ดั ) และพอยน้/เต้อรื/ข้อง

แต้�ละช้�วิงไวิ�ใน้ต้ารืางดั�ช้น้�• ค�น้หาข้�อม�ล โดัยค�น้หาแบบเรื�ยงล�าดั�บใน้ต้ารืางดั�ช้น้�• เปรื�ยบเที่�ยบข้�อม�ลที่��ต้�องกัารื กั�บข้�อม�ลใน้ต้ารืางดั�ช้น้� โดัย

ต้รืวิจำสำอบวิ�าข้�อม�ลอย��ใน้ช้�วิงน้�,น้หรื�อไม� (ข้�อม�ลน้�อยกัวิ�าหรื�อเที่�ากั�บค�าดั�ช้น้�)– ถ้�าใช้� ให�ไปอ�าน้ค�าพอยน้/เต้อรื/จำากัต้ารืางดั�ช้น้� และค�น้หาข้�อม�ลโดัย

เรื"�มจำากัช้�วิงข้�อม�ลข้องข้�อม�ลน้�,น้ ๆ ใน้แบบเรื�ยงล�าดั�บ– ถ้�าไม�ใช้� แสำดังวิ�าไม�ม�ข้�อม�ล

กัารืค�น้หาแบบที่วิ"ภาค (Binary Search)

• เป(น้กัารืค�น้หากั�บข้�อม�ลที่��ถ้�กัเรื�ยงล�าดั�บแล�วิ• ป2ญหากัรืณ�ที่��ข้�อม�ลจำ�าน้วิน้มากัจำะต้�องเสำ�ยเวิลาใน้กัารื

เรื�ยง

กัารืค�น้หาแบบที่วิ"ภาค (Binary Search)

• ข้�,น้ต้อน้ใน้กัารืค�น้หาข้�อม�ลม�ดั�งน้�,– ก$าหนดั หร์-อร์�บข�อม!ลท�+ต�องการ์ค�นหา– แบ#งคร์�+งแฟ้0มข�อม!ลหร์-อแถ้วิล$าดั�บข�อม!ล– ท$าการ์เปร์�ยีบเท�ยีบข�อม!ลในแฟ้0มข�อม!ลหร์-อแถ้วิล$าดั�บ

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

น�'นแน#นอน

Example Binary Search

Key = 20

คร์�'งท�+ 1 เปร์�ยีบเท�ยีบค#า key = 20 ก�บข�อม!ลท�+อยี!#ก�+งกลางของ list พิบวิ#าค#า key ม�ค#ามากกวิ#าค#าก�+งกลางของข�อม!ล ดั�งน�'นไปค�นหาข�อม!ลต#อในส#วินท�+ 2

2 4 5 9 12 20 27

0 1 2 3 4 5 6

2 4 5 9 12 20 27

0 1 2 3 4 5 6

low upper

mid = (low+upper)/2 = (0+6)/2 = 3

9

ข้�อม�ลสำ�วิน้ที่�� 1 ข้�อม�ลสำ�วิน้ที่�� 2

คร์�'งท�+ 2 เปร์�ยีบเท�ยีบค#า key = 20 ก�บข�อม!ลท�+อยี!#ก�+งกลางของข�อม!ลส#วินท�+ 2low upper

mid = (low+upper)/2 = (4+6)/2 = 5

2 4 5 9 12 20 27

0 1 2 3 4 5 6

ข้�อม�ลสำ�วิน้ที่�� 1 ข้�อม�ลสำ�วิน้ที่�� 2

20

FOUND…!!

ค#า key = 20 ท�+ต�องการ์ค�นหาม�ค#าตร์งก�บข�อม!ลท�+อยี!#ก�+งกลางของข�อม!ลส#วินท�+ 2 หมายีควิามวิ#าพิบข�อม!ลท�+ต�องการ์

Example Binary Search

Key = 7

2 4 5 9 12 20 27

0 1 2 3 4 5 6

2 4 5 9 12 20 27

0 1 2 3 4 5 6

low high

mid = (low+high)/2 = (0+6)/2 = 3

9

ข้�อม�ลสำ�วิน้ที่�� 1 ข้�อม�ลสำ�วิน้ที่�� 2

คร์�'งท�+ 1 เปร์�ยีบเท�ยีบค#า key = 20 ก�บข�อม!ลท�+อยี!#ก�+งกลางของ list พิบวิ#าค#า key ม�ค#าน�อยีกวิ#าค#าก�+งกลางของข�อม!ล ดั�งน�'นไปค�นหาข�อม!ลต#อในส#วินท�+ 1

Example Binary Search

ครื�,งที่�� 2 เปรื�ยบเที่�ยบค�า key = 7 กั�บข้�อม�ลที่��อย��กั-�งกัลางข้องข้�อม�ลสำ�วิน้ที่�� 1 พบวิ�าค�า Key ม�ค�ามากักัวิ�าค�ากั-�งกัลางข้องข้�อม�ลสำ�วิน้ที่�� 1น้�, ดั�งน้�,น้ไปค�น้หาต้�อที่��ข้�อม�ลสำ�วิน้ที่�� 2 ที่��แบ�งครื-�งจำากัข้�อม�ลสำ�วิน้ที่�� 1 น้�,

low high

mid = (low+high)/2 = (0+2)/2 = 1

2 4 5 9 12 20 27

0 1 2 3 4 5 6

ข้�อม�ลสำ�วิน้ที่�� 1 ข้�อม�ลสำ�วิน้ที่�� 2

4

Example Binary Search

ครื�,งที่�� 3 เปรื�ยบเที่�ยบค�า key = 7 กั�บข้�อม�ลที่��อย��กั-�งกัลางข้องข้�อม�ล

2 4 5 9 12 20 27

0 1 2 3 4 5 6

ข้�อม�ลสำ�วิน้ที่�� 1 ข้�อม�ลสำ�วิน้ที่�� 2

เปรื�ยบเที่�ยบค�า 5 กั�บค�า 7 เน้��องจำากั key = 7 ไม�เที่�ากั�บ 5 แต้�ม�ค�ามากักัวิ�าจำ-งต้�องค�น้หน้ต้�อไป แต้�ปรืากัฏวิ�าไม�ม�ค�ารืะหวิ�าง 5 กั�บ 7 อ�กัแล�วิเพรืาะฉะน้�,น้สำรื)ปไดั�วิ�า ไม�พบข้�อม�ล 7 ใน้ข้�อม�ลช้)ดัน้�,

NOT FOUND…!!

Example Binary Search

ปรืะสำ"ที่ธิ"ภาพข้องกัารืค�น้หาแบบ Binary Search

• กัรืะบวิน้กัารืที่�างาน้แบบ Binary Search จำะพบวิ�าเม��อม�กัารืเปรื�ยบเที่�ยบแต้�ละครื�,งจำะม�กัารืต้�ดัข้�อม�ลใน้ต้ารืางออกัไปไดั�ที่�ละครื-�งหน้-�งเสำมอ ดั�งน้�,น้ถ้�าเรื"�มต้�น้ม�จำ�าน้วิน้ข้�อม�ล n ต้�วิ– จ$านวินข�อม!ลท�+น$ามาเพิ-+อค�นหาค#าท�+ต�องการ์หล�งการ์

เปร์�ยีบเท�ยีบแต#ละคร์�'งจะเป3นดั�งน�'ครื�,งที่�� 2 = n/2 (หรื�อ n/21)ครื�,งที่�� 3 = n/4 (หรื�อ n/22)ครื�,งที่�� 4 = n/8 (หรื�อ n/23)

ปรืะสำ"ที่ธิ"ภาพข้องกัารืค�น้หาแบบ Binary Search

• ดั�งน้�,น้ ถ้�าให� k เป(น้จำ�าน้วิน้ครื�,งที่��มากัที่��สำ)ดัที่��ใช้�ใน้กัารืเปรื�ยบเที่�ยบจำะไดั�วิ�า

n/2k < 1หรื�อ n < 2k จำะไดั� log2 n < k

• จำ�าน้วิน้กัารืเปรื�ยบเที่�ยบข้อง Binary Search ค�อ O(log2 n )

Binary Search Algorithmfound = false low = 0hi = size-1 while (low <= hi) and (not found)

mid = (low+hi) / 2if key = k[mid] then

found = true round=round+1

else if key < k(mid) then

hi = mid – 1round = round +1

elselow = mid + 1round =round +1

if found then index = mid

else index = -1

end

Hash Searching

• เป(น้วิ"ธิ�กัารืค�น้หาข้�อม�ลที่��ใช้�กัารืแปลงค�ย/ (Key) ให�เป(น้ต้�าแหน้�ง (Address) ที่��อย��ใน้พ�,น้ที่��เกั�บข้�อม�ล โดัยใช้�เที่คน้"คกัารืสำรื�างต้ารืางมาเพ��อเกั�บค�ย/ดั�งกัล�าวิ

• กัารืแปลงค�ย/ให�เป(น้แอดัเดัรืสำ ค�อ กัารืแปลงข้�อม�ลให�ไปอย��ใน้ต้ารืางแอดัเดัรืสำที่��เต้รื�ยมไวิ�ซึ่-�งต้ารืางน้�,เรื�ยกัวิ�า ต้ารืางแฮช้ (Hash Table)

• กัารืแปลงค�าน้�,ต้�องอาศั�ยฟั2งช้�น้ H(k) เป(น้ต้�วิช้�วิยใน้กัารืหาแอดัเดัรืสำข้องค�าค�ย/ k (ค�า H(k) ค�อ แอดัเดัรืสำข้องค�ย/ K น้�,น้เอง)

Hash function

• hash function อย�างง�ายhash(key) = key MOD TableSize

• TableSize ควิรืเป(น้ต้�วิเลข้จำ�าเพาะ (prime number)

• กัารืไดั�ผลล�พธิ/เหม�อน้กั�น้จำากัค�าค�ย/ที่��แต้กัต้�างกั�น้เรื�ยกัวิ�า Collision

• กัารืแกั�ป2ญหา Collision ที่�าโดัยกัารืเกั�บค�าค�ย/ใน้ Hash

table แบบ– Separate Chaining– Open Addressing

Separate chaining

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

H(x) = x MOD 10

Open addressing with Linear Probing

• Key {89, 18, 49, 58, 69}• Hash function: hash(x)=x MOD 10• Collision resolution strategy: f(i)=i

Open addressing with Quadratic Probing

• Key {89, 18, 49, 58, 69}• Hash function: hash(x)=x MOD 10• Collision resolution strategy: f(i)=i2

Open addressing with Double Hashing

• Key {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)

Theorem

ถ้�าใช�การ์แก�ป4ญหา Collision แบบ Quadratic

probing และ table size เป3นเลข prime แล�วิ ข�อม!ลใหม#จะม�ท�+ลงในตาร์างเสมอหากวิ#า table อยี#างน�อยีคร์�+งหน�+งของตาร์างยี�งวิ#าง

If quadratic probing is used, and the table size is prime, then a new element can always be inserted if the table is at least half empty.

Rehashing

Open addressing hash tablewith linear probingwith input 13, 15, 6, 24

Open addressing hash table

with linear probing

after 23 is inserted

Open addressing hash table

after rehashing