이것이 난수 여야하는 것에 대한 편견을 가져 옵니까?


11

무작위로 생성 된 8 천만 +1과 0의 데이터 파일을 가정합니다.

이 파일에서 임의의 10 진 정수 목록을 작성하려고합니다.

이것이이 전환을 수행 할 계획입니다.

  1. 8 천만 자리를 4 개의 이진수로 그룹화하십시오.
  2. 각 4 자리 이진수를 10 진수로 변환합니다.
  3. 9보다 큰 모든 10 진수 값을 버립니다.

이것은 0-9의 임의의 정수 문자열을 초래합니다

여기에 우려가 있습니다. 10에서 15까지의 값에 해당하는 4 개의 이진수 6 개 그룹을 구성하는 24 개의 이진수는 17 개의 1과 7 개의 0 만 포함합니다. 이 불균형은 짝수 대 홀수의 분포에 영향을 주거나 어떤 식 으로든 최종 십진 문자열의 무작위성을 손상시킬 수 있습니까?

업데이트 : 게시 된 답변에서 위에서 열거 한 방법이 올바른 것 같습니다. 나는 그 결론에 동의합니다. 그러나 바이너리 문자열에서 0보다 두 배 이상 많은 0을 제거해도 결과가 홀수보다 적은 편향되지 않는 이유를 여전히 이해하지 못합니다. 나는 설명을 구한다.


9
보다 효율적인 방법이 있습니다. 예를 들어, 비트 문자열을 10 개의 그룹으로 분할하고 10 진수의 3 자리 표현으로 변환 한 다음 1000 이상의 값을 가진 모든 것을 버릴 수 있습니다. 이것은 비트의 62.5 %가 아니라 97.6 %의 비트를 사용합니다. 당신은 그것보다 훨씬 더 잘할 수 없습니다. 681 그룹을 사용하여 205 자리의 Base-10 문자열로 변환하여 비트의 거의 99.7 %를 활용할 수 있습니다.
whuber

답변:


18

세고 보자. 파일을 구성하면 모든 4 비트 문자열이 동일하게 가능합니다. 이러한 문자열은 16 개가 있습니다. 여기 있습니다:

 0. 0000
 1. 0001
 2. 0010
 3. 0011
 4. 0100
 5. 0101
 6. 0110
 7. 0111
 8. 1000
 9. 1001
10. 1010
11. 1011
12. 1100
13. 1101
14. 1110
15. 1111

프로시 저는 문자열 10에서 15를 버립니다. 따라서 실제로 사용하는 경우 원하는대로 0에서 9까지를 선택하게됩니다. 우리는 각각 생성 된 십진수가 4 비트의 개별 문자열을 사용하고 모든 비트가 독립적이기 때문에 서로 독립적이라는 것을 알고 있습니다. 절차는 간단한 종류의 거부 샘플링을 구성합니다 .


5
나는 그 논리를 분명히 본다. 그러나 나는 0보다 더 많은 이진 1을 버리는 것에 대해 걱정하고 있습니다. 그 불균형은 왜 영향을 미치지 않습니까?
Joel W.

5
@JoelW 나는 당신의 주장이 보이지 않는 것 같아요. 최종 분포는 비트가 아닌 10 진수에 관한 것이므로 비트 분포는 관련이 없습니다.
Kodiologist

7
이것은 정확하지만 부분적으로 만 문제를 해결합니다. 질문의 "어떻게 든 타협성 ..."부분을 다루기 위해, 결과적인 십진수가 우수한 근사치와 독립적 이라는 것을 확립해야한다 . 완벽을 기하기 위해, 그 (명백한) 결과에 한 문장의 설명을 기울일 가치가 있습니다.
whuber

7
Joel, 어디에서 왔는지 봅니다. 여기에 오해가있을 수 있습니다 . 프로세스를 되돌릴 수 없습니다. 십진 자릿수 스트림에서 비트 스트림을 재구성하려면 8과 9를 모두 삭제하고 나머지 자릿수를 이진 트리플로 변환하는 것과 같은 작업을 수행해야합니다. 균형이 회복됩니다. 실제로,이 "왕복"은 원래 스트림을 4 비트 니블로 나누고 가장 중요한 비트를 버리고 6000 만 비트의 균일하게 분산 된 시퀀스를 남기는 것을 쉽게 알 수 있습니다.
whuber

1
@whuber 공정한; 추가되었습니다.
Kodiologist

4

폐기 된 일부 값만 시뮬레이션하고 유지 된 값을 포함하여 모든 값이 동일한 확률로 생성되므로 바이어스가 없습니다 . 여기에 이미지 설명을 입력하십시오

위 그래프의 R 코드는

generza=matrix(sample(0:1,4*1e6,rep=TRUE),ncol=4)
uniz=generza[,1]+2*generza[,2]+4*generza[,3]+8*generza[,4]
barplot(hist(uniz[uniz<10],breaks=seq(-0.5,9.5,le=11))$counts,col="steelblue")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.