You are currently viewing Algorithm

Algorithm

Algorithm เป็นขั้นตอนการดำเนินการกระทำอย่างใดอย่างหนึ่ง ซึ่งก่อนที่จะมาเรียนรู้เรื่องภาษาที่จะใช้ในการเขียนก็ควรมาทำความเข้าใจเรื่องกระบวนการคิดเสียก่อน ท่านราชบัณฑิตได้บัญญัติคำไทยไว้ว่า “ขั้นตอนวิธี” ซึ่งดูจะอธิบายความหมายได้ดีเหมือนกัน

“Whether you think you can, or you think you can’t–you’re right.”

— Henry Ford

จำได้ว่า เมื่อปีที่แล้ว (2562) ตอนที่คุณหญิงกัลยา โสภณพนิช รัฐมนตรีช่วยว่าการกระทรวงศึกษาธิการเสนอนโยบายให้เด็กเรียนการเขียน Coding แล้วก็มีกระแสเป็น Talk of the Town ว่า เด็กไม่มีคอมพิวเตอร์จะเรียนรู้การเขียน Code ได้อย่างไร? บ้าไปแล้ว ฯลฯ ยิ่งเจอคำบอกของท่านว่า “การเรียน Coding ไม่จำเป็นต้องใช้คอมพิวเตอร์” ยิ่งเกิดคำถามและข้อถกเถียงถึงความพร้อมและความเหมาะสมกันมาก

อันนี้ต้องแยกเป็นสองเรื่อง การเขียน Coding จำเป็นต้องใช้คอมพิวเตอร์จริง เพื่อให้เห็นผลลัพธ์ที่ออกมา แต่มันก็มีขั้นตอนที่ยังไม่ต้องใช้คอมพิวเตอร์ หรือ ใช้คอมพิวเตอร์ราคาถูก เช่น raspberry pi ได้เหมือนกัน คือถ้าในอดีตรัฐบาล มีนโยบายแจก tablet ให้เด็กนักเรียนใช้ได้ การให้ raspberry pi และสอนเรื่อง coding ก็ไม่ใช่เรื่องไกลตัว ประเทศญี่ปุ่นเปิดสอนการเขียน Code ให้กับเด็กประถม 5 ในปีนี้ (2563) เป็นวิชาพื้นฐาน

อาจจะมีผู้แย้งว่า ญี่ปุ่นมีเงินจะซื้อคอมพิวเตอร์ให้เด็กเรียนเท่าไหร่ก็ได้ แต่เมืองไทยไม่ได้มีงบประมาณขนาดนั้น เรื่องนี้ก็อยากจะบอกว่า สำหรับคอมพิวเตอร์เพื่อการเรียนการสอนไม่จำเป็นต้องใช้คอมพิวเตอร์ราคาแพง แค่ raspberry pi ราคาพันกว่าบาทก็ใช้ได้แล้ว

สิ่งที่เริ่มได้ก่อนคือการสอนให้คิดเรื่อง Algorithm ซึ่งจะส่งผลดีกับการปรับความคิดในเรื่องตรรกะการเขียนโปรแกรมต่าง ๆ ในอนาคตได้เป็นอย่างดี

ความจริง Coding คือการเขียนคำสั่ง เพื่อให้คอมพิวเตอร์ดำเนินการตามที่จุดประสงค์ต่าง ๆ ซึ่งภาษาที่ใช้ก็มีมากมาย เช่น C++ , Java , PHP , Python และ อื่น ๆ ซึ่งการที่เราอยู่ในโลกของเทคโนโลยี ทั้ง iPad, โทรศัพท์ที่ใช้กันอยู่ทุกวันนี้ เกมส์ที่เล่น แม้แต่การสั่ง GrabFood FoodPanda Line พวกนี้คือเทคโนโลยีทั้งนั้น เมื่อมีเทคโนโลยีก็ต้องมีเรื่อง Coding เข้ามาเกี่ยวข้อง

ดังนั้น การเรียนรู้เรื่อง Coding ก็จะเป็นการเพิ่มทักษะในการใช้ชีวิต และเปิดโอกาสในการทำงานได้กว้างมากทีเดียว การส่งเสริมให้เด็กเรียน Coding ตั้งแต่ยังอายุน้อย ๆ นับเป็นเรื่องควรส่งเสริมอย่างยิ่ง

สำหรับเรื่องนี้ความจริงต้องเขียนควบคู่ไปกับเรื่อง Flowchart แต่จะขอแยกเป็นคนละเรื่อง โดยจะเขียนเรื่องเกี่ยวกับทฤษฎีทั่วไปในตอนนี้ก่อน แล้วอธิบายให้เห็นภาพเพิ่มเติมตอนเขียนเรื่อง Flowchart หรือผังงาน

วิธีการเขียน Algorithm

ต้องนึกว่าสิ่งที่กำลังจะเขียนนี้คือ “การแก้ปัญหา” หรือ Problem Solving ดังนั้นจะต้องนำเสนอวิธีการแก้ปัญหาอย่างชาญฉลาดและเข้าใจง่าย ซึ่งวิธีการเขียนนี้จะเป็นเรื่องของกระบวนการคิด ไม่ได้ขึ้นอยู่การเขียนโปรแกรมใด ๆ ทำให้เข้าใจได้ง่ายสำหรับทุกคนแม้ว่าจะไม่มีความรู้ด้านการเขียนโปรแกรมก็ตาม

องค์ประกอบสำคัญที่ต้องทำความเข้าใจมีไม่กี่เรื่องหรอก คือ

  • Input (การรับข้อมูล) – ในกระบวนการอาจจะไม่มีก็ได้ แล้วแต่เรื่อง
  • Output (ผลลัพธ์) – หลังกระบวนการจบ จะต้องได้อะไรออกมาสักอย่าง
  • Definiteness (ความชัดเจน) – แต่ละขั้นตอนต้องชัดเจนและไม่คลุมเครือ
  • Finiteness (ขอบเขต) – แต่ละขั้นตอนของกระบวนการต้องเป็นกระบวนการที่กระชับ มีขอบเขตจำกัด

ซึ่งทั้งหมดที่กล่าวมา จะต้อง เรียงเป็นลำดับทีละรายการ อาจจะมีการเลือก ในการควบคุมเงื่อนไขให้เป็นไปตามการตัดสินใจ หรือทางเลือก และการทำซ้ำ โดยแต่ละขั้นตอนจะมีลำดับตรรกะของตัวเอง ดังนั้นการตรวจสอบแนวคิดเพื่อแก้ปัญหาจะทำได้ง่ายขึ้น

ขั้นตอนที่ 1 กำหนด input

อย่างที่บอกข้างต้นว่า ในกระบวนการอาจจะไม่มีก็ได้ แล้วแต่เรื่อง แต่ก็มีหลายกระบวนการที่ต้องนำข้อมูลไปประมวลผล เช่น ถ้าเป็นการคำนวณพื้นที่ ก็ต้องมี input เรื่องความกว้าง ความยาว หรือ รูปร่างของพื้นที่ (สามเหลี่ยม สี่เหลี่ยม ฯลฯ)

ขั้นตอนที่ 2 กำหนดตัวแปร

ตัวแปร (Variable) เป็นสิ่งที่จะใช้ในการคำนวณ ซึ่งส่วนใหญ่จะมีตัวแปรมากกว่า 1 ซึ่งควรจะตั้งชื่อตัวแปรให้เข้าใจง่ายสำหรับคนอื่นด้วย อย่างเช่น การคำนวณพื้นที่ จะมีตัวแปรเรื่อง กว้าง ยาว หรือ รูปร่าง ไม่ควรตั้งชื่อตัวแปรง่าย ๆ ว่า a b c หรือ ก ย ร ใช้คำที่ชัดเจนไปเลย เช่น Height Width Shape

ขั้นตอนที่ 3 ร่างขั้นตอนการทำงาน

เมื่อ รู้ว่าจะทำอะไร (เช่น คำนวณพื้นที่) และได้ Input เป็นตัวแปรต่าง ๆ (กว้าง ยาว รูปร่าง) เรากำหนด Process การคำนวณ คือ การ ถ้าเป็นรูปสี่เหลี่ยมพื้นผ้า จะใช้สูตร กว้าง คูณ ยาว ได้ผลลัพธ์เป็นตัวแปรใหม่ คือ “เนื้อที่”

ขั้นตอนที่ 4 แสดงผลลัพธ์

เมื่อจบกระบวนการตต่าง ๆ แล้ว ก็จะได้ผลลัพธ์ หรือ Output ออกมา ในกรณีของพื้นที่สี่เหลี่ยมผืนผ้า ผลลัพธ์คือตัวแปร “เนื้อที่”

และทั้งหมดก็คือ Algorithm โดยที่เขียนเป็นแบบลำดับ (Sequential) มีลักษณะการทำงานตามขั้นตอนต่อเนื่องกันไปเป็นลำดับ รับข้อมูล (Input) โดยการทำงานแต่ละขั้นตอนต้องทำให้เสร็จก่อน แล้วจึงไปทำขั้นตอนต่อไป

ซึ่งในการเขียนขั้นตอนจะมีทางเลือก (Decision) คือมีเงื่อนไขเป็นตัวกำหนดเส้นทางการทำงานของขั้นตอนวิธี โดยตัวเลือกนั้นอาจจะมีตั้งแต่ 2 ตัวขึ้นไป เช่น ต้องตรวจสอบรูปพื้นที่ว่าเป็นรูปอะไร เพราะจะใช้สูตรที่ต่างกันไป ซึ่งแต่ละสูตรก็จะมีรายละเอียดขั้นตอนแตกต่างกันไป

และเราอาจจะเขียนแบบทำซ้ำ (Repetition) ซึ่งจะคล้ายกับแบบทางเลือก คือ มีการตรวจสอบเงื่อนไข แต่แตกต่างกันตรงที่จะมีเงื่อนไขการทำงาน ถ้าตรงตามเงื่อนไขอาจจะจะวนกลับไปทำงานอีกครั้ง จนกระทั่งไม่ตรงกับเงื่อนไขที่กำหนดไว้จึงหยุดการทำงานหรือทำงานในขั้นต่อไป อย่างเช่น ตั้งค่านับข้อมูลตัวแปรว่ามีทั้งหมดเท่าไหร่ เช่นตัวอย่างการคำนวณพื้นที่ อาจจะต้องคำนวณพื้นที่ 5 ครั้ง ทำครั้งหนึ่งเสร็จอาจจะมีการถามว่า ตัวแปรหมดแล้วหรือไม่ ถ้ายังไม่หมดก็ย้อนกลับไป process นำ Input มาคำนวณอีกครั้ง จนกว่าจะหมด จึงส่ง output

Python

Learn Python – เรียนรู้ไพธอนไปด้วยกัน

Divider

บันทึกส่วนตัว เกี่ยวกับการเรียนรู้ภาษาไพธอน