2013-02-19 3 views
7

그래서 임의로 4 개의 값을 12 개의 다른 변수로 나누는 스크립트를 만들려고합니다. 나는 이것을 올바르게 행할 좋은 방법을 생각할 수 없다. 나는 0.33 (1/12 of 4)에 가깝도록 소수를 무작위로 생각했다. 그러나 그것은 종종 최하위 숫자가 과소 선출되었다. 누구나 전에 이와 같은 것을 시도했거나 가능한 한 무작위로 균일하게 고르지 않게 만드는 방법에 대한 훌륭한 아이디어가 있습니까?임의의 부등호로 숫자 나누기

답변

17

좋아하는 난수 생성기에서 12 개의 난수를 생성하려면 r1..r12이라고합니다.

모두 합치면 sum으로 전화하십시오.

첫 번째 임의 분수는 4입니다. (r1/sum)*4입니다. 나머지는 분명해야합니다.

+0

정말 멋졌습니다! 고마워요! – Tom

+0

이 솔루션은 논리적 인 방법으로 균일하게 분포 된 숫자 집합을 생성하지 않지만, 진정으로 획일적 인 무언가를 생성하지 못하는 이유를 이해하지 못하기 때문에 대부분의 사람들이 선택하는 솔루션이라고합니다. –

+0

@ woodchips :이 비판에 대한 몇 가지 구체화를 제공하는 것이 도움이되었지만 (균일 한 경우에도), 균일하게 분산 된 파티션을 생성하는 대답을 제공하는 것이 더 도움이됩니다.나는 그것이 옳은 것인지 잘 모르겠지만 후자를하려고했습니다. – rici

8

1보다 큰 임의의 숫자를 생성하고 필요한 합계로 크기를 조정 한 후 생성하십시오.

예 :

  • 필요한 합계 4
  • 난수 : 1 2 3 4 5 6 7 8 9 10 11 12
  • 합계 = 78 개
  • 재배 율화 번호 :

1은 (1 * 4)/78로 다시 조정된다.

,691,363,210

2로 재 스케일링 (2 × 4)/78

...

12 (12 * 4)/78

2

다음의 알고리즘을 재 스케일링이 가능하다고 가정하면, 균일하게 분포 된 파티션을 제공 연속 범위 (또는 적어도 복제 확률이 무시할 수있는 충분히 많은 가능한 값을 갖는 불연속 범위 이상)에 걸쳐 균일하게 분산 된 난수를 생성 할 수 있습니다.

k는 값으로 t의 격벽을 제조 :

  • 의 범위 [0, t]k-1에 균일하게 분포 된 값들을 생성한다.

  • 정렬하고 처음에 0 및 끝에 t을 추가하십시오.

  • 인접한 차이점을 파티션으로 사용하십시오.