Upload
mary-gilmore
View
32
Download
0
Embed Size (px)
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