สวัสดีค่ะ ยินดีต้อนรับเข้าสู่เว็บไซต์ hongkrunan.in.th แหล่งการเรียนรู้ออนไลน์วิชาวิทยาการคำนวณ
สวัสดีค่ะ ยินดีต้อนรับเข้าสู่เว็บไซต์ hongkrunan.in.th แหล่งการเรียนรู้ออนไลน์วิชาวิทยาการคำนวณ
หน่วยการเรียนรู้ที่ 2
การระบุข้อมูลเข้า ข้อมูลออกและเงื่อนไขในการแก้ปัญหา
การแก้ปัญหาด้วยคอมพิวเตอร์นั้น ก่อนที่จะระบุขั้นตอนวิธีที่ชัดเจนได้ จะต้องวิเคราะห์ทำความเข้าใจกับปัญหาเพื่อให้ทราบว่ามีข้อมูลอะไรบ้างที่สามารถใช้ในการประมวลผลได้ มีเงื่อนไขต่าง ๆ อย่างไร ผลลัพธ์ที่ต้องการคืออะไร โดยจะแบ่งข้อมูลที่เกี่ยวข้องกับการทำงานออกเป็นสองส่วน คือ
>> ข้อมูลเข้า (Input) เป็นข้อมูลที่ใช้เพื่อประมวลผล
>> ข้อมูลออก (Output) เป็นข้อมูลที่เป็นผลลัพธ์ที่ต้องการ
จากการวิเคราะห์ทั้งสองส่วนนี้ นอกจากจะระบุว่าคืออะไรแล้ว ยังอาจระบุเงื่อนไขเพิ่มเติมได้อีก เช่น ข้อมูลเข้าอาจมีการระบุขอบเขตหรือเงื่อนไข หรือข้อมูลออกอาจมีการระบุคุณสมบัติที่ต้องการ การวิเคราะห์นี้เป็นการระบุข้อกำหนดต่าง ๆ ที่เกี่ยวข้องกับปัญหาให้ชัดเจนซึ่งจำเป็นต่อการออกแบบขั้นตอนวิธีที่ถูกต้อง
ตัวอย่างที่ 1 คะแนนสอบ
พิจารณาสถานการณ์สมมติต่อไปนี้
ครูตรวจข้อสอบนักเรียน 40 คน และได้ประกาศคะแนนไว้หน้าห้อง หากต้องการหาคะแนนสูงสุด คะแนนต่ำสุดและคำนวณคะแนนเฉลี่ยของนักเรียนทุกคน ในกรณีนี้ระบุข้อมูลเข้า ข้อมูลออก ได้ดังนี้
>> ข้อมูลเข้า : รายการคะแนนสอบของนักเรียน 40 คน
>> ข้อมูลออก : คะแนนสูงสุด คะแนนต่ำสุด คะแนนเฉลี่ย
แม้ว่าในหลาย ๆ กรณี การระบุข้อมูลเข้าและข้อมูลออก อาจจะไม่สามารถทำได้อย่างชัดเจน แต่ความพยายามในการระบุข้อมูลทั้งสองมักเป็นเงื่อนไขให้ต้องทำความเข้าใจกับปัญหามากขึ้น ลองพิจารณาตัวอย่างต่อไปนี้
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
ตัวอย่างที่ 2 การแบ่งกลุ่มทำงาน
นักเรียนต้องจัดกิจกรรมวันภาษาไทย จากการประชุมมีงานที่ต้องทำ ดังนี้
1. จัดบอร์ดหน้าห้องเกี่ยวกับภาษาไทย
2. จัดเตรียมงานโต้วาที
3. เป็นกลุ่มผู้โต้วาที โดยมีสองกลุ่ม กลุ่มละ 3 คน
4. อ่านกลอนทำนองเสนาะ
5. ร้องเพลงไทยสมัยใหม่
เพื่อให้ทุกคนได้ทำงานที่ต้องการทำ หรืออย่างน้อยเป็นงานที่ยินดีทำ จึงได้ให้นักเรียนทุกคนกรอกข้อมูลว่าสามารถทำงานใดได้บ้าง และมีงานใดบ้างที่ต้องการทำเป็นพิเศษ โดยมีเงื่อนไขว่า นักเรียนหนึ่งคนไม่ควรทำงานเกิน 2 อย่างและผู้โต้วาทีไม่ควรเป็นคนจัดเตรียมงานโต้วาที จากข้อมูลดังกล่าว ต้องการจัดกลุ่มว่านักเรียนคนใดจะทำงานอย่างใดบ้าง สามารถระบุข้อมูลเข้าและข้อมูลออกได้ดังนี้
>> ข้อมูลเข้า : รายการของงานทั้งหมด ข้อมูลของนักเรียนแต่ละคนที่ระบุว่าสามารถทำงานใดได้บ้าง และต้องการทำงานใดเป็นพิเศษ
>> ข้อมูลออก : ข้อมูลที่ระบุว่านักเรียนคนใดทำงานอะไร โดยมีเงื่อนไขดังนี้
--> นักเรียนควรได้ทำงานที่ตนเองเลือกว่าสามารถทำงานนั้นได้
--> ถ้าเป็นไปได้ นักเรียนควรได้ทำงานที่ตนเองเลือกว่าอยากทำเป็นพิเศษ
--> นักเรียนแต่ละคนควรมีงานที่ต้องทำอย่างน้อย 1 อย่าง แต่ไม่ควรเกิน 2 อย่าง
--> นักเรียนที่อยู่ในกลุ่มผู้โต้วาที ไม่ควรเป็นผู้จัดเตรียมงานโต้วาที
จากการวิเคราะห์ข้อมูลข้างต้น นักเรียนอาจจะพบปัญหาเมื่อเริ่มดำเนินการ เช่น ถ้ามีนักเรียนบางคนไม่ระบุงานที่สามารถทำได้ ก็จะทำให้ไม่สามารถจัดกลุ่มได้ สังเกตว่าการระบุข้อมูลที่ชัดเจนทำให้สามารถวิเคราะห์สถานการณ์ได้ชัดเจนยิ่งขึ้น และจะช่วยปรับปรุงกระบวนการต่าง ๆ ได้ดีกว่าเดิม ในกรณีนี้เพื่อให้สามารถจัดกลุ่มได้อาจเพิ่มเงื่อนไขให้นักเรียนทุกคนต้องเลือกงานที่สามารถทำได้อย่างน้อย 1 อย่าง
การออกแบบขั้นตอนวิธี
ทักษะการคิดเชิงคำนวณ เช่น การแยกส่วนประกอบและย่อยปัญหา การหารูปแบบและการคิดเชิงนามธรรม สามารถนำมาใช้ในการออกแบบขั้นตอนวิธีเพื่อแก้ปัญหาต่าง ๆ การออกแบบนี้ไม่มีขั้นตอนที่ตายตัวจำเป็นต้องอาศัยประสบการณ์และการฝึกฝน จึงเป็นสิ่งที่ท้าทายซึ่งจะเป็นประโยชน์กับนักเรียนในอนาตค
ตัวอย่างที่ 1 การคำนวณคะแนนสอบ
พิจารณาสถานการณ์จากตัวอย่างที่ 1 ต้องการคำนวณคะแนนสูงสุด คะแนนต่ำสุดและคะแนนเฉลี่ยของนักเรียนในห้อง โดยมีข้อมูลเข้าหรือข้อมูลออก ดังนี้
>> ข้อมูลเข้า : รายการคะแนนสอบของนักเรียน 40 คน
>> ข้อมูลออก : คะแนนสูงสุด คะแนนต่ำสุด คะแนนเฉลี่ย
ปัญหานี้ สามารถแบ่งได้เป็นสามส่วน คือ การหาคะแนนสูงสุด การหาคะแนนต่ำสุด และการคำนวณหาคะแนนเฉลี่ย จะเริ่มพิจารณาจากปัญหาการหาคะแนนสูงที่สุดก่อน ในการออกแบบนั้นจะเริ่มต้นสังเกตวิธีการที่นักเรียนใช้ในการหาค่าสูงสุดของข้อมูล พิจารณาตัวอย่างจำนวนเต็ม สิบจำนวน ดังนี้ 40 51 36 15 42 47 9 28 57 16
โดยทั่วไปแล้ว ถ้ามีจำนวนข้อมูลน้อยนักเรียนสามารถหาค่าสูงสุดได้ทันที อย่างไรก็ตามถ้าข้อมูลถูกแบ่งไว้คนละหน้า จะพบว่าระหว่างที่พลิกหน้าไปพิจารณาข้อมูลชุดอีกชุด นักเรียนต้องจำค่าที่สูงที่สุดของข้อมูลชุดแรก สังเกตว่าการตัดสินใจดังกล่าวจะเกิดขึ้นระหว่างที่พิจารณาข้อมูลไปทีละจำนวน นักเรียนสามารถใช้แนวคิดนี้ในการเขียนขั้นตอนวิธีได้ โดยในการจดจำค่าจะใช้ตัวแปร Max แทนค่าสูงสุดที่พบ ขั้นตอนวิธีดังกล่าวแสดงได้ ดังนี้
>> ขั้นตอนวิธี : หาค่าที่สูงที่สุดของข้อมูลในรายการ
>> ข้อมูลเข้า : รายการข้อมูล
>> ข้อมูลออก : ค่าสูงสุดของข้อมูล
1. พิจารณาข้อมูลตัวแรกให้ Max มีค่าเป็นข้อมูลดังกล่าว
2. พิจารณาข้อมูลตัวถัดไปทีละจำนวน
2.1 เรียกข้อมูลที่กำลังพิจารณาว่า x
2.2 ถ้า x > Max แล้ว
ให้ Max <--- x
3. ตอบว่าค่าที่สูงที่สุด คือ Max
เนื่องจากคะแนนเฉลี่ยคือ คะแนนรวมหารด้วยจำนวนนักเรียนในห้องซึ่งในที่นี้มีค่าเท่ากับ 40 คน ดังนั้นในการคำนวณคะแนนเฉลี่ยจะสนใจเฉพาะคะแนนรวม นักเรียนสามารถคำนวณคะแนนรวมด้วยวิธีการใกล้เคียงกับการหาคะแนนสูงสุด โดยจะใช้ตัวแปร Total เก็บค่าผลรวมของคะแนนทั้งหมดเมื่อเริ่มต้นจะให้ Total มีค่าเป็น 0 ขั้นตอนวิธีดังกล่าวแสดงได้ดังนี้
>> ขั้นตอนวิธี : หาผลรวมของข้อมูลในรายการ
>> ข้อมูลเข้า : รายการข้อมูล
>> ข้อมูลออก : ผลรวมของข้อมูล
1. ให้ Total มีค่าเป็น 0
2. พิจารณาข้อมูล ทีละจำนวนจนครบทุกจำนวน
2.1 เรียกตัวที่กำลังพิจารณาว่า x
2.2 ให้ Total <--- Total + x
3. ตอบว่า ผลรวมคือ Total
เมื่อคำนวณหาผลรวมได้แล้ว ค่าเฉลี่ยจะมีค่าเท่ากับ Total / 40
การหาค่าเฉลี่ยโดยหารผลรวมด้วย 40 นั้น ใช้ได้กับกรณีที่มีข้อมูลจำนวน 40 จำนวน เท่านั้น เราสามารถแก้ไขขั้นตอนวิธีให้ทำงานได้ครอบคลุมมากขึ้น โดยนับจำนวนข้อมูลไปพร้อม ๆ กับการหาผลรวม ขั้นตอนวิธีแก้ไขแล้ว เป็นดังนี้
>> ขั้นตอนวิธี : หาค่าเฉลี่ยของข้อมูลในรายการ
>> ข้อมูลเข้า : รายการข้อมูล
>> ข้อมูลออก : ค่าเฉลี่ยของข้อมูล
1. ให้ Total มีค่าเป็น 0
2. ให้ Count มีค่าเป็น 0
3. พิจารณาข้อมูล ทีละจำนวน
3.1 เรียกตัวที่กำลังพิจารณาว่า x
3.2 ให้ Total <--- Total + x
3.3 ให้ Count <--- Count + 1
4. ตอบว่า ค่าเฉลี่ย คือ Total / Count
ขั้นตอนในข้อ 3.2 และ 3.3 มีการกำหนดให้ Total มีค่าเป็น Total + 1 เพื่อเพิ่มค่าให้กับตัวแปร Total และมีการกำหนดให้ Count มีค่าเป็น Count + 1 เพื่อเพิ่มค่าให้กับตัวแปร Count การเขียนลักษณะนี้จะพบเห็นได้บ่อยครั้งในการเขียนโปรแกรม ซึ่งแตกต่างจากการเขียนสมการทางคณิตศาสตร์
การจัดเรียงข้อมูล
ในหัวข้อนี้นักเรียนจะได้รู้จักกับขั้นตอนวิธีพื้นฐานในการจัดเรียงข้อมูล (sort) และการค้นหาข้อมูล (search) ซึ่งเป็นกิจกรรมที่สัมพันธ์กันที่ใช้ในการแก้ปัญหาที่พบบ่อยในชีวิตประจำวัน
การจัดเรียงข้อมูล
การจัดเรียงข้อมูลเป็นสิ่งที่พบอยู่เสมอ เมื่อต้องประมวลผลจำนวนมาก เช่น เมื่อครูตรวจข้อสอบและต้องการบันทึกคะแนนลงในรายงานที่เรียงชื่อนักเรียนตามลำดับเลขประจำตัว หรือเมื่อนักเรียนเก็บข้อมูลจากแบบสำรวจ และต้องการเรียงแบบสำรวจตามเงื่อนไขที่ต้องการ การเรียงลำดับข้อมูลด้วยเงื่อนไขที่เหมาะสมจะทำให้การค้นหาข้อมูลทำได้อย่างมีประสิทธิภาพ
โดยทั่วไปการเรียงลำดับจำนวนเต็มอาจใช้การจัดเรียงข้อมูลได้ 2 แบบ คือ
1) การจัดเรียงแบบเลือก (selection sort) เป็นการเลือกข้อมูลที่มีค่าตามเงื่อนไขมาไว้เป็นลำดับแรก เช่น เงื่อนไข การเรียงข้อมูลจากน้อยไปหามาก นักเรียนจะเลือกข้อมูลที่มีค่าน้อยที่สุดมาไว้เป็นลำดับแรกในรายการคำตอบและขีดทับข้อมูลที่เลือกแล้วในรายการ จากนั้นในรายการข้อมูลที่เหลืออยู่ จะเลือกข้อมูลที่มีค่าน้อยที่สุดมาเป็นข้อมูลในรายการคำตอบเป็นลำดับที่สอง จากนั้นเลือกข้อมูลที่มีค่าน้อยที่สุดมาเป็นข้อมูลในรายการคำตอบเป็นลำดับที่สาม ไปเรื่อย ๆ แสดงดังตัวอย่าง
ให้นักเรียนเรียงคะแนนสอบวัดความรู้วิชาเทคโนโลยี(วิทยาการคำนวณ) โดยเรียงคะแนนจากน้อยไปหามาก
จากข้อมูลคะแนนต่อไปนี้ 84, 58, 96, 60, 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
ครั้งที่ 1 เลือกคะแนนที่น้อยที่สุด คือ 8 ไปเก็บในรายการคำตอบ
รายการคำตอบ >> 8
ครั้งที่ 2 เลือกคะแนนที่น้อยที่สุดที่ยังไม่ถูกเลือก คือ 9 ไปเก็บในรายการคำตอบ
รายการคำตอบ >> 8 , 9
ครั้งที่ 3 เลือกคะแนนที่น้อยที่สุดที่ยังไม่ถูกเลือก คือ 9 ไปเก็บในรายการคำตอบ
รายการคำตอบ >> 8, 9, 9
ครั้งที่ 4 เลือกคะแนนที่น้อยที่สุดที่ยังไม่ถูกเลือก คือ 13 ไปเก็บในรายการคำตอบ
รายการคำตอบ >> 8, 9, 9, 13
ทำเช่นนี้ไปเรื่อย ๆ จนหมด (ทำซ้ำ)
สุดท้ายรายการคำตอบ >> 8, 9, 9, 13, 35, 42, 44, 50, 58, 58, 60, 61, 62, 77, 84, 86, 90, 92, 96
จากตัวอย่าง สามารถเขียนเป็นขั้นตอนวิธี ได้ดังนี้
ขั้นตอนวิธี : การเรียงลำดับข้อมูลแบบเลือก
ข้อมูลเข้า : รายการข้อมูล L
ข้อมูลออก : รายการคำตอบ S ที่เรียงลำดับแล้ว
1. ให้ S แทนรายการคำตอบโดยเมื่อเริ่มต้น S จะเป็นรายการว่าง
2. ให้ N <--- จำนวนข้อมูลในรายการ L
3. ทำซ้ำ N รอบ
3.1 เลือกข้อมูลที่น้อยที่สุดจากรายการ L ที่ยังไม่ถูกเลือก และแทนข้อมูลนั้นด้วย M
3.2 ขีดทับข้อมูล M ในรายการ L
3.3 เพิ่ม M ต่อท้ายรายการคำตอบ S
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
2) การจัดเรียงแบบแทรก (insertion sort) เป็นการนำข้อมูลที่ยังไม่ได้พิจารณามาแทรกในตำแหน่งที่ถูกต้องโดยค่าของข้อมูลที่กำลังพิจารณาต้องมากกว่าหรือเท่ากับค่าของข้อมูลตัวหน้า และน้อยกว่าหรือเท่ากับค่าของข้อมูลตัวหลังในรายการที่เรียงลำดับแล้ว การจัดเรียงข้อมูลแบบแทรก แสดงดังตัวอย่าง
ให้นักเรียนเรียงคะแนนสอบวัดความรู้วิชาเทคโนโลยี(วิทยาการคำนวณ) โดยเรียงคะแนนจาก น้อยไปหามาก
จากข้อมูลคะแนนต่อไปนี้ 84, 58, 96, 60, 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
รายการข้อมูลที่เหลือ 84, 58, 96, 60, 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
รายการคำตอบ >> -
ครั้งที่ 1 รายการคำตอบ >> 84, //นำคะแนนตัวหน้าไปแทรกในรายการคำตอบ ซึ่งเป็นรายการว่าง
รายการข้อมูลที่เหลือ 58, 96, 60, 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
ครั้งที่ 2 รายการคำตอบ >> 58, 84, //แทรกในรายการตามเงื่อนไข (ต้องมากกว่าหรือเท่ากับข้อมูลตัวหน้าและน้อยกว่าหรือเท่ากับข้อมูลตัวหลัง (ซึ่ง 58 > 0 และ < 84 จึงถูกแทรกข้างหน้าในรายการคำตอบ)
รายการข้อมูลที่เหลือ 96, 60, 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
ครั้งที่ 3 รายการคำตอบ >> 58, 84, 96 //แทรกในรายการตามเงื่อนไข (ซึ่ง 96 > 58 และ > 84 จึงถูกแทรกข้างหลังในรายการคำตอบ)
รายการข้อมูลที่เหลือ 60, 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
ครั้งที่ 4 รายการคำตอบ >> 58, 60, 84, 96 //แทรกในรายการตามเงื่อนไข (ซึ่ง 60 > 58 และ < 84 จึงถูกแทรกระหว่าง 58 กับ 84 ในรายการคำตอบ)
รายการข้อมูลที่เหลือ 8, 9, 77, 62, 92, 13, 86, 44, 50, 9, 90, 42, 61, 58, 35
ทำเช่นนี้ไปเรื่อย ๆ จนหมด (ทำซ้ำ)
สุดท้ายรายการคำตอบ >> 8, 9, 9, 13, 35, 42, 44, 50, 58, 58, 60, 61, 62, 77, 84, 86, 90, 92, 96
รายการข้อมูลที่เหลือ -
จากตัวอย่าง สามารถเขียนเป็นขั้นตอนวิธี ได้ดังนี้
ขั้นตอนวิธี : การเรียงลำดับข้อมูลแบบแทรก
ข้อมูลเข้า : รายการข้อมูล L
ข้อมูลออก : รายการคำตอบ S ที่เรียงลำดับแล้ว
1. ให้ S แทนรายการคำตอบโดยเมื่อเริ่มต้น S จะเป็นรายการว่าง
2. ให้ N <--- จำนวนข้อมูลในรายการ L
3. ทำซ้ำ N รอบ
3.1 ให้ M แทนข้อมูลที่กำลังพิจารณาในรายการ L
3.2 ให้ A แทนข้อมูลตัวหน้า และ B แทนข้อมูลตัวหลัง
3.3 ถ้า M >= A and M <= B แล้ว
ให้แทรก M ในรายการคำตอบ S ที่เรียงลำดับแล้ว
ในการแก้ปัญหาด้วยคอมพิวเตอร์ นักเรียนจะต้องพัฒนาโปรแกรมเพื่อสั่งงานและควบคุมระบบคอมพิวเตอร์ให้ทำงานหรือมีพฤติกรรมตามต้องการในการออกแบบและพัฒนาโปรแกรมดังกล่าว นักเรียนอาจเริ่มจากการออกแบบขั้นตอนวิธีซึ่งหมายถึงกระบวนการแก้ปัญหาที่มีความชัดเจน ก่อนจะนำไปเขียนเป็นโปรแกรมคอมพิวเตอร์ การพิจารณาข้อมูลเข้า ข้อมูลออกและเงื่อนไขที่ใช้ในการตัดสินใจ เป็นกิจกรรมที่ช่วยเพิ่มความชัดเจนในการออกแบบขั้นตอนวิธี นอกจากนี้ในการออกแบบขั้นตอนวิธีที่ซับซ้อน อาจนำขั้นตอนวิธีการเรียงข้อมูลหรือขั้นตอนวิธีการค้นหาข้อมูลมาประยุกต์ใช้ประกอบการแก้ปัญหาได้