Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาความน่าจะเป็นของการมี n หรือน้อยกว่าใน Python


สมมติว่าเรากำลังเล่นเกมที่ไม่เหมือนใครและมีค่าสามค่าคือ n, k และ h เราเริ่มต้นจาก 0 คะแนน จากนั้นเราสามารถสุ่มเลือกตัวเลขระหว่าง 1 ถึง h (รวม) แล้วเราจะได้คะแนนนั้นมาก เราหยุดเมื่อเราได้คะแนนขั้นต่ำ k คะแนน เราต้องหาความน่าจะเป็นที่เรามี n คะแนนหรือน้อยกว่านั้น ที่นี่สามารถเลือกหมายเลขใดก็ได้แบบสุ่มและผลลัพธ์ทั้งหมดมีความน่าจะเป็นเท่ากัน

ดังนั้น หากอินพุตเป็น n =2, k =2, h =10 เอาต์พุตจะเป็น 0.11

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน dp() นี่จะเป็นเส้นทาง

    • ถ้าเส้นทางเหมือนกับ k − 1 แล้ว

      • ผลตอบแทน (ขั้นต่ำของ n − k + 1 และ h) / h

    • ถ้าเส้นทาง> n แล้ว

      • คืนค่า 0

    • ถ้าเส้นทาง>=k แล้ว

      • กลับ 1

    • กลับ dp(เส้นทาง + 1) − (dp(เส้นทาง + ชั่วโมง + 1) − dp(เส้นทาง + 1)) / ชั่วโมง

  • จากหน้าที่หลัก ให้ทำดังต่อไปนี้ -

  • ถ้า k เป็นศูนย์ แล้ว

    • กลับ 1

  • ถ้า n

    • คืนค่า 0

  • กลับ dp(0)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def solve(self, n, k, h):
      if not k: return 1
         if n < k: return 0
         def dp(path):
            if path == k− 1:
               return min((n− k + 1), h) / h
            if path > n:
               return 0
            if path >= k:
               return 1
            return dp(path + 1)− (dp(path + h + 1)− dp(path + 1)) / h
         return dp(0)
ob = Solution()
print(ob.solve(2,2,10))

อินพุต

2,2,10

ผลลัพธ์

0.11