나는 같은 문제가 있었다. 각 항목에 확률이 있고 항목의 확률이 최대 하나 인 집합을 감안할 때, 효율적으로 샘플을 그리고 싶었습니다. 즉, 어떤 것도 정렬하지 않고 반복적으로 반복하지 않습니다 .
다음 함수는 간격 내에서 균일하게 분포 된 난수 중 가장 낮은 값을 그립니다 . 하자 에서 임의의 숫자 .N[a,1)r[0,1)
next(N,a)=1−(1−a)⋅r√N
이 함수를 사용하여 [0,1) 에 균일하게 분포 된 난수 의 오름차순 시리즈 를 그릴 수 있습니다 . 다음은 인 예입니다 .(ai)NN=10
a0=next(10,0)
a1=next(9,a0)
a2=next(8,a1)
…
a9=next(1,a8)
균일하게 분포 된 숫자의 오름차순 시리즈 를 그리면서 임의 (아직 유한) 분포를 나타내는 확률 세트 를 반복 합니다. 하자이터레이터이고 입니다. 그린 후 까지 0 번 이상 증가시킵니다 . 그런 다음 샘플 에 를 추가 하고 도면으로 갑니다 .(ai)P0≤k<|P|pk∈Paik∑p0…pk>aipkai+1
op의 세트가 이고 샘플 크기 :{(1,0.04),(2,0.5),(3,0.46)}N=10
나는 a_i k Sum Draw
0 0.031 0 0.04 1
1 0.200 1 0.54 2
2 0.236 1 0.54 2
3 0.402 1 0.54 2
4 0.488 1 0.54 2
5 0.589 2 1.0 3
6 0.625 2 1.0 3
7 0.638 2 1.0 3
8 0.738 2 1.0 3
9 0.942 2 1.0 3
샘플 :(1,2,2,2,2,3,3,3,3,3)
함수가 궁금하다면 : 균일하게 분포 된 난수 중 하나 가 의 간격 내에있을 확률의 반대입니다 .nextN[a,x)x≤1