m 회 이상 n 회 이상 발생하는 확률


11

성공 확률 p 가 주어지면 , 숫자 n 과 시행 횟수 mm 번의 시행 n 번 이상 성공할 확률을 반환 하는 프로그램이나 함수를 작성하십시오 .

답은 소수점 이하 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
이항 분포를 연구하지 않은 우리에게 수식을 포함 하시겠습니까?
Leaky Nun

2
@KennyLau 죄송합니다. 이는 도전의 일부입니다.
orlp

답변:


3

젤리 , 15 14 바이트

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

m , np (순서대로)를 명령 행 인수로 읽습니다 . 온라인으로 사용해보십시오!

참고이 방법이 요구하는 O (2 m ) 가되지 않도록, 시간과 메모리를 매우 효율적으로 충분한 테스트 케이스에 대한 m = 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

파이썬, 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

베이스 케이스 제외 이항 계수의 재귀 공식은 m==0필요한 성공 잔여 개수가 있는지 여부를 나타내는 n와 음수 인 True/False1/0 . 지수 재귀 트리로 인해 큰 입력에서 중단됩니다.


이 경우에 대한 답변을 테스트하려면을 사용하여 캐싱을 추가하십시오 from functools import lru_cache; f = lru_cache(None)(f).
orlp

@orlp 감사합니다. 큰 테스트 사례를 확인했습니다.
xnor

3

하스켈, 73 바이트

g x=product[1..x];f p n m=sum[g m/g k/g(m-k)*p**k*(1-p)**(m-k)|k<-[n..m]]

3

MATLAB, 78 71 바이트

Luis Mendo 덕분에 7 바이트가 절약되었습니다!

@(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 (1 천)으로 낮아졌습니다. 따라서 링크가 부정확 한 결과를 생성합니다.

순수한 확률 론적 접근법을 사용합니다.


나는 확률 론적 접근이이 질문에 유효 할 것이라고 생각하지 않지만, 우리는 @orlp
Sp3000

높은 확률로 정확도 c를 얻으려면 1 / c ^ 2 시행의 순서가 필요하므로 소수점 다섯 자리의 경우 ~ 10 ^ 10이됩니다.
xnor

CG는 매우 큰 숫자입니다. 실제로, 문자열 "abc ... z"는 base-256에서 10 진수로 변환됩니다.
Leaky Nun

2
"probabilstic"이 랜덤을 의미하는 경우 평균화 실현 횟수에 관계없이 정확한 값을 보장 할 수 없습니다 . 실제로 결과는 매번 다릅니다.
Luis Mendo

2
결과가 소수점 5 자리까지 정확하지 않을 가능성 은 항상 0 이 아닙니다. 따라서 요구 사항을 충족하지 못합니다 귀하의 답변은 5 자리 이상이어야합니다
Luis Mendo

1

자바 스크립트 (ES7), 82 바이트

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

reduce! 를 사용하여 1 바이트를 저장했습니다 . 설명:

(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)




0

TI 기본, 17 바이트

소수점 이하 10 자리까지, 더 많은 코드를 사용하여 0 ~ 14 소수점까지 조정할 수 있습니다.

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

0

하스켈, 54 바이트

(p%n)m|m<1=sum[1|n<1]|d<-m-1=(1-p)*(p%n)d+p*(p%(n-1))d

함수를 정의합니다 (%). 처럼 부르십시오 (%) 0.4 2 3.


n <= 0 대신 n <1.
Damien

0

매스 매 티카, 48 바이트

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

이항 분포 확률 공식을 사용하여 k 에서 n 에서 m 까지 의 k 성공 확률을 계산합니다 . s 가 나중에 실제 값 p 로 대체 될 확률에 대한 기호 변수 인 기호 합계를 사용하여 엣지 케이스를 처리합니다 . ( s 0 = 1 이기 때문에 0 0 은 미정입니다.)

예

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.