PowerPoint - ee.eng.cmu.ac.th

Download Report

Transcript PowerPoint - ee.eng.cmu.ac.th

Week 13
Basic Algorithm 2
(Searching)
Searching Arrays
• การค้นหาแบบเชิงเส้น (Linear search)
• Small arrays
• Unsorted arrays
• การค้นหาแบบไบนารี (Binary search)
• Large arrays
• Sorted arrays
*From: web.cs.wpi.edu/~cs1005/c03/elliott/handouts/Lecture15.ppt
2
Linear Search Algorithm
• ใช้กบั ข้อมูลทีม่ จี านวนไม่มาก
• สามารถใช้ได้กบั ข้อมูลทีย่ งั ไม่ถูกเรียงลาดับ (unsorted)
• การทางานของการค้นหาแบบเชิงเส้น
• เริม่ จากสมาชิกตัวแรกของตัวแปรชุด
• ทาการเปรียบเทียบค่าของสมาชิกกับข้อมูล (key) ทีต่ อ้ งการสืบค้น
• ทาการเปรียบเทียบกับสมาชิกตัวถัดไป
• จนกระทังพบข้
่
อมูลทีต่ อ้ งการ หรือ...
• จนกระทังถึ
่ งสมาชิกตัวสุดท้ายในตัวแปรชุด
• โดยเฉลีย่ แล้ว เราจะพบข้อมูลทีต่ อ้ งการเมือ่ ทาการเปรียบเทียบกับ
ข้อมูลจานวนประมาณครึง่ หนึ่งของจานวนสมาชิกทัง้ หมด
3
Linear Search C++ Code
• Ex 1: โปรแกรมแสดงการค้นหาแบบเชิงเส้น
4
Linear Search Results
• Ex 1: ผลการทางานของโปรแกรม
int a[13] = {1,100,2,66,55,44,88,77,12,23,45,9,87};
5
Binary Search Algorithm
• สามารถใช้งานได้กบั ข้อมูลทีถ่ ูกเรียบลาดับแล้วเท่านัน้
• ภายหลังจากการเปรียบเทียบข้อมูลแต่ละครัง้ จะมีการตัดข้อมูลทีส่ นใจ
ออกไปครึง่ หนึ่ง
• การทางานของการค้นหาแบบไบนารี
• หาสมาชิกในตัวแปรชุดทีถ่ กู เรียงไว้อยูใ่ นตาแหน่งกึง่ กลางของสมาชิกทีส่ นใจ
• เปรียบเทียบค่าของสมาชิกดังกล่าวกับค่าของข้อมูล (key) ทีต่ อ้ งการสืบค้น
• หากมีคา่ เท่ากัน ให้จบการทางานและรายงานผลการค้นพบข้อมูลทีต่ อ้ งการ
• หากมีคา่ ไม่เท่ากัน ให้เลือกครึง่ หนึ่งของสมาชิกทัง้ หมดทีน่ ่าจะมีขอ้ มูล
(key) ทีต่ อ้ งการไว้เพือ่ ใช้ทาการค้นหาต่อไป
• ทาซ้ากระบวนการ หาสมาชิกกึง่ กลาง เปรียบเทียบ และเลือกสมาชิกครึง่ หนึ่ง
ไปเรือ่ ยๆ จนกระทัง่
• ค้นพบข้อมูลทีต่ อ้ งการ หรือ...
• ไม่เหลือสมาชิกเหลือให้เปรียบเทียบ
6
Binary Search Algorithm
a
0
1
2
3
4
5
6
7
8
9
10
11
12
1
5
15
19
25
27
29
31
33
45
55
88
100
search key = 19
middle of the array
compare a[6] and 19
19 is smaller than 29 so the next
search will use the lower half of the array
7
Binary Search Algorithm
0
1
2
3
4
5
1
5
15
19
25
27
search key = 19
use this as the middle of the array
Compare a[2] with 19
15 is smaller than 19 so use the top
half for the next pass
8
Binary Search Algorithm
search key = 19
a
3
4
5
19
25
27
use this as the middle of the array
Compare a[4] with 19
25 is bigger than 19 so use the bottom
half
9
Binary Search Algorithm
search key = 19
a
3
19
use this as the middle of the array
Compare a[3] with 19
Found!!
10
Binary Search Algorithm
a
0
1
2
3
4
5
6
7
8
9
10
11
12
1
5
15
19
25
27
29
31
33
45
55
88
100
search key = 18
middle of the array
compare a[6] and 18
18 is smaller than 29 so the next
search will use the lower half of the array
11
Binary Search Algorithm
0
1
2
3
4
5
1
5
15
19
25
27
search key = 18
use this as the middle of the array
Compare a[2] with 18
15 is smaller than 18 so use the top
half for the next pass
12
Binary Search Algorithm
search key = 18
a
3
4
5
19
25
27
use this as the middle of the array
Compare a[4] with 18
25 is bigger than 18 so use the bottom
half
13
Binary Search Algorithm
search key = 18
a
3
19
use this as the middle of the array
Compare a[3] with 18
Does not match and no more elements
to compare.
Not Found!!
14
Binary Search C++ Code
• Ex 2: โปรแกรมแสดงการค้นหาแบบเชิงเส้น
15
Binary Search Results
• Ex 2: ผลการทางานของโปรแกรม
int a[13] = {1,5,15,19,25,27,29,31,33,45,55,88,100};
16
Searching Efficiency
• หากต้องการค้นข้อมูลจากสมาชิก 1,024 ตัว จะใช้จานวนรอบในการ
ทางานเพียง 10 รอบเพือ่ ให้พบ(หรือไม่พบ)ข้อมูลทีต่ อ้ งการ
• จะมีการคัดสมาชิกทีส่ นใจในแต่ละรอบการทางานเป็ น 512, 256, 128, 64, 32,
16, 8, 4, 2, 1 ตามลาดับ
• ในกรณีทม่ี จี านวนสมาชิก 1 พันล้านตัว จะมีการเปรียบเทียบอย่างมาก
ทีส่ ดุ 30 ครัง้
• ยิง่ มีจานวนสมาชิกมากขึน้ เท่าใด ประสิทธิภาพในการค้นหาของการ
ค้นหาแบบไบนารีจะมีมากขึน้ เมือ่ เปรียบเทียบกับประสิทธิภาพของการ
ค้นหาของการค้นหาแบบเชิงเส้น
17
Summary
• ในหัวข้อนี้ ได้แนะนาถึงการเขียนโปรแกรมสาหรับการค้นหาข้อมูล
(Searching) เพือ่ ฝึกทักษะในการเขียนโปรแกรมทีใ่ ช้งานข้อมูลในตัว
แปรชุดทีม่ คี วามซับซ้อนมากกว่าการเรียงข้อมูล
• ได้แนะนาวิธกี ารค้นหาข้อมูล 2 รูปแบบคือ
• การค้นหาแบบเชิงเส้น (Linear Search)
• การค้นหาแบบไบนารี (Binary Search)
• Linear Search จะทาการค้นหาจากตัวแรกของตัวแปรชุดไปเรือ่ ยๆ
ทีละตัว สามารถทางานได้กบั ข้อมูลทีไ่ ม่ได้เรียงลาดับมาก่อน
18
Summary
• Binary Search จะทาการค้นหาข้อมูลในตัวแปรชุดซึง่ ต้องเป็ นข้อมูลที่
ได้รบั การเรียงลาดับแล้ว และเปรียบเทียบกับค่ากลางของข้อมูลและตัด
ช่วงข้อมูลทีค่ น้ หาทีละครึง่ ไปเรือ่ ยๆ
• Binary Search เป็ นวิธกี ารค้นหาทีม่ ปี ระสิทธิภาพกว่า Linear Search
แต่ตอ้ งมีการเรียงข้อมูลก่อน
19
Labs
• Lab 13.1: จากโปรแกรม Binary Search ในตัวอย่างที่ 2 ให้ทาการ
แก้ไขให้โปรแกรมดังนี้
• ถ้าพบข้อมูลทีต่ อ้ งการ ให้โปรแกรมแสดงข้อความว่า
“Could not find element <key> in
ในลักษณะเดียวกับกรณีโปรแกรมในตัวอย่างที่ 1
• ตัวอย่างการทางาน
array a”
20
Labs
• Lab 13.2: จาก lab 13.1 ให้ทาการแก้ไขให้โปรแกรมดังนี้
• เพิม่ การแสดงผลในแต่ละรอบการทางาน โดยแสดงเครือ่ งหมาย ‘[]’
ล้อมรอบสมาชิกทีอ่ ยูใ่ นขอบเขตการค้นหาในรอบนัน้
• ตัวอย่างการทางาน 1:
• Seach key = 19
21
Labs
• Lab 13.2: จาก lab 13.1 ให้ทาการแก้ไขให้โปรแกรมดังนี้
• เพิม่ การแสดงผลในแต่ละรอบการทางาน โดยแสดงเครือ่ งหมาย ‘[]’
ล้อมรอบสมาชิกทีอ่ ยูใ่ นขอบเขตการค้นหาในรอบนัน้
• ตัวอย่างการทางาน 2:
• Seach key = 18
22
Labs
• Lab 13.3: Buble Sort + Binary Search ให้นศ.เขียนโปรแกรมดังต่อไปนี้
• สร้างตัวแปรชุดสาหรับเก็บเลขจานวนเต็ม 10 จานวน
• ทาการสุม่ ค่าระหว่าง 0-100 ให้กบั สมาชิกทัง้ 10 ตัว
• ทาการเรียงข้อมูลด้วยวิธี Bubble sort
• ทาการค้นหาข้อมูลทีต่ อ้ งการด้วยวิธไี บนารี (Binary search)
• Note: ข้อควรระวัง ค่า index จากตัวอย่างในเรือ่ ง Bubble sort จะเริม่ ที่ 1 ในขณะ
นี่คา่ index จากตัวอย่างทีใ่ ช้ในเรือ่ ง search จะเริม่ ที่ 0
23
Labs
• Lab 13.3: ตัวอย่างการทางานของ Buble Sort + Binary Search
Bubble Sort
Binary Search
24