อัลกอริทึมและผังงาน อาจารย์สมเกียรติ ช่อเหมือน สาขาวิชาวิศวกรรมซอฟต์แวร์ คณะวิทยาศาสตร์และเทคโนโลยี (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-change/
อัลกอริทึม (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-1.html
อัลกอริทึม (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/content4111.html
การออกแบบขั้นตอนวิธี ก่อนการเขียนโปรแกรม ต้องออกแบบขั้นตอนวิธี ซึ่งเป็นขั้นตอนการทำงานในการแก้ปัญหา เพื่อช่วยให้การเขียนโปรแกรมเป็นไปได้สะดวกและรวดเร็วขึ้น http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToAlgorithms
รูปแบบการเขียนขั้นตอนวิธี 1.ลักษณะการบรรยาย (Narrative Description) 2.การเขียนผังงาน (Flowchart) 3.รหัสเทียมที่เรียกว่า การเขียนซูโดโค้ด (Pseudo Code) ผังงาน เห็นภาพที่สุด บรรยาย ต้องใช้ความสามารถสูงในการเขียนบรรยายหรืออธิบาย รหัสเทียม ใกล้เคียงการเขียนโปรแกรม http://www.conceptdraw.com/How-To-Guide/flowchart-symbols 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-kheiyn-brryay
ขั้นตอนวิธีที่ดีควรมีคุณสมบัติ 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=201303272131301tgarkk https://prezi.com/kwcnzmg8ax22/presentation/
การเขียนรหัสเทียม การกำหนดโครงร่างกระบวนการทำงานของโปรแกรม คำสั่งที่จำลองความคิดเป็นลำดับขั้นตอน โดยใช้ประโยคคำสั่งหรือสัญลักษณ์แสดงให้เห็นการทำงานของโปรแกรม คล้ายการเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ สามารถนำไปพัฒนาเป็นชุดคำสั่งด้วยภาษาคอมพิวเตอร์ได้ง่าย http://mr-west.uk/algorithms/pseudocode/
รูปแบบการเขียน Pseudo Code 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 1. การกำหนดค่า และการคำนวณ 2. การอ่าน/รับข้อมูล 3. การแสดงผลข้อมูล 4. การกำหนดเงื่อนไข 5. ในกรณีที่มีหลายเงื่อนไข 6. การทำงานเป็นรอบ (Loop) https://sites.google.com/site/programmingm42/-rhas-theiym-psuedo-code
การเขียนผังงาน ผังงาน หรือสัญลักษณ์ที่กำหนดขึ้น เพื่อแสดงขั้นตอนและวิธีการตามมาตรฐาน แสดงให้เห็นโครงสร้างทั้งหมดในการแก้ปัญหาก่อนลงมือเขียนโปรแกรม (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)
สรุป อัลกอริทึม เป็นเครื่องมือในการแสดงขั้นตอนการทำงาน ช่วยให้การเขียนโปรแกรมเป็นไปได้อย่างรวดเร็วและถูกต้อง เครื่องมือที่ใช้ในการอธิบายอัลกอริทึม ได้แก่ การเขียนหรือพูดอธิบาย การใช้รหัสเทียม การใช้ผังงาน รูปแบบการทำงานของอัลกอริทึม ประกอบด้วยรูปแบบต่างๆ ได้แก่ การกำหนดขอบเขต การทำงานเป็นขั้นตอน การควบคุมและการตัดสินใจด้วยตรรกะ และ/หรือ การเปรียบเทียบ การทำซ้ำ รวมถึงการแบ่งส่วนให้ง่ายในการประมวลผล เป็นต้น