บทที่ 1 รู้จักกับโครงสร้าง

Report
บทที ่ 1 รูจ้ กั กับโครงสร้าง
ข้อมูลและอัลกอริทมึ
1
บทที่ 1 รูจ้ กั กับโครงสร้างข้อมูลและอัลกอริทมึ
•
•
•
•
•
•
โครงสร้างข้อมูลและอัลกอริทมึ คืออะไร
ผังงาน (Flow chart)
โค้ดรหัสเทียม (Pseudo code)
Abstract Data Type
ประเภทของอัลกอริทมึ
สรุปเนื้อหาบทที่ 1
2
โครงสร้างข้อมูลและอัลกอริทมึ คืออะไร
โครงสร้างข้อมูล (Data Structure) คือ
•
การจัดการข้อมูลในหน่ วยความจาหรือในดิสก์ให้มคี วามสัมพันธ์กนั ภายในกลุ่ม
ข้อมูล มีรปู แบบและข้อกาหนดที่ชดั เจนเพื่อสร้างความสัมพันธ์ภายในกลุ่มข้อมูล
เช่น อาร์เรย์ (Array), ลิงค์ลสิ ต์ (Link List), แสตก (Stack), ไบนารีทรี (Binary
tree) เป็ นต้น
3
โครงสร้างข้อมูลและอัลกอริทมึ คืออะไร
อัลกอริทึม (Algorithm) หรือ ขัน้ ตอนวิธี
•
วิธกี ารแสดงลาดับขัน้ ตอนในการทางานหรือการแก้ไขปญั หาอย่างใดอย่างหนึ่ง
เช่น การกาหนดขัน้ ตอนเพื่อแก้ไขปญั หาการจัดเรียงเอกสารในแฟ้มข้อมูล หรือ
การกาหนดอัลกอริทมึ ในการค้นหาข้อมูลในแฟ้มข้อมูลทัง้ หมด
4
4
โครงสร้างข้อมูลและอัลกอริทมึ คืออะไร
ตัวอย่างที่ 1.1 แสดงอัลกอริทมึ หรือขัน้ ตอนวิธกี ารใช้ตกู้ ดเงินอัตโนมัติ (ATM) เพือ่ โอนเงิน
1. ใส่บตั ร ATM
2. ป้อนรหัสผ่านของบัตร ATM
3. ในหน้าบริการ เลือกบริการรายการโอนเงิน
4. เลือกรูปแบบการโอนเงินว่าจะโอนเงินเข้าบัญชีอ่นื ธนาคารเดียวกัน หรือธนาคารอื่น ฯ
5. กดหมายเลขบัญชีทต่ี อ้ งการโอนเงินเข้าบัญชี
6. ตรวจสอบเลขทีบ่ ญ
ั ชีทป่ี ้ อนถูกต้องหรือไม่ ถ้าถูกต้องให้กดตกลง
7. กรอกจานวนเงินทีต่ อ้ งการโอนเงิน แล้วกดตกลง
8. ชื่อบัญชีและจานวนเงินที่ต้องการโอนจะปรากฏขึ้น เพื่อยืนยัน ความถูกต้ องการโอน
เงิน เมือ่ ตรวจสอบบัญชีและจานวนเงินถูกต้อง กดตกลง เป็ นการเสร็จสิน้ การโอนเงิน
9. รับบัตร ATM
10. รับใบสลิปการโอนเงิน
5
โครงสร้างข้อมูลและอัลกอริทมึ คืออะไร
ตัวอย่างที่ 1.2 แสดงอัลกอริทมึ การหาข้อมูลในอาร์เรย์ขนาด n ข้อมูล
1. รับข้อมูลตัวเลขทีต่ อ้ งการค้นหา
2. เปรียบเทียบข้อมูลในอาร์เรย์ทลี ะตัวตัง้ แต่ขอ้ มูลในตาแหน่งที่ 0 จนถึงตาแหน่งที่ n-1
3. ถ้าข้อมูลในอาร์เรย์ตรงกับข้อมูลทีต่ อ้ งการค้นหา แสดงว่าเจอข้อมูล จบการค้นหาข้อมูล
4. ถ้าเปรียบเทียบข้อมูลจนถึงตาแหน่ งที่ n-1 แล้วไม่พบข้อมูลตัวใดในอาร์เรย์เลย แสดง
ว่าไม่มขี อ้ มูลทีต่ อ้ งการค้นหาในอาร์เรย์
6
โครงสร้างข้อมูลและอัลกอริทมึ คืออะไร
ประโยชน์ ของโครงสร้างข้อมูลและอัลกอริทึม
• การจัดเก็บข้อมูลจานวนมากรูปแบบโครงสร้างข้อมูล ทาให้สามารถนาข้อมูลไปใช้ได้
อย่างมีประสิทธิภาพ ใช้พน้ื ทีห่ น่วยความจาน้อย ใช้เวลาในการประมวลผลน้อย ส่งผล
ให้คอมพิวเตอร์ทางานเร็วขึน้ นัน้ เอง
• อ่านข้อมูลเพือ่ ใช้สาหรับประมวลผล คอมพิวเตอร์จะใช้โครงสร้างข้อมูลและอัลกอริทมึ
เข้ามาช่วยในการจัดการกับ ข้อมูล เพื่อจัดสรรหน่ วยความจาได้อย่างเหมาะสมและ
สามารถทางานได้อย่างต่อเนื่อง
• การพัฒนาโปรแกรมทีใ่ ช้รปู แบบโครงสร้างข้อมูลและอัลกอริทมึ ทีเ่ หมาะสมสามารถเพิม่
ประสิทธิภาพการทางานของโปรแกรม ใช้หน่วยความจาน้อยและประมวลผลได้รวดเร็ว
7
ผังงาน (Flow chart)
ผังงาน หรือเรียกว่า โฟว์ชาร์ท (Flow chart)
•
•
•
•
•
เป็ นเครือ่ งมือทีใ่ ช้ออกแบบระบบงานด้วยสัญลักษณ์
ช่วยให้มโี ครงสร้างของระบบงานทีเ่ ป็ นลาดับขัน้ ตอน และเข้าใจได้งา่ ย
นาผังงานไปใช้ในการออกแบบโปรแกรม เพือ่ ตรวจสอบลาดับขัน้ ตอนการทางานถู กต้อง
หรือไม่
สามารถเปลี่ยนแปลงแก้ไขข้อผิดพลาดของระบบงานภายในผังงานได้ง่ายกว่าการหา
ข้อผิดพลาดทีเ่ กิดจากการเขียนโปรแกรม
ช่วยลดความสับสนในการพัฒนาโปรแกรม
8
ผังงาน (Flow chart)
สัญลักษณ์ทน่ี ามาใช้ในเขียนผังงานมี 8 สัญลักษณ์
สัญลักษณ์
Terminator
Process
Data
Decision
ความหมายสัญลักษณ์ในการใช้งานในผังงาน
จุดเริม่ ต้น และจุดสิน้ สุดของโปรแกรม
การประมวลผลหรือการคานวณของโปรแกรม
รับข้อมูลเข้ามาในโปรแกรม หรือส่งค่าออกไปจากโปรแกรม
ตรวจสอบเงือ่ นไข แล้วเลือกการทางานของโปรแกรม
แสดงผลออกทางเอกสาร
จุดเชือ่ มต่อหลายเส้นทางของโปรแกรมให้เหลือการเข้ามาเพียง
On-page reference เส้นทางเดียว
ขึน้ หน้าใหม่ในกรณีทผ่ี งั งานมีความยาวเกินกว่าทีจ่ ะแสดงพอใน
Off-page reference หนึ่งหน้า
Document
ลูกศรแสดงทิศทางการทางานของโปรแกรมและข้อมูล
9
ผังงาน (Flow chart)
ตัวอย่างที่ 1.3 แสดงผังงานขันตอนการใช้
้
ตกู้ ดเงินอัตโนมัติ (ATM) เพือ่ โอนเงิน
10
ผังงาน (Flow chart)
ตัวอย่างที่ 1.4 แสดงผังงานอัลกอริทมึ ค้นหาข้อมูลในอาร์เรย์ขนาด n ข้อมูล
11
โค้ดรหัสเทียม (Pseudo code)
•
•
•
•
เป็ นโครงสร้างรหัสทีร่ วมทัง้ ภาษาเขียนกับภาษาคอมพิวเตอร์เข้าไว้ดว้ ยกัน
ใช้ในการอธิบายโครงสร้างและลาดับขัน้ ตอนการทางานของโปรแกรม
ไม่อา้ งอิงภาษาคอมพิวเตอร์ภาษาใดภาษาหนึ่ง
เป็ นสือ่ กลางแทนการเขียนด้วยโค้ดโปรแกรม
12
โค้ดรหัสเทียม (Pseudo code)
ตัวอย่างที่ 1.5 แสดง Pseudo code การค้นหาข้อมูลในอาร์เรย์
1
2
3
4
5
6
7
8
9
+searching(in theArray:arrayType,in KeySearch:keyType,in MaxData:integer):boolean
for (n = 0 to MaxData-1){
if (theArray[n] == KeySearch){
data is found data then return true
}
}
if (n == MaxData-1){
data is not found then return false
}
13
โค้ดรหัสเทียม (Pseudo code
ตัวอย่างที่ 1.6 แสดง Pseudo code แสดงผลการเรียน (Grade) จากคะแนนทีร่ บั เข้ามา
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+showgrade(in score:double)
if (score >= 80)
output “A”
else if (score >= 75)
output “B+”
else if (score >= 70)
output “B”
else if (score >= 65)
output “C+”
else if (score >= 60)
output “C”
else if (score >= 55)
output “D+”
else if (score >= 50)
output “D”
else output “F”
14
Abstract Data Type
Abstract Data Type หรือเรียกว่า ADT
•
•
•
•
เป็ นการประกาศถึงคุณสมบัตขิ องโครงสร้างข้อมูลและกลุ่มตัวดาเนินการที่กระทากับ
โครงสร้างข้อมูล
คุณสมบัตโิ ครงสร้างข้อมูลทีก่ าหนดใน ADT แสดงถึงลักษณะของโครงสร้างข้อมูลที่
นามาใช้งาน
กลุ่ ม ตัว ด าเนิ น การจะเป็ น ฟ งั ก์ ช ัน ที่ก าหนดการท างานของโปรแกรมที่ก ระท ากับ
โครงสร้างข้อมูล
แต่ละกลุ่มตัวดาเนินการจะทางานอย่างอิสระไม่เกีย่ วเนื่องกัน และมีลกั ษณะการทางาน
ทีช่ ดั เจน
15
Abstract Data Type
ตัวอย่างที่ 1.7 รายการ ADT แสดงการจัดการรายการสิง่ ของในร้านค้า
1.
2.
3.
4.
5.
6.
7.
Create an empty list. (สร้างรายการว่างเปล่า)
Determine whether a list is empty. (สนใจรายการทีว่ า่ งเปล่า)
Determine the number of items on a list. (สนใจตัวเลขสิง่ ของในรายการ)
Add an item at a given position in the list. (เพิม่ สิง่ ของในตาแหน่งทีใ่ ห้มาในรายการ)
Remove the item at a given position in the list. (ลบสิง่ ของในตาแหน่งทีใ่ ห้มาในรายการ)
Remove all the items from the list. (ลบสิง่ ของทัง้ หมดในรายการ)
Retrieve (get) the item at a given position in the list. (นาสิง่ ของกลับคืนมาในตาแห่งทีใ่ ห้มาในรายการ)
16
Abstract Data Type
• จากรายการ ADT ตัวอย่างที่ 1.7 นาไปเขียนเป็ น Pseudo code
+createList()
//สร้างรายการว่างเปล่า
+isEmpty():boolean{query}
//สนใจรายการทีว่ า่ งเปล่า
+size():integer{query}
//คืนค่าตัวเลขรายการทัง้ หมด
+add(in index:integer, in item:ListItemType)
//เพิม่ ข้อมูล (item) ในตาแหน่ง index ในรายการ ถ้า 0 <= index < size()
//ถ้า index = size()+1 ไม่เพิม่ ข้อมูลในรายการเนื่องจากรายการเต็ม
+remove(in index:integer)
//ลบข้อมูลในตาแหน่งของ index ในรายการ ถ้า 0 <= index < size()
//ถ้า index < 0 ไม่ลบข้อมูลในรายการเนื่องจากรายการว่างเปล่า
+removeAll()
//ลบข้อมูลทัง้ หมดในรายการ
+get(in index:ListItemType){queue}
//คืนค่า item ในตาแหน่ง index ของรายการ ถ้า 0 <= index < size()
//ให้เลือ่ น index ไปทางซ้าย(ลดค่า index ลงหนึ่งตาแหน่ง) และไม่คนื ค่าถ้า index เกินขอบเขตทีก่ าหนด
17
ประเภทของอัลกอริทมึ
• Brute force algorithm อัลกอริทมี แก้ไขปญั หาโดยสังให้
่ ทางานไปเรือ่ ยๆ จนกระทัง้
ได้คาตอบของทุกปญั หา
• Divide and Conquer algorithm เป็ นอัลกอริทมึ ทีม่ หี ลักการคียด์ ว้ ยการแยกปญั หา
ออกเป็ นสองส่วน คือ ส่วนทีห่ นึ่งแบ่งปญั หาออกเป็ นส่วนเล็กๆ แล้วแก้ไขปญั หาในส่วน
เล็กๆ นัน้ ก่อน และอีกส่วนนาผลทีไ่ ด้จากการแก้ไขปญั หาในส่วนเล็กๆ กลับมาร่วมกัน
ใหม่ เช่น การจัดรียงข้อมูลแบบ Quick sort, Merge sort เป็ นต้น
• Decrease and Conquer algorithm เป็ นอัลกอริทมึ ทีแ่ ก้ไขปญั หาด้วยการลดขนาด
ของปญั หาลง และเลือกขนาดของกลุ่มปญั หาทีต่ อ้ งการแก้ไขปญั หา โดยละเว้นปญั หา
บางส่วนไว้ก่อน เพือ่ จะแก้ปญั หาทีม่ ขี นาดเล็กลงกว่าเดิม เนื่องจากการแก้ไขปญั หาทีม่ ี
ั หาได้ง่า ยกว่า ตัวอย่า งอัล กอริทึมที่ใช้ห ลัก การ
ขนาดเล็ก กว่า จะสามารถแก้ไ ขป ญ
Decrease and Conquer algorithm เช่น การค้นหาข้อมูลแบบไบนารี เป็ นต้น
18
ประเภทของอัลกอริทมึ
• Transform and Conquer algorithm การแก้ไขปญั หาด้วยการเปลีย่ นรูปแบบของ
ปญั หาทีต่ อ้ งการแก้ไขให้อยู่ในรูปแบบอื่นก่อน ด้วยคาดหวังว่าเมือ่ เปลีย่ นรูปแบบของ
ปญั หาแล้วจะสามารถแก้ไขปญั หาได้งา่ ยและรวดเร็วขึน้ เช่น นาข้อมูลทีต่ อ้ งการค้นหา
มาจัดเรียงข้อมูลก่อนทีจ่ ะค้นหา
• Greedy algorithm หรือ อัลกอริทึมแบบละโมบ อัลกอริทมึ ทีม่ ลี กั ษณะการแก้ไข
ปญั หาด้วยการเพิม่ ประสิทธิภาพของการแก้ไขปญั หาให้เหมาะสมทีส่ ุด (Optimization
problems) ซึง่ เป็ นรูปแบบอัลกอริทมึ ทีพ่ จิ ารณาคาตอบทีด่ ที ส่ี ุดและคุม้ ค่าทีส่ ุดในการ
แก้ไขปญั หานัน้ ๆ เช่นปญั หาการทอนเหรียญ คือ เลือกทอนเหรียญจากหน่วยทีม่ ขี นาด
ให้ทส่ี ุดก่อน เป็ นต้น
• Dynamic programming algorithm หรือ อัลกอริทึมโปรแกรมพลวัต อัลกอริทมึ ที่
มีลกั ษณะของการแก้ไขปญั หาด้วยการแบ่งปญั หาเป็ นส่วยเล็กๆ แล้วนาผลของปญั หา
เล็กๆ ทีด่ ที ส่ี ุดนามาแก้ไขปญั หาใหญ่ ทีเ่ รียกกันว่า การแก้ไขปัญหาจากล่างขึ้นบน
(Bottom-up approach) เช่น การหาค่าตัวเลข Fibonacci เป็ นต้น
19
ประเภทของอัลกอริทมึ
• Backtracking algorithm หรือ อัลกอริทึมย้อนรอยถอยหลัง อัลกอริทมึ ค้นหา
เส้นทางทุกเส้นทางทีเ่ ป็ นไปได้เพือ่ หาคาตอบของปญั หาทีละส่วนย่อยว่าคาตอบนัน้ เป็ น
คาตอบทีถ่ ูกต้องหรือไม่ แต่คาตอบนัน้ ไม่ใช่สว่ นหนึ่งของคาตอบจะถอยหลังกลับมาจุด
เดิม และยกเลิกคาตอบนัน้ แล้วค้นหาคาตอบใหม่ เช่น การกาหนดสีให้กบั เมืองในแผน
ที,่ การคิดความเป็ นไปได้ทงั ้ หมดของการเดินหมากกระดาน เป็ นต้น
• Branch and bound algorithms อัลกอริทมึ ทีเ่ พิม่ ประสิทธิภาพในการแก้ไขปญั หา
ด้วยการนาโครงสร้างทรี (Tree) มาเก็บปญั หาย่อยๆ โดยที่ปญั หาหลักจะอยู่ใน
ตาแหน่งบนสุดของ ทรี คือโหนดราก (root node) และในแต่ละโหนดจะแก้ไขปญั หา
ของตัวเอง และถ้าแก้ปญั หาถูกต้องใช้ผลนัน้ เป็ นข้อมูลในการแก้ไขปญั หาทัง้ หมด แต่
ถ้าการแก้ไขปญั หาไม่ถูกต้องให้ทาการแบ่งปญั หาออกเป็ นสองโหนดย่อยเก็บไว้ใน
ตาแหน่ งโหนดลูกของโหนดทีแ่ ก้ไขปญั หาไม่ถูกต้อง แล้วกลับไปทาใหม่จนกระทัง้ ทุก
ั หาได้ทุก โหนด เช่น ป ญ
ั หาในการหาเส้น ทางที่
โหนดย่อ ยในทรีส ามารถแก้ไ ขป ญ
เหมาะสมให้กบั พนังงานขายสินค้าให้สามารถเดินทางได้ครบทุกทีไ่ ด้เร็วทีส่ ุด เป็ นต้น
20
ประเภทของอัลกอริทมึ
• Recursive algorithm หรือ อัลกอริทึมแบบวนซา้ เป็ นการแก้ไขปญั หาขัน้ พืน้ ฐาน
ด้วยการเรียกใช้ตวั เองซ้าๆ โดยนาข้อมูลปญั หาส่วนย่อยของปญั หาทัง้ หมดกลับมาเป็ น
ข้อมูลในการแก้ไขปญั หา เช่น การหาค่า Factorial, อัลกอริทมึ บวกข้อมูลตัวเลขทีอ่ ยู่
ในกลุ่ม เป็ นต้น
• Randomized algorithms หรือ อัลกอริทึมแบบสุ่ม อัลกอริทมึ ทีใ่ ช้หลักการสุม่ ข้อมูล
แล้วนาข้อมูลทีส่ ุ่มเลือกขึน้ มาได้กระทากับอัลกอริทมึ เพื่อให้ได้ผลตามทีต่ ้องการ เช่น
พยายามหาข้อมูลที่สาคัญที่สุดด้วยการเลือกข้อมูลจากการสุ่มด้วยการหาร หรือการ
จัดเรียงข้อมูลแบบ Quicksort ด้วยการสุ่มตัวเลขทีใ่ ช้เป็ นข้อมูลเพื่อใช้ในการเปรียบ
(pivot) ในการจัดเรียงข้อมูล เป็ นต้น
21
สรุปเนื้อหาบทที่ 1
•
•
•
•
โครงสร้างข้อมูล คือ การจัดการข้อมูลในหน่วยความจาภายในเครือ่ งคอมพิวเตอร์
อัลกอริทมึ คือ ลาดับขัน้ ตอนการทางานเพือ่ ใช้ในการแก้ไขปญั หา
ผังงาน เป็ นเครือ่ งมือทีช่ ว่ ยออกแบบขันตอนการท
้
างานด้วยสัญลักษณ์
โ ค้ ด ร หั ส เ ที ย ม เ ป็ น โ ค รง สร้ า ง ร หั ส ที่ ม ี ก า รร่ ว ม กั น ทั ้ง ภา ษา เขี ย น กั บ
ภาษาคอมพิวเตอร์ เพื่อใช้ในการอธิบายโครงสร้างและลาดับขัน้ ตอนการทางาน
ของโปรแกรม โดยไม่อา้ งอิงภาษาการเขียนโปรแกรมภาษาใดภาษาหนึ่ง
• Abstract Data Type เป็ นการบอกถึงคุณสมบัตขิ องโครงสร้างข้อมูลและกลุ่มตัว
ดาเนินการทีก่ ระทากับโครงสร้างข้อมูล
ั หาของ
• ประเภทของอัล กอริทึม แยกได้เ หมือ นกับ แยกรูป แบบในการแก้ไ ขป ญ
โปรแกรม การแยกประเภทของอัลกอริทมึ เพื่อแยกรูปแบบอัลกอริทมึ ในการแก้ ไข
ปญั หานัน้ เอง
22

similar documents