ความน่าจะเป็นของบางสิ่งบางอย่างที่เกิดขึ้นอย่างน้อย n ครั้งจาก m


11

เขียนโปรแกรมหรือฟังก์ชั่นที่ให้ค่าความน่าจะเป็นสำเร็จp , จำนวนnและจำนวนการทดลองmส่งคืนโอกาสที่ nประสบความสำเร็จอย่างน้อยจากการทดลองm

คำตอบของคุณจะต้องแม่นยำอย่างน้อย 5 หลักหลังจุดทศนิยม

กรณีทดสอบ:

 0.1, 10, 100 -> 0.54871
 0.2, 10, 100 -> 0.99767
 0.5, 13,  20 -> 0.13159
 0.5,  4,   4 -> 0.06250
0.45, 50, 100 -> 0.18273
 0.4, 50, 100 -> 0.02710
   1,  1,   2 -> 1.00000
   1,  2,   1 -> 0.00000
   0,  0,   1 -> 1.00000
   0,  0,   0 -> 1.00000
   0,  1,   1 -> 0.00000
   1,  1,   0 -> 0.00000

3
คุณสนใจที่จะรวมสูตรให้พวกเราที่ยังไม่ได้ศึกษาการแจกแจงทวินาม?
Leun Nun

2
@KennyLau ขออภัยนั่นเป็นส่วนหนึ่งของความท้าทาย
orlp

คำตอบ:


3

เยลลี่ , 15 14 ไบต์

2ṗ’S<¥ÐḟCạ⁵P€S

อ่านm , nและp (ตามลำดับนั้น) เป็นอาร์กิวเมนต์บรรทัดคำสั่ง ลองออนไลน์!

โปรดทราบว่าวิธีการนี้ต้องใช้O (2 เมตร )เวลาและหน่วยความจำจึงไม่ค่อนข้างมากพอที่มีประสิทธิภาพสำหรับการทดสอบกรณีที่ม. = 100 บนเครื่องของฉันกรณีทดสอบ(m, n, p) = (20, 13, 0.5)ใช้เวลาประมาณ 100 วินาที มันต้องการหน่วยความจำมากเกินไปสำหรับล่ามออนไลน์

มันทำงานอย่างไร

2ṗ              Cartesian product; yield all vectors of {1, 2}^n.
  ’             Decrement, yielding all vectors of {0, 1}^n.
      Ðḟ        Filter; keep elements for which the link to the left yields False.
     ¥          Combine the two links to the left into a dyadic chain.
   S              Sum, counting the number of ones.
    <             Compare the count with n. 
        C       Complement; map z to 1 - z.
         ạ⁵     Compute the absolute difference with p.
           P€   Compute the product of each list.
             S  Compute the sum of all products.


6

R, 32 31 ไบต์

function(p,n,m)pbeta(p,m,1+n-m)

แก้ไข - 1 ไบต์สลับไปใช้การแจกแจงแบบเบต้า (ตามแนวของ @ Sp3000 Mathematica Answer)


3

Python ขนาด 57 ไบต์

f=lambda p,n,m:m and(1-p)*f(p,n,m-1)+p*f(p,n-1,m-1)or n<1

สูตร recursive สำหรับค่าสัมประสิทธิ์ทวินามยกเว้นกรณีฐานm==0บ่งชี้ว่าจำนวนที่เหลืออยู่ของความสำเร็จต้องnเป็นค่าลบด้วยสำหรับTrue/False 1/0เนื่องจากต้นไม้เรียกซ้ำแบบเอกซ์โพเนนเชียลทำให้แผงนี้มีขนาดใหญ่


from functools import lru_cache; f = lru_cache(None)(f)การทดสอบคำตอบนี้สำหรับกรณีที่มีขนาดใหญ่เพิ่มแคชใช้
orlp

@ orlp ขอบคุณฉันยืนยันกรณีทดสอบขนาดใหญ่
xnor


3

MATLAB, 78 71 ไบต์

บันทึกแล้ว 7 ไบต์ขอบคุณ Luis Mendo!

@(m,k,p)sum(arrayfun(@(t)prod((1:m)./[1:t 1:m-t])*p^t*(1-p)^(m-t),k:m))

ans(100,10,0.1)
0.5487

ฟังก์ชั่น arrayfun นั้นสนุก แต่ฉันไม่พบวิธีที่จะกำจัดมัน ...



1

Pyth, 20 ไบต์

JEKEcsmgsm<O0QKJCGCG

ลองออนไลน์!

หมายเหตุ: CG เป็นจำนวนมากซึ่งล่ามไม่สามารถจัดการได้ ดังนั้นจำนวนการทดลองจึงลดลงเหลือ ^ T3 ซึ่งเป็นหนึ่งพัน ดังนั้นลิงก์จะสร้างผลลัพธ์ที่ไม่ถูกต้อง

ใช้วิธีการความน่าจะเป็นบริสุทธิ์


ฉันไม่คิดว่าแนวทางความน่าจะเป็นจะใช้ได้กับคำถามนี้ แต่เราต้องถาม @orlp
Sp3000

คุณต้องการลำดับ 1 / c ^ 2 การทดลองเพื่อให้ได้ความถูกต้อง c ที่มีความน่าจะเป็นสูงดังนั้นจะเป็น ~ 10 ^ 10 สำหรับทศนิยมห้าตำแหน่ง
xnor

CG เป็นจำนวนมาก ในความเป็นจริงมันเป็นสตริง "abc ... z" ที่แปลงจากฐาน 256 เป็นทศนิยม
Leun Nun

2
หาก "probabilstic" หมายถึงการสุ่มคุณไม่สามารถรับประกันค่าที่ถูกต้องไม่ว่าคุณจะมีค่าเฉลี่ยจำนวนเท่าใด ในความเป็นจริงผลลัพธ์จะแตกต่างกันทุกครั้ง
Luis Mendo

2
มีความเป็นไปได้ที่ไม่ใช่ศูนย์ที่ผลลัพธ์ไม่ถูกต้องถึงทศนิยม 5 ตำแหน่ง ดังนั้นจึงไม่เป็นไปตามข้อกำหนดที่คำตอบของคุณจะต้องแม่นยำอย่างน้อย 5 หลัก
Luis Mendo

1

JavaScript (ES7), 82 ไบต์

(p,n,m)=>[...Array(++m)].reduce((r,_,i)=>r+(b=!i||b*m/i)*p**i*(1-p)**--m*(i>=n),0)

บันทึก 1 ไบต์โดยใช้reduce! คำอธิบาย:

(p,n,m)=>               Parameters
 [...Array(++m)].       m+1 terms
  reduce((r,_,i)=>r+    Sum
   (b=!i||b*m/i)*       Binomial coefficient
   p**i*(1-p)**--m*     Probability
   (i>=n),              Ignore first n terms
   0)

1

อ็อกเทฟ 26 ไบต์

@(p,n,m)1-binocdf(n-1,m,p)

นี่คือฟังก์ชั่นที่ไม่ระบุชื่อ หากต้องการใช้ให้กำหนดให้กับตัวแปร

ลองได้ที่นี่




0

TI-Basic, 17 ไบต์

แม่นยำถึง 10 ทศนิยมสามารถปรับได้ทุกที่ตั้งแต่ 0-14 ทศนิยมด้วยรหัสเพิ่มเติม

Prompt P,N,M:1-binomcdf(M,P,N-1


0

Mathematica, 48 ไบต์

Sum[s^k(1-s)^(#3-k)#3~Binomial~k,{k,##2}]/.s->#&

ใช้สูตรกระจายทวินามในการคำนวณโอกาสของkความสำเร็จสำหรับkจากnเพื่อเมตร จัดการกรณีขอบโดยใช้ผลรวมสัญลักษณ์ที่sเป็นตัวแปรที่เป็นสัญลักษณ์ที่น่าจะเป็นที่จะถูกแทนที่ในภายหลังด้วยค่าจริงP (ตั้งแต่s 0 = 1 แต่ 0 0ไม่ได้กำหนด)

ตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.