วิทย์ม.ต้น: ให้คอมพิวเตอร์คำนวณความน่าจะเป็น และใช้วิธีสุ่ม (sampling) เมื่อปัญหาใหญ่เกิน

(ลิงก์ดาวโหลดอยู่ด้านล่าง)

ผมให้แบบฝึกหัดเด็กม.ต้นที่หัดเขียนโปรแกรมไพธอนโดยให้กลับไปคิดและเขียนโปรแกรมแก้ปัญหาที่ต้องทำด้วยมือในวิชาคณิตศาสตร์กันครับ ถ้าสั่งให้คอมพิวเตอร์ทำงานให้ได้ก็แสดงว่าเข้าใจหลักการต่างๆแล้ว นอกจากนี้คอมพิวเตอร์สามารถแก้ปัญหาใหญ่ๆที่เราทำด้วยมือไม่ไหวด้วย

คราวนี้ผมให้แบบฝึกหัดเด็กๆไปหาคำตอบของคำถามนี้ครับ: ซื้อขนมชนิดหนึ่ง ในกล่องมีให้สะสมตุ๊กตากล่องละแบบ มีตุ๊กตาทั้งหมด 4 แบบ สะสมครบ 4 แบบจะได้รับรางวัลพิเศษ เราไม่รู้ว่าแต่ละกล่องมีตุ๊กตาแบบไหนแต่ตุ๊กตาแต่ละตัวมีโอกาสเท่าๆกันที่จะอยู่ในขนมแต่ละกล่อง ถ้าซื้อขนมนี้มา 8 กล่องถามว่าความน่าจะเป็นที่จะได้รางวัลพิเศษมีเท่าไหร่

เราก็สามารถให้คอมพิวเตอร์สร้างรูปแบบขนม 8 กล่องที่เป็นได้ทั้งหมด และนับว่ารูปแบบไหนมีตุ๊กตาครบ 4 แบบดังนี้:

ผมให้เด็กๆหัดใช้ all() และ any() และ list comprehension ด้วย หน้าตาโปรแกรมก็อออกมาประมาณนี้:

ถ้าเราอยากรู้ว่าโอกาสได้รางวัลเป็นเท่าไรเมื่อซื้อมา 4 กล่อง เราก็สามารถแก้ไขโปรแกรมเราได้ประมาณนี้:

ถ้าเราอยากคำนวณความน่าจะเป็นเมื่อซื้อจำนวนกล่องอื่นๆโดยไม่ต้องเข้าไปแก้ไขโปรแกรมตลอด เราสามารถใช้ itertools.product() ได้:

ถ้าเราพยายามคำนวณสำหรับจำนวนกล่องมากๆ วิธีแจกแจงจำนวนกล่องที่เป็นไปได้ทั้งหมดจะทำได้ยาก เพราะจำนวนแบบที่เป็นไปได้เพิ่มขึ้นรวดเร็วมากเมื่อจำนวนกล่องเพิ่ม (เท่ากับ 4N เมื่อ N คือจำนวนกล่อง) ถ้าเราซื้อ 20 กล่อง จำนวนที่เป็นไปได้จะเป็นล้านล้านแบบ (เลข 12 หลัก) ถ้าซื้อ 30 กล่อง จำนวนที่เป็นไปได้จะเป็นล้านล้านล้านแบบ (เลข 18 หลัก) เราต้องใช้วิธีอื่นประมาณความน่าจะเป็น

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

เมื่อวาดกราฟความน่าจะเป็น vs. จำนวนกล่องก็จะได้ภาพแบบนี้:

ผมบันทึกตัวอย่างเหล่านี้ไว้ให้เด็กๆและผู้สนใจเข้ามาดูทบทวนโดยสามารถโหลด Jupyter Notebook ได้ที่นี่ หรือดูออนไลน์ได้ที่นี่นะครับ

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.