บทที่ 1 แนวคิดเชิงคำนวณ
แนวคิดเชิงคำนวณ (computational thinking) เป็นกระบวนการวิเคราะห์ปัญหา เพื่อให้ได้แนวทางการหาคำตอบอย่างเป็นขั้นตอนที่สามารถนำไปปฏิบัติได้โดยบุคคลหรือคอมพิวเตอร์อย่างถูกต้องและแม่นยำ ซึ่งเรียกว่า อัลกอริทึม ทักษะการใช้แนวคิดเชิงคำนวณจึงสำคัญต่อการแก้ปัญหา ช่วยให้สามารถสื่อสารแนวคิดกับผู้อื่นได้อย่างมีประสิทธิภาพ รวมถึงช่วยพัฒนาพื้นฐานในการเขียนโปรแกรม คอมพิวเตอร์ด้วย
แนวคิดเชิงคำนวณมีองค์ประกอบที่สำคัญ 4 ส่วน ได้แก่
1. การแบ่งปัญหาใหญ่เป็นปัญหาย่อย (decomposition) เป็นการแตกปัญหาที่ขับซ้อนให้เป็นปัญหาย่อยที่มีขนาดเล็กลงและซับซ้อนน้อยลง เพื่อช่วยให้การวิเคราะห์และออกแบบวิธีการแก้ปัญหาทำได้ง่ายขึ้น
2. การพิจารณารูปแบบ (pattern recognition) เป็นการวิเคราะห์หาความเหมือนหรือคล้ายคลึงกันระหว่างปัญหาย่อยที่แตกออกมา หรือความคล้ายคลึงกับปัญหาอื่น ๆ ที่มีผู้ออกแบบวิธีการแก้ไขไว้ก่อนแล้ว
3. การคิดเชิงนามธรรม (abstraction) เป็นการแยกรายละเอียดที่สำคัญและจำเป็นต่อการแก้ปัญหาออกจากรายละเอียดที่ไม่จำเป็น ซึ่งรวมไปถึงการแทนกลุ่มของปัญหา ขั้นตอน หรือกระบวนการที่มีรายละเอียด ปลีกย่อยหลายขั้นตอนด้วยขั้นตอนใหม่เพียงขั้นตอนเดียว
4. การออกแบบอัลกอริทีม (algorithm) เป็นการพัฒนากระบวนการหาคำตอบให้เป็นขั้นตอนที่บุคคล
1.1 การแบ่งปัญหาใหญ่เป็นปัญหาย่อย
การแก้ปัญหาที่มีความซับซ้อนทำได้ยาก การแบ่งปัญหาใหญ่ให้เป็นปัญหาย่อย ๆทำให้ความซับซ้อนของปัญหาลดลง ช่วยให้การวิเคราะห์และพิจารณารายละเอียดของปัญหาทำได้อย่างถี่ถ้วนส่งผลให้สามารถออกแบบขั้นตอนการแก้ปัญหาย่อยแต่ละปัญหาได้ง่ายยิ่งขึ้น
ลองพิจารณาปัญหาวาดภาพตามคำบอกโดยให้เพื่อนของนักเรียนวาดภาพตามที่นักเรียนบอก และไม่แสดงภาพให้เพื่อนของนักเรียนเห็น ดังตัวอย่างต่อไปนี้
ปัญหาจากตัวอย่างที่ 1.1 นั้นค่อนข้างง่ายและชัดเจนเนื่องจากมีข้อกำหนดและผลลัพธ์ที่แน่นอน
ปัญหาในชีวิตประจำวันมีหลากหลาย เช่น ในตอนนี้นักเรียนสามารถบวกเลขสองหลัก 2 จำนวนเข้าด้วยกันได้ง่ายด้วยตนเอง แต่น้อง ๆ ระดับอนุบาลอาจบวกเลขได้เพียงหนึ่งหลัก นักเรียนจะมีวิธีการสอนน้องอย่างไรให้สามารถบวกเลขสองหลักได้
1.2 การพิจารณารูปแบบ
ปัญหาบางประเภทสามารถแบ่งออกเป็นปัญหาย่อยที่อาจจะมีรูปแบบเดียวกันหรือคล้ายกัน นักเรียนสามรถนำรูปแบบกระบวนการแก้ปัญหาย่อยปัญหาหนึ่งไปประยุกต์ใช้กับการแก้ปัญหาย่อยอื่น ๆ ได้ ทำให้ลดขั้นตอนในการออกแบบวิธีการแก้ปัญหาได้
ตัวอย่างที่ 1.2 รูปแบบในภาพวาดหมู่บ้าน
จากปัญหาภาพวาดในตัวอย่างที่ 1.1 นักเรียนอาจจะอธิบายคำตอบของปัญหาย่อยได้ดังนี้
ปัญหาย่อยที่ 1 ในภาพมีบ้านกี่หลัง
คำตอบ ในภาพมีบ้าน 3 หลัง
ปัญหาย่อยที่ 2 ชั้นตอนในการวาดบ้านหลังแรกเป็นอย่างไร และอยู่ที่ตำแหน่งใด
คำตอบ บ้านหลังแรกวาดตัวบ้านด้วยสี่เหลี่ยมจัตุรัสสีเหลืองขนาดด้านละ 100 หน่วย ตั้งอยู่ตำแหน่งมุมลงซ้ายที่พิกัด (0, 0) ด้านบนสี่เหลี่ยมวาดหลังคาด้วยรูปสามเหลี่ยมด้านเท่าสีม่วงขนาดด้านละ 100 หน่วย
ปัญหาย่อยที่ 3 ขั้นตอนในการวาดบ้านหลังที่สองเป็นอย่างไร และอยู่ที่ตำแหน่งใด
คำตอบ บ้านหลังที่สองวาดตัวบ้านด้วยสี่เหลี่ยมจัตุรัสสีแดงขนาดด้านละ 50 หน่วย ตั้งอยู่ตำแหน่งมุมล่างซ้ายที่พิกัด (120, 90) ด้านบนสี่เหลี่ยมวาดหลังคาเป็นรูปสามเหลี่ยมด้านเท่าสีเทาขนาดด้านละ 50 หน่วย
ปัญหาย่อยที่ 4 ขั้นตอนในการวาดบ้านหลังที่สามเป็นอย่างไร และอยู่ที่ตำแหน่งใด
คำตอบ บ้านหลังที่สามวาดตัวบ้านด้วยสี่เหลี่ยมจัตุรัสสีเขียวขนาดด้านละ 80 หน่วย ตั้งอยู่ตำแหน่งมุมล่างซ้ายที่พิกัด (200, 10) ด้านบนสี่เหลี่ยมวาดหลังคาเป็นรูปสามเหลี่ยมด้านเท่าสีฟ้าขนาดด้านละ 80 หน่วย
1.3 การคิดเชิงนามธรรม
ปัญหาประกอบไปด้วยรายละเอียดที่หลากหลายโดยมีทั้งรายละเอียดที่จำเป็นและไม่จำเป็นต่อการแก้ปัญหา การคิดเชิงนามธรรมเป็นการคัดแยกรายละเอียดที่ไม่จำเป็นออกจากปัญหาที่พิจารณาอยู่ ทำให้สามารถเข้าใจ วิเคราะห์ และออกแบบวิธีการแก้ปัญหาใน ภาพรวมได้ง่ายขึ้นการคิดเชิงนามธรรมยังรวมถึงการซ่อนรายละเอียดโดยการแทนกลุ่มของปัญหา ขั้นตอน และกระบวนการที่มีรายละเอียดปลีกย่อยหลายขั้นตอนให้เป็นขั้นตอนเดียว เพื่อให้สามารถอธิบายวิธีการแก้ปัญหาได้กระชับขึ้นดังตัวอย่างต่อไปนี้
1.4 การออกแบบอัลกอริทีม
อัลกอริทึม หมายถึง รายการคำสั่งที่อธิบายขั้นตอนในการแก้ปัญหา โดยแต่ละคำสั่งนั้นต้องเป็นคำสั่งที่ให้ผู้อื่นนำไปปฏิบัติตามได้โดยไม่มีความกำกวม ซึ่งมักอยู่ในรูปของรหัสลำลอง(pseudo code) หรือผังงาน (flowchart) ในกรณีที่ใช้คอมพิวเตอร์เป็นเครื่องมือในการแก้ปัญหา อัลกอริทึมจะต้องถูกแปลงให้อยู่ในรูปของภาษาโปรแกรมก่อนเพื่อให้คอมพิวเตอร์สามารถปฏิบัติตามได้ ดังนั้นการออกแบบรายละเอียดในอัลกอริทึมจึงขึ้นอยู่กับคนหรือคอมพิวเตอร์ที่จะนำอัลกอริทีมไปปฏิบัติ
ตัวอย่างที่ 1.4 อัลกอริทึมวาดภาพหมู่บ้าน สำหรับคนนำไปวาด
ขั้นตอนหลัก
1. วาดรูปบ้านขนาด 100 หน่วย ที่ตำแหน่ง (O, O)
2. วาดรูปบ้านขนาด 50 หน่วย ที่ตำแหน่ง (120,90)
3. วาดรูปบ้านขนาด 80 หน่วย ที่ตำแหน่ง (200,10)
ขั้นตอนย่อย การวาดรูปบ้านขนาด ร หน่วย ที่ตำแหน่ง (x, y)
1. วาดรูปสี่เหลี่ยมจัตุรัสความยาวค้นละ ร หน่วย ให้มีมุมล่างซ้ายอยู่ที่พิกัด (x,y)
2. วาดรูปสามเหลี่ยมดันเท่าขนาด ร หน่วยไว้บนสี่เหลี่ยมจัตุรัส
ตัวอย่างที่ 1.5 อัลกอริทึมวาดภาพหมู่บ้าน สำหรับสร้างเป็นโปรแกรมคอมพิวเตอร์
ขั้นตอนหลัก
1. วาดรูปบ้านขนาด 100 หน่วย ที่ตำแหน่ง (0, 0)
2. วาดรูปบ้านขนาด 50 หน่วย ที่ตำแหน่ง (120, 90)
3. วาดรูปบ้านขนาด 80 หน่วย ที่ตำแหน่ง (200, 10)
ขั้นตอนย่อย 1 การวาดรูปสี่เหลี่ยมจัตุรัสขนาด s หน่วย
1. ทำคำสั่งต่อไปนี้ซ้ำ 4 รอบ
1.1 เดินหน้า s หน่วย
1.2 หันซ้าย 90 องศา
ขั้นตอนย่อย 2 การวาดรูปสามเหลี่ยมด้านเท่าขนาด s หน่วย
1. ทำคำสั่งต่อไปนี้ซ้ำ 3 รอบ
1.1 เดินหน้า s หน่วย
1.2 หันซ้าย 120 องศา
ขั้นตอนย่อย 3 การวาดรูปบ้านขนาด s หน่วย ที่ตำแหน่ง (x, y)
1. ยกปากกา
2. เคลื่อนที่ไปยังตำแหน่ง (x,y)
3. วางปากกา
4. กำหนดทิศทางไปด้านขวา
5. วาดรูปสี่เหลี่ยมจัตุรัสขนาด s หน่วย
6. หันซ้าย 90 องศา
7. เดินหน้า s หน่วย
8. หันขวา 90 องศา
9. วาดรูปสามเหลี่ยมด้านเท่าขนาด s หน่วย
1.5 กรณีศึกษา
ตัวอย่างต่อไปนี้จะใช้แนวคิดเชิงคำนวณในการแก้ปัญหาบางปัญหาอาจไม่ได้ใช้ครบทุกองค์ประกอบ ขึ้นอยู่กับลักษณะของปัญหา แต่ทุกปัญหาจะต้องได้อัลกอริทึมในการแก้ปัญหาที่ถูกต้อง รวดเร็ว และมีประสิทธิภาพ
ตัวอย่างที่ 1.6 สอนน้องจัดหนังสือ
สมมติว่านักเรียนต้องการสอนน้องให้รู้จักรีการจัดเรียงหนังสือตามลำดับความสูงให้เป็นระเบียบเพื่อให้มีความสวยงามและง่ายต่อการค้นหา นักเรียนต้องคิดกระบวนการเป็นขั้นตอนออกมา เพื่อให้น้องสามารถปฏิบัติตามได้ง่าย ไม่ว่าจะมีหนังสือกี่เล่มและมีลำดับเริ่มตันแบบใดก็ได้ นักเรียนจะมีชั้นตอนในการจัดเรียงอย่างไร
การแบ่งปัญหาใหญ่เป็นปัญหาย่อย
การพยายามจัดหนังสือกองใหญ่ทั้งกองนั้นอาจเกิดความยุ่งยาก การแบ่งปัญหาใหญ่เป็นปัญหาย่อยช่วยทำให้การออกแบบขั้นตอนการแก้ปัญหาทำได้เป็นระบบมากขึ้น โดยอาจจะแบ่งเป็นปัญหาย่อยได้ดังต่อไปนี้
หนังสือเล่มใดควรจัดไว้เป็นลำดับแรก
ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับที่สอง
ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับที่สาม
:
จะเห็นได้ว่าปัญหาในการจัดหนังสือทั้งกองสามารถแบ่งเป็นปัญหาย่อยได้โดยคัดเลือกหนังสือเล่มที่สูงที่สุดออกจากกองใหญ่ (สมมติว่ากองใหญ่มี n เล่ม) ทำให้ขนาดของกองหนังสือลดลงเหลือ n-1 เล่ม ปัญหาย่อยในที่นี้คือการจัดเรียงหนังสือในกองที่มี ก-1 เล่ม ซึ่งเป็นปัญหาในรูปแบบเดิมที่มีความซับซ้อนน้อยลง
การแตกปัญหาในตัวอย่าง “สอนน้องจัดหนังสือ” ได้ผลลัพธ์เป็นปัญหาย่อยดังนี้
ปัญหาย่อยที่ 1 หนังสือเล่มใดควรจัดไว้เป็นลำดับแรก
ปัญหาย่อยที่ 2 ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับที่สอง
ปัญหาย่อยที่ 3ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับที่สาม
:
การพิจารณารูปแบบในการสอนน้องจัดหนังสือ
จากการแตกปัญหาในตัวอย่าง “สอนน้องจัดหนังสือ” นักเรียนอาจจะอธิบายคำตอบของปัญหาย่อยได้ดังนี้
ปัญหาย่อยที่ 1 หนังสือเล่มใดควรจัดไว้เป็นลำดับแรก
คำตอบ หนังสือเล่มที่มีความสูงมากที่สุด
ปัญหาย่อยที่ 2 ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับที่สอง
คำตอบ หนังสือเล่มที่มีความสูงมากที่สุดในกองที่เหลือ
ปัญหาย่อยที่ 3 ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับที่สาม
คำตอบ หนังสือเล่มที่มีความสูงมากที่สุดในกองที่เหลือ
ปัญหาย่อยสุดท้ายที่มีขนาด 1
เห็นได้ว่าแต่ละปัญหาย่อยนั้นต่างก็มีรูปแบบเดียวกัน และมุ่งหาคำตอบในลักษณะเดียวกันคือ
ปัญหาย่อย ในกองหนังสือที่เหลือ หนังสือเล่มใดควรเลือกออกมาเป็นหนังสือที่วางอยู่ในลำดับถัดไป
คำตอบ หนังสือเล่มที่มีความสูงมากที่สุดในกองหนังสือที่เหลืออยู่
การคิดเชิงนามธรรมในปัญหาสอนน้องจัดหนังสือ
เนื่องจากขั้นตอนที่นำไปปฏิบัติตามต้องการเพียงการจัดเรียงหนังสือตามลำดับจากสูงไปต่ำ รายละเอียดที่จำเป็นเพื่อใช้ในการตัดสินใจเลือกหนังสือจึงมีเพียงความสูงของหนังสือแต่ละเล่ม ในขณะที่สีและความหนาของหนังสือนั้นถือเป็นรายละเอียดที่ไม่จำเป็น จึงสามารถตัดออกไปได้ในการออกแบบกระบวนการแก้ปัญหา
ถ้านักเรียนต้องการใช้เพียงความสูงของหนังสือแต่ละเล่มเพื่อใช้พิจารณาในกาจัดเรียง นักเรียนสามารถใช้ตัวเลขหนึ่งจำนวนแทนความสูงของหนังสือแต่ละเล่ม เพื่อใช้ในการออกแบบอัลกอริทึม โดยจากปัญหาย่อยที่เคยตั้งเอาไว้ก่อนหน้านี้ว่า
ในกองหนังสือที่มีอยู่ หนังสือเล่มใดควรค้ออกมาเป็นหนังสือที่วางไว้ในลำดับถัดไป
มีกระบวนการแก้ปัญหาแบบเดียวกันกับปัญหาที่ระบุว่า
ในชุดจำนวนที่พิจารณาอยู่ จำนวนใดมีค่ามากที่สุด
อัลกอริทีมสำหรับสอนน้องจัดหนังสือ
กระบวนการที่ผ่านมาสามารถนำมาออกแบบเป็นอัลอริทีมสำหรับให้น้องปฏิบัติตามได้ดังนี้
ขั้นตอนหลัก
1. ทำขั้นตอนต่อไปนี้ซ้ำจนกระทั่งไม่มีหนังสือเหลืออยู่ในกอง
1.1 เลือกหนังสือที่มีความสูงมากที่สุดในกอง
1.2 นำหนังสือที่เลือกจากขั้นดอน 11 จัดเรียงไว้บนโต๊ะ โดยวางไว้ถัดจากแถวหนังสือที่จัดไว้แล้วก่อนหน้านี้ ถ้ายังไม่มีหนังสือในแถวให้วางหนังสือเล่มนี้ไว้เป็นเล่มแรก
อัลกอริทึมสำหรับการจัดเรียงลำดับ (sorting algorithm)
อัลกอริทึมสำหรับสอนน้องจัดหนังสือเป็นอัลกอริทึมสำหรับการเรียงลำดับมีชื่อว่า "การเรียงลำดับแบบเลือก (selection sort)" ซึ่งมีวิธีการที่เข้าใจง่ายแต่ค่อนข้างช้า เมื่อมีสิ่งที่ต้องเรียงลำดับเป็นจำนวนมาก นอกเหนือจากการเรียงลำดับแบบเลือกยังมีอัลกอริทึมสำหรับการเรียงลำดับอีกหลายวิธีดูตัวอย่างและการทำงานของอัลกอริทีมเหล่านี้ได้จากลิงค์ https://www.toptal.com/developers/sorting-algorithms
สรุปท้ายบท
แนวคิดเชิงคำนวณเป็นวิธีการวิเคราะห์ปัญหาอย่างหนึ่งเพื่อให้ได้แนวทางการหาคำตอบออกมาเป็นขั้นตอน หรือเรียกว่าอัลกอริทึม ซึ่งสามารถนำไปถ่ายทอดให้บุคคลอื่นหรือคอมพิวเตอร์ปฏิบัติตามได้อย่างถูกต้องและแม่นยำ แนวคิดเชิงคำนวณมี 4 องค์ประกอบ คือ การแบ่งปัญหาใหญ่เป็นปัญหาย่อย การพิจารณารูปแบบ การคิดเชิงนามธรรมและการออกแบบอัลกอริทึม ในการแก้ปัญหาโดยใช้องค์ประกอบทั้ง 4 นั้นอาจไม่ได้นำมาใช้ตามลำดับ หรือใช้ครบทุกองค์ประกอบ บางปัญหาอาจมีการพิจารณาหลายองค์ประกอบไปพร้อมกันได้
กิจกรรมท้ายบท
ที่หมู่บ้านจัดงานฉลองวันปีใหม่นักเรียนได้รับมอบหมายให้ล้างจานจำนวนมาก จานทุกจานมีขนาดเท่ากัน เมื่อล้างเสร็จแล้วจะต้องเก็บในกล่องที่สามารถบรรจุจานได้ 3 ตั้ง ตั้งละ 10ใบ ให้นักเรียนเขียนอัลกอริทึมในการล้างจานและเก็บจานใส่กล่อง
อ้างอิงจาก : หนังสือเรียนรายวิชาพื้นฐานวิทยาศาสตร์ เทคโนโลยี (วิทยาการคำนวณ) ของ สสวท.