ปัญหา Birthday Paradox กับการสุ่มเพลง
ปกติเราได้ยินเรื่องทฤษฎีรังนกพิราบที่ถ้ามีนกเยอะพอจะมีนกสองตัวที่อยู่ในรังเดียวกัน แต่ถ้ามันมีน้อยกว่านั้นล่ะ จะมีโอกาสแค่ไหนที่นกสองตัวที่อยู่ในรังเดียวกัน?
เรื่องเล่าจากโพสต์ที่แล้ว:
วันก่อนนั่งคุยกับ roommate แล้วมี topic นึงน่าสนใจ เลยเอามาเล่าให้ฟัง เรื่องมันมีอยู่ว่ามันมีเครื่องเล่น MP3 อยู่ยี่ห้อนึงที่มันมีโหมดสุ่มเพลงขึ้นมาเล่น…
ประเด็นมีอยู่ว่า ระบบสุ่มของเครื่องเล่นตัวนี้มันสุ่มเพลงใหม่ทุกครั้งที่เล่นเพลงเก่าจบ แปลว่าเวลาสุ่มใหม่ก็มีโอกาสโดนเพลงเดิมอ่ะนะ
แล้วคนใน Reddit ช่องของ MP3 ตัวนี้ก็บ่นๆกันว่าเนี่ยใส่ไปตั้ง กว่าเพลง แต่เปิดสุ่มไปได้ กว่าๆเพลงก็เจอเพลงซ้ำแล้ว แถมซ้ำหลายรอบด้วย
ดูอีกปัญหาเล่นๆก่อนจะไปต่อ
แทนที่จะคิดเรื่องการสุ่มเพลง เดี๋ยวเล่าปัญหาใหม่อีกอันนึงให้ฟังก่อน:
มีห้องประชุมห้องนึง ที่มีคนอยู่ในห้องประมาณ 40 คน ถามว่ามีโอกาสที่คนในห้องมีคนเกิดวันตรงกันกี่เปอร์เซ็น?
ถ้าสมมติว่าปีนึงมีแค่ วัน คิดตาม common sense ปกติก็อาจจะคิดว่า โอกาสที่จะเกิดวันเดียวกันก็คงประมาณ ใช่มะ
จริงๆแล้วไม่ใช่เลย… การที่เราได้ มันมาจากการเปรียบเทียบคนในห้องประชุมที่มี คน กับจำนวนวันเกิดทั้งหมด วัน เมื่อเทียบกับคนๆเดียว อารมณ์แบบว่าถามว่าคนในห้องนั้นมีคนเกิดวันเดียวกันกับ ตัวเราเอง ไหม
ถ้ามองเป็นรูปภาพก็ลองคิดซะว่า แต่ละช่องเป็นวันเกิดที่เป็นไปได้ แล้วกากบาทคือมีคนเกิดวันนั้นไปแล้ว จะได้ว่า มันจะได้ว่ามีช่องอยู่ ช่องแล้วก็ ช่องโดนกากบาท
รูปตารางขนาดวันเกิดแบบสมมติขนาด 16 (4*4)
เปลี่ยนจากที่มีคนอยู่ คนเป็น คนด้วยละกันเพื่อความง่าย
ถึงอย่างงั้นตอนเรามองที่ตาราง เราจะได้ว่าโอกาสจะซ้ำมันก็แค่ หรือ อยู่ดีใช่มะ แต่อย่างที่อธิบายไปตอนแรกคือ เราไม่ได้เทียบกับคนๆเดียวไง เราเทียบทุกคู่ที่อยู่ในห้องเลย
แล้วมันแปลว่าอะไรล่ะ? ถ้าเรามองในมุมมองของคนแรกที่อยู่ในห้อง (สมมติยังไม่มีใครเลยในห้องนอกจากคนแรก) แปลว่าตารางวันเกิด ช่องที่เรามียังไม่โดนใช้เลยสักช่อง หมายความว่าไม่ว่าคนแรกจะเกิดวันไหน ยังไงก็ไม่ซ้ำกับคนอื่นๆที่อยู่ในห้องแน่ๆ (แหงล่ะ ไม่มีใครในห้องหนิ 🤣)
ปฏิทินแสดงโอกาสไม่ซ้ำหลังจากคนแรก
แล้วคนที่ถัดมาล่ะ? มันก็มีสองกรณีคือซ้ำกับคนแรกเลย (ซึ่งเป็นไปได้ยาก) หรือไม่ซ้ำกับคนแรกใช่มะ แต่การจะไม่ซ้ำกับคนแรก ก็แปลว่าคนที่สองมีวันเกิดอยู่ใน ช่องที่เหลือ หมายความว่ามีโอกาส ที่จะไม่ซ้ำ
ปฏิทินแสดงโอกาสไม่ซ้ำหลังจากคนที่สอง
คนที่สามล่ะ? ถ้าสมมติสองคนแรกไม่ซ้ำกัน เขาก็มีโอกาสซ้ำอยู่ และ โอกาสไม่ซ้ำ
ซึ่งมันจะเป็นแบบนี้ไปเรื่อยๆนั่นแหละ คนที่สี่ก็มีโอกาส ที่จะไม่ซ้ำกับคนอื่นๆ ถ้าสมมติให้สามคนก่อนหน้าไม่ซ้ำกัน
ปฏิทินแสดงโอกาสไม่ซ้ำหลังจากคนที่สาม
แล้วมันแปลว่าอะไร… โอกาสที่จะมี คนในห้องแล้ววันเกิดไม่ซ้ำกันก็เป็น จะได้ประมาณ
แต่พอมีคนที่ 5 ที่โอกาสไม่ซ้ำอยู่ที่ ความน่าจะเป็นที่วันเกิดไม่ซ้ำมันตกมาเหลือราวๆ เลย แล้วถ้ามีคนที่ 6 ก็จะลงไปมากกว่านี้อีก
ซึ่งในกรณีวันเกิด วัน ใช้วิธีคิดแบบเดียวกัน จะได้ว่า แค่ คนก็ทำให้โอกาสไม่ซ้ำกันลงมาเหลือ แค่ประมาณ แล้ว
ถ้ามีสัก คน โอกาสที่จะไม่ซ้ำกันเลยจะลงมาเหลือแค่ หมายความว่ามีโอกาสประมาณ ที่มีจะคนเกิดวันซ้ำกัน
แวบแรกมันจะฟังดูขัด common sense ประมาณนึงเลย เขาก็เลยเรียกตัวนี้ว่า Birthday Paradox ถ้าอยากอ่านข้อมูลเพิ่มหาในเน็ตได้มีเยอะแยะ
กลับมาเรื่องเพลง
เหมือนนอกเรื่องมาเยอะ กลับมาเรื่องการสุ่มเพลงก่อน เรามีเพลงอยู่ เพลง แล้วต้องการสุ่ม ครั้งคิดเล่นๆว่าโอกาสที่จะสุ่มมาได้ ไม่ซ้ำกันเลยมีเท่าไหร่
ถ้าลองวาดเพลงแทนด้วยกล่องแล้วทำแบบเดิมก็จะได้ว่า… อ้าว มันคำถามเดียวกันกับเรื่องวันเกิดเลยนี่นา แค่ scale มันใหญ่ขึ้นเอง 😅
ถ้าอยากลองคิดเล่นๆว่ามีโอกาสเท่าไหร่ที่จะไม่มีเพลงซ้ำ ไปลองได้ฮะ (ใช้เครื่องคิดเลขก็ดีนะ) แต่มันจะได้สมการประมาณนี้:
แต่ถ้าจะถามว่ามีโอกาสซ้ำกี่เปอร์เซ็น ก็เอาไปลบกับ :
ปล. สำหรับการสุ่มมา เพลงจาก จะมีโอกาสซ้ำประมาณ
แอดเขียนโปรแกรมมาคำนวณทิ้งไว้อยู่เหมือนกัน: โปรแกรมคำนวณ Birthday_Paradox ที่เขียนเล่นๆ ไปอ่านเล่นได้ฮะ
ถามเล่นเรื่อยเปื่อย
แล้วถ้าสุ่ม ครั้ง จาก เพลงล่ะ?
แล้วมันสำคัญยังไง
เรื่องสุ่มเพลงอ่ะไม่ได้สำคัญหรอก มันสำคัญเพราะมันเกี่ยวกับเรื่องการทำ Hashing ถ้าไม่รู้ว่า Hashing คืออะไรไปอ่านโจทย์ข้อ Timerswitch โจทย์ข้อ Timerswitch จาก TOI13
หรือไม่ก็อ่านเรื่อง Rabin-Karp Algorithm ก็ได้เหมือนกัน เปรียบเทียบสตริงด้วย Rabin-Karp Algorithm
แต่หลักๆคือเราเห็นแล้วว่าการทำ Hash function ถ้า Range ของข้อมูลส่งออกมันเล็กมากๆ อย่างในกรณีวันเกิดมันก็มีแค่ เรา Hash ไม่เท่าไหร่ มันก็ collide แล้ว
ซึ่งตอนมัน collide เนี่ยน่ากลัวมาก เพราะมันทำให้เกิดปัญหาอย่างอื่นได้อีกเยอะ (ไว้หาโอกาสมาอธิบายทีหลังละกัน เดี๋ยวจะนอกเรื่องเยอะไป)