การออกแบบขั้นตอนวิธี
การออกแบบขั้นตอนวิธี
การออกแบบอัลกอริทึม (Algorithm)
การออกแบบอัลกอริทึม (Algorithm) เป็นการพัฒนากระบวนการหาคำตอบให้เป็นขั้นตอนที่บุคคลหรือคอมพิวเตอร์สามารถนำไปปฏิบัติตามเพื่อแก้ปัญหาได้ อีกทั้ง เป็นการพัฒนาแนวทางแก้ปัญหาอย่างเป็นขั้นเป็นตอน เพื่อดำเนินตามทีละขั้นตอนในการแก้ไขปัญหา เช่น เมื่อเราต้องการสั่งคอมพิวเตอร์ให้ทำงานบางอย่าง เราจะต้องเขียนโปรแกรมคำสั่งเพื่อให้คอมพิวเตอร์ทำงานไปตามขั้นตอน ตามแนวทางการแก้ปัญหาเพื่อให้คอมพิวเตอร์ทำงานตอบสนองความต้องการของเรา วิธีคิดนี้ที่เรียกว่าวิธีคิดแบบอัลกอริทึม คอมพิวเตอร์จะทำงานได้ดีเพียงใดนั้น ขึ้นอยู่กับชุดคำสั่งอัลกอริทึมที่เราออกแบบให้มันทำงานนั่นเอง การออกแบบอัลกอริทึมยังเป็นประโยชน์ต่อการคำนวณ การประมวลผลข้อมูลและการวางระบบอัตโนมัติต่าง ๆ
ภาพที่ 1 การออกแบบอัลกอริทึม
ที่มา https://www.wired.com/story/want-to-prove-your-business-is-fair-audit-your-algorithm/,JESSI HEMPEL
การนำอัลกอริทึมไปใช้แก้ปัญหา ไม่จำกัดเฉพาะการเขียนโปรแกรมคอมพิวเตอร์ แต่สามารถใช้กับปัญหาอื่น ๆ ได้เช่นเดียวกัน เพื่อให้เกิดการใช้ทรัพยากรอย่างมีประโยชน์สูงสุด ซึ่งจำเป็นต้องวางแผนอย่างเป็นระบบ เป็นขั้นตอน จึงจำเป็นต้องอาศัยอัลกอริทึม ด้วย เพื่อให้ทราบถึงขั้นตอนต่าง ๆ และสามารถตัดทอนขั้นตอนที่เกินความจำเป็น อีกทั้งยังสามารถปรับปรุง และเพิ่มเติมขั้นตอนใหม่ เข้าไปได้ ช่วยลดความสับสนขณะทำงานด้วย อีกทั้ง ปัญหาบางปัญหาอาจจะมีอัลกอริทึมในการแก้ปัญหาได้หลายวิธี นอกจากการเขียนคำสั่งให้คอมพิวเตอร์ทำงานตามลำดับขั้นตอนที่เราวางไว้ ในชีวิตประจำวันมนุษย์ก็ล้วนมีแนวคิดการออกแบบขั้นตอนในการแก้ไขปัญหา ทำให้ทราบว่าจะต้องทำอะไรก่อนอะไรหลัง เช่น การแต่งตัวมาโรงเรียน การทำอาหาร การทำงานในชีวิตประจำวัน การเดินทาง เป็นต้น
ภาพที่ 2 การลำดับแต่งตัวมาโรงเรียน
ที่มา https://www.freepik.com/free-vector/hand-drawn-children-back-schoolcollection_4943651.htm#page=1&query=student%20
uniform&position=43, freepik
คุณสมบัติของอัลกอริทึม
1. มีความถูกต้อง (correctness) ความถูกต้องเป็นคุณสมบัติข้อแรกที่สำคัญจะต้องพิจารณา ต้องได้ผลลัพธ์ที่ถูกต้อง ซึ่งถ้าผลลัพธ์ที่ได้จากอัลกอริทึมไม่ถูกต้อง จะถือว่าไม่ใช่อัลกอริทึมที่ดี
2. ใช้เวลาในการปฏิบัติงานน้อยที่สุด (efficiency) อัลกอริทึมที่ดีต้องใช้เวลาในการปฏิบัติงานน้อย มีขั้นตอนในการปฏิบัติงานที่ถูกต้อง
3. ต้องมีลำดับขั้นตอนที่ชัดเจน ในการประมวลผลชุดคำสั่งต่าง ๆ ที่ถูกกำหนดด้วยกฎเกณฑ์ในการแก้ปัญหาของ อัลกอริทึม จะต้องประมวลผลเป็นลำดับตามขั้นตอน เพราะการแก้ปัญหาด้วยคอมพิวเตอร์จะต้อง มีลำดับขั้นตอนที่แน่นอน ซึ่งแต่ละขั้นตอนของอัลกอริทึมจะต้องทำหน้าที่อย่างชัดเจนและต่อเนื่องโดยการเริ่มต้นทำงานแต่ละขั้นตอนมีการรับและส่งข้อมูลต่อเนื่องกันไปจนสิ้นสุดการทำงาน ถ้าลำดับไม่ดีอาจจะทำให้การประมวลผลผิดพลาดได้
4. ใช้เนื้อที่ในหน่วยความจำน้อยที่สุด เนื้อที่ในหน่วยความจำจะถูกใช้สำหรับเก็บค่าของตัวแปร และเก็บคำสั่งที่ใช้ในการทำงาน ดังนั้น ถ้าอัลกอริทึมยาวเกินความจำเป็น จะทำให้ใช้เนื้อที่มาก และ ถ้ามีตัวแปรมากเกินความจำเป็น ก็จะทำให้เสียเนื้อที่ในหน่วยความจำไปด้วย
5. มีความยืดหยุ่นในการใช้งาน
6. ใช้เวลาในการพัฒนาน้อยที่สุด เมื่อนำอัลกอริทึมไปแปลงเป็นโปรแกรมภาษาคอมพิวเตอร์แล้วจะต้องใช้เวลาน้อยที่สุด
7. ง่ายต่อการทำความเข้าใจ (readability) อ่านง่ายเข้าใจลำดับขั้นตอนได้ง่าย มีความชัดเจนของขั้นตอน
เครื่องมือช่วยในการเขียนอัลกอริทึม
การออกแบบอัลกอริทึม เป็นแนวทางในการเขียนโปรแกรม ช่วยให้การเขียนโปรแกรมทำได้ง่ายขึ้น ช่วยให้โปรแกรมมีข้อผิดพลาดน้อยลง นอกจากนี้ยังช่วยตรวจสอบการทำงานของโปรแกรม ทำให้ทราบขั้นตอนการทำงานของโปรแกรมได้อย่างรวดเร็ว โดยไม่ต้องดูจากโปรแกรมจริงในการเขียนอัลกอริทึม มีเครื่องมือช่วยในการเขียนที่นิยมใช้ 3 แบบ คือ
1. บรรยาย (narrative description) เป็นการอธิบายแบบใช้ภาษาที่เราสื่อสารกันทั่วไป เป็นการแสดงขั้นตอนการทำงานในลักษณะการบรรยายเป็นข้อความด้วยภาษาพูดใด ๆ เช่น ภาษาไทย ภาษาอังกฤษ ภาษาญี่ปุ่น หรือ ภาษาจีน เป็นต้น ขึ้นอยู่กับความถนัดของผู้เขียนอัลกอริทึม มักเขียนบรรยายขั้นตอนการทำงานเป็นข้อ ๆ เช่น การต้มบะหมี่กึ่งสำเร็จรูป
1. เทน้ำสะอาดใส่หม้อ และต้มน้ำจนเดือด
2. ฉีกซองและนำบะหมี่กึ่งสำเร็จรูปใส่ลงในหม้อ
3. เทเครื่องปรุงลงในหม้อ
4. ปิดฝา
5. รอประมาณ 3 นาที
6. เทใส่ชามรับประทานได้
2. ผังงาน (flowchart) เป็นการใช้รูปภาพสัญลักษณ์ แทนขั้นตอนการเขียนโปรแกรมช่วยลำดับขั้นตอนการทำงานของโปรแกรม และสามารถนำไปเขียนโปรแกรมได้อย่างถูกต้อง ทำให้ตรวจสอบ และแก้ไขโปรแกรมได้ง่าย เมื่อเกิดข้อผิดพลาดช่วยให้การดัดแปลง แก้ไข ทำได้อย่างสะดวกและรวดเร็ว ผู้อื่นสามารถศึกษาการทำงานของโปรแกรมได้อย่างง่าย และรวดเร็ว มากขึ้น
3. รหัสเทียม (pseudo code) เป็นการเขียนคำอธิบายขั้นตอนการทำงานของโปรแกรม โดยใช้ถ้อยคำผสมระหว่างภาษาอังกฤษและภาษาการเขียนโปรแกรมแบบโครงสร้าง ซึ่งจะช่วยให้ผู้เขียนโปรแกรมสามารถพัฒนาขั้นตอนต่าง ๆ ให้เป็นโปรแกรมได้ง่ายขึ้น ส่วนใหญ่มักใช้คำเฉพาะ (Reserve Word) ที่มีในภาษาการเขียนโปรแกรมและมักเขียนด้วยตัวอักษรตัวใหญ่ รหัสเทียมที่ดี จะต้องมีความชัดเจน สั้น และได้ใจความ ข้อมูลต่าง ๆ ที่ใช้จะถูกเขียนอยู่ในรูปของตัวแปร
ภาพที่ 3 ตัวอย่างรหัสเทียม
ที่มาhttps://www.researchgate.net/figure/Pseudo-Code-Example-of-a-GEC_fig1_220930688, Joshua Adams
การออกแบบอัลกอริทึม ในแนวคิดเชิงคำนวณจึงเป็นการพัฒนากระบวนการหาคำตอบให้เป็น ขั้นตอนที่บุคคลหรือคอมพิวเตอร์สามารถนำไปปฏิบัติตามเพื่อแก้ปัญหาได้ อัลกอริทึมที่ดี จะต้องมีความถูกต้อง ต้องมีลำดับขั้นตอนที่ชัดเจน มีความยืดหยุ่นในการใช้งาน ใช้เวลาในการพัฒนาน้อย และง่าย ต่อการทำความเข้าใจ เครื่องมือที่จะช่วยให้การเขียนอัลกอริทึมของโปรแกรมทำได้ง่ายขึ้น ช่วยให้โปรแกรมมีข้อผิดพลาดน้อยลง เช่น การเขียนบรรยาย การเขียนผังงาน หรือรหัสเทียม จะช่วยให้อัลกอริทึมมีความถูกต้องแม่นยำ และมีข้อผิดพลาดน้อยลง