อัลกอริทึมและผังงาน อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี (tko@webmail.npru.ac.th)
เนื้อหาที่สนใจ • ขั้นตอนวิธีการแก้ปัญหาหรืออัลกอริทึม (algorithm) • การวัดประสิทธิภาพของขั้นตอนวิธี •
ขั้นตอนวิธีที่ดี
• การวิเคราะห์ขั้นตอนวิธี • การออกแบบขั้นตอนวิธี • รูปแบบการเขียนขั้นตอนวิธี – การเขียนบรรยาย – การเขียน Pseudo Code – การเขียนผังงาน
• การใช้ผังงานในการแสดงขั้นตอนวิธี • ขั้นตอนวิธีการที่นิยมนามาใช้แก้ปัญหา • รูปแบบการทางานในแต่ละขั้นตอนวิธี http://1.bp.blogspot.com/-tw1caa8lBus/Vphe8RV3rwI/AAAAAAAAAKM/wAhp-ds7iQM/s1600/8.png
ขั้นตอนวิธีการแก้ปัญหา • เมื่อพบกับปัญหา แต่ละคนจะมีวิธีจัดการหรือแก้ปัญหาที่แตกต่างกันไป • แต่ละวิธีการอาจให้ผลลัพธ์ที่เหมือนหรือแตกต่างกันบ้าง ทั้งนีข้ ึ้นอยู่กับ ความรู้ ความสามารถ และประสบการณ์ของบุคคล • การวิเคราะห์และหาวิธีการแก้ปัญหา สามารถสรุปเป็นรูปแบบที่แน่นอน และต้องเรียนรู้เพิ่มเติม เพื่อแก้ปัญหาได้อย่างสมบูรณ์ • การตอบสนองความต้องการของมนุษย์ โดยอาศัยความรู้และประสบการณ์ ในการเขียนโปรแกรมให้คอมพิวเตอร์ทางานตามที่ต้องการ
https://blog.kissmetrics.com/google-algorithm-
อัลกอริทึม (algorithm) • การทางานอย่างเดียวกัน อาจเลือกขั้นตอนวิธีทตี่ ่างกันได้ ผลลัพธ์ที่ได้จะ เหมือนหรือต่างกันก็ได้ – ความแตกต่างของจานวนและชุดคาสั่งที่ใช้ต่างกัน – ส่งผลให้ เวลา (time) – ขนาดหน่วยความจา (space) ที่ต้องการต่างกัน – ความซับซ้อน (complexity) ต่างกัน
https://www.rkdf.ac.in/Result.php
การวัดประสิทธิภาพของอัลกอริทึม • สิ่งที่ต้องพิจารณา 1) โปรแกรมนั้นใช้เนื้อที่ความจา (Memory) มากน้อยเพียงใด 2) โปรแกรมนั้นใช้อัลกอริทึม (Algorithm) ที่เร็วเพียงใด ในทางทฤษฎี จะระบุความเร็วการทางานของอัลกอริทึม โดย พิจารณา หรือประมวลผลจานวนข้อมูลที่อัลกอริทึมนั้นกระทาก่อนที่จะได้ ผลลัพธ์ว่ามีการทางานกี่ครั้ง จานวนครั้งแทนด้วย N ความเร็วในการ ทางานเรียกว่า ฟังก์ชั่น บิ๊กโ-อ (big-oh) : Order of N หรือ O(N)
http://combiboilersleeds.com/keywords/score-
อัลกอริทึม (algorithm) • ขั้นตอนวิธี หรือ อัลกอริทึม (algorithm) หมายถึง กระบวนการแก้ปัญหา ที่สามารถเข้าใจได้ตามลาดับหรือวิธีการแก้ปัญหาที่มีประสิทธิภาพ ซึ่ง แตกต่างจากการแก้ปัญหาแบบสามัญสานึก • ขั้นตอนวิธี ประกอบด้วยขั้นตอนต่างๆ เช่น – การทาตามลาดับ – การแบบวนซ้า (iterate) หรือ เวียนเกิด (recursive) – การใช้ตรรกะ (logic) และ/หรือ ในการเปรียบเทียบ (comparison)
• การแก้ไขปัญหาและการตัดสินใจ ต้องใช้ทักษะในการตัดสินใจที่ดี – เพื่อให้เกิดผลลัพธ์ที่คุ้มค่า http://www.entraining.net/in-house_decision-making-manager.php
อัลกอริทึม (algorithm) • การนาขั้นตอนวิธีไปใช้ ไม่จากัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ • แต่สามารถใช้กับปัญหาอื่น ๆ ได้ เช่น – การออกแบบวงจรไฟฟ้า – การทางานเครื่องจักรกล – ปัญหาในธรรมชาติ เช่น วิธีการคิดเลขของมนุษย์ หรือวิธีการขนอาหารของแมลง
www.cpmscheduling.com
การวิเคราะห์ขั้นตอนวิธี • การวิเคราะห์และกาหนดรายละเอียดของปัญหา (State the problem) – Input การนาเข้า – Process กิจกรรม/วิธีการประมวลผล (การกระทา) – output การแสดงผลลัพธ์
• การเลือกเครื่องมือและออกแบบขั้นตอนวิธี (Tools and Algorithm development)
• การดาเนินการแก้ปัญหา (Implementation) • การตรวจสอบและปรับปรุง (Refinement) http://www.nickols.us/ten_tips.htm http://www.krunee.com/E_learning/content41
การออกแบบขั้นตอนวิธี • ก่อนการเขียนโปรแกรม ต้องออกแบบขั้นตอนวิธี ซึ่งเป็นขั้นตอนการ ทางานในการแก้ปัญหา เพื่อช่วยให้การเขียนโปรแกรมเป็นไปได้สะดวก และรวดเร็วขึ้น
http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToAlgo
รูปแบบการเขียนขั้นตอนวิธี 1.ลักษณะการบรรยาย (Narrative Description) 2.การเขียนผังงาน (Flowchart) 3.รหัสเทียมที่เรียกว่า การเขียนซูโดโค้ด (Pseudo Code) http://www.conceptdraw.com/How-To-Guide/flowchartsymbols
https://krupooh93.wordpress.com/2016/11/04/1-3- ซูโดโค้ดและ การเขียนผั/
– ผังงาน เห็นภาพที่สุด – บรรยาย ต้องใช้ความสามารถสูงในการเขียนบรรยายหรืออธิบาย – รหัสเทียม ใกล้เคียงการเขียนโปรแกรม https://sites.google.com/site/seiyngphelngkabseiyngkrid66/home/khxkhid-cak-reuxng/kha-xuthan-maryath-ni-kar-saedng/kar-
ขั้นตอนวิธีที่ดีควรมีคุณสมบัติ 1) มีความถูกต้อง 2) ใช้เวลาในการปฏิบัติงานน้อยที่สุด 3) สั้น กระชับ 4) ใช้หน่วยความจาน้อยที่สุด 5) มีความยืดหยุ่นในการใช้งาน 6) ใช้เวลาในการพัฒนาน้อยที่สุด 7) ง่ายต่อการทาความเข้าใจ
http://joma.tk/good/
Algorithm ที่นิยมนามาใช้แก้ปัญหา • อัลกอริทึมที่นิยมใช้กันมาก ได้แก่ 1) อัลกอริทึมแบบแตกย่อย (Divide-and-conquer) จะนา ปัญหาหลักมาทาการแตกย่อยแล้วนาคาตอบที่ได้จากการแตกย่อยมา รวมเข้าด้วยกัน 2) อัลกอริทึมแบบเคลื่อนที่ (Dynamic Programming) เป็นการ หลีกเลี่ยงการคานวณเพื่อหาคาตอบซ้า ๆ ซาก ๆ ซึ่งหากมีการคานวณซ้า อีก ก็นาคาตอบที่เก็บไว้มาใช้ได้ 3) อัลกอริทึมแบบทางเลือก (Greedy Algorithm) จะหาคาตอบ โดยเลือกทางเลือกที่ดีที่สุดที่พบได้ในขณะนั้น https://www.youtube.com/watch?v=qErwUZXXGlM
การเขียนบรรยาย • การเขียนอธิบายขั้นตอนการทางาน – – – –
• • • •
การอธิบายตามลาดับ แสดงขั้นตอนของกิจกรรมและการปฏิบัติหรือการเปลี่ยนแปลง ทาให้ผู้อื่นเข้าใจ เหมาะกับการอธิบาย ขั้นตอนและกรรมวิธีซึ่งเป็นลาดับ
https://wisnun.wordpress.com/การสอน/ทักษะเทคนิค การสอน
การเขียนอธิบายด้วยการให้คาจากัดความ การเขียนอธิบายด้วยการให้รายละเอียดและการยกตัวอย่างประกอบ การเขียนอธิบายเพื่อเปรียบเทียบความเหมือนหรือแตกต่าง การเขียนอธิบายเพื่อชี้ให้เห็นสาเหตุและผลลัพธ์ที่สัมพันธ์กัน
http://schoolweb.eduzones.com/nisarat/content.php?view=201303272131 301tgarkk https://prezi.com/kwcnzmg8ax22/presenta
การเขียนรหัสเทียม • การกาหนดโครงร่างกระบวนการทางานของโปรแกรม • คาสั่งทีจ่ าลองความคิดเป็นลาดับขั้นตอน โดยใช้ประโยคคาสั่งหรือ สัญลักษณ์แสดงให้เห็นการทางานของโปรแกรม • คล้ายการเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ • สามารถนาไปพัฒนาเป็นชุดคาสั่งด้วยภาษาคอมพิวเตอร์ได้ง่าย
http://mr-west.uk/algorithms/pseudocode/
รูปแบบการเขียน Pseudo Code • • • • • •
1. การกาหนดค่า และการคานวณ 2. การอ่าน/รับข้อมูล 3. การแสดงผลข้อมูล 4. การกาหนดเงื่อนไข 5. ในกรณีที่มีหลายเงื่อนไข 6. การทางานเป็นรอบ (Loop)
https://sites.google.com/site/programmingm42/-rhas-theiym-psuedocode
Algorithm Problem_1 Variables : mLoop, Sum, testScore, average Begin Input mLoop Sum = 0 For I = 1 to mLoop Input testScore Sum = Sum + testScore Next average = Sum / mLoop Print average End Problem_1
การเขียนผังงาน • ผังงาน หรือสัญลักษณ์ที่กาหนดขึ้น เพื่อแสดงขั้นตอนและวิธีการตาม มาตรฐาน แสดงให้เห็นโครงสร้างทั้งหมดในการแก้ปัญหาก่อนลงมือเขียน โปรแกรม • (Standard Flowchart Symbols)
https://www.edrawsoft.com/flowchart-symbols.php
การเขียนผังงาน • • • • • •
ควรมีจุดเริ่มต้น-จุดสิ้นสุด เพียงจุดเดียวในแต่ละงาน การดาเนินการจากบนลงล่าง ด้านหน้าไปด้านหลัง ใช้ลูกศรแสดงทิศทางที่ชัดเจน ใช้สัญลักษณ์ตามแบบมาตรฐาน สัญลักษณ์มีขนาดตามความเหมาะสม มีการเขียนอธิบายให้เข้าใจง่าย สั้นและชัดเจน
https://stwannaporn.wordpress.com/2014/06/29/การเขียนผังงานflowchart/
การใช้ผังงานในการแสดงขั้นตอนวิธี • • • • • •
เมื่อรู้ว่าจะแก้ปัญหาอย่างไร การใช้ผังงานแสดงให้เห็นภาพหรือรายละเอียดในการดาเนินการ เพื่อให้สามารถเขียนโปรแกรมได้ตามที่คิดหรือออกแบบ ง่ายต่อการปรับปรุงแก้ไขขั้นตอนและวิธีการ ตรวจสอบข้อผิดพลาดได้ง่าย ป้องกันความผิดพลาดในการทางานร่วมกัน
http://pangrutai.blogspot.com/
รูปแบบการทางานในขั้นตอนวิธี • ในการแสดงขั้นตอนวิธี ประกอบด้วยรูปแบบได้ดังนี้ – แบบกาหนดขอบเขต – แบบลาดับขั้นตอน – แบบเงื่อนไขและทางเลือกด้วยตรรกะ (logic) และ/หรือ เปรียบเทียบ (comparison) – แบบวนทาซ้า (iterate) หรือ เวียนเกิด (recursive) – แบบแบ่งย่อย (function)
สรุป • อัลกอริทึม เป็นเครื่องมือในการแสดงขั้นตอนการทางาน • ช่วยให้การเขียนโปรแกรมเป็นไปได้อย่างรวดเร็วและถูกต้อง • เครื่องมือที่ใช้ในการอธิบายอัลกอริทึม ได้แก่ การเขียนหรือพูดอธิบาย การ ใช้รหัสเทียม การใช้ผังงาน • รูปแบบการทางานของอัลกอริทึม ประกอบด้วยรูปแบบต่างๆ ได้แก่ การ กาหนดขอบเขต การทางานเป็นขั้นตอน การควบคุมและการตัดสินใจด้วย ตรรกะ และ/หรือ การเปรียบเทียบ การทาซ้า รวมถึงการแบ่งส่วนให้ง่าย ในการประมวลผล เป็นต้น