이 개념은 일부 실행 코드로 깔끔하게 설명 할 수 있습니다. 우리 R
는 좋은 의사 난수 생성기를 사용하여 10,000 개의 0과 1의 시퀀스를 생성하여 시작합니다.
set.seed(17)
x <- floor(runif(10000, min=0, max=2))
이것은 기본적인 난수 테스트를 통과합니다. 예를 들어, t-test를가 평균을 비교하기 의 p- 값이 40.09 우리는 0과 똑같이 가능성이 있다는 가설을 받아 들일 수 %를,.1/240.09
이 숫자에서 우리 는 5081 번째 값에서 시작하여 연속적인 값 의 하위 시퀀스를 추출 합니다.1000
x0 <- x[1:1000 + 5080]
이것들이 무작위로 보인다면, 그들은 또한 동일한 난수 테스트를 통과해야합니다. 예를 들어 평균이 1/2인지 테스트 해 보겠습니다.
> t.test(x0-1/2)
One Sample t-test
data: x0 - 1/2
t = 2.6005, df = 999, p-value = 0.009445
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
0.01006167 0.07193833
sample estimates:
mean of x
0.041
낮은 p- 값 (1 % 미만)을 강하게 평균 현저하다 제안 보다 보다 . 실제로이 하위 시퀀스의 누적 합계는 상승 추세가 강합니다.1 / 2
> plot(cumsum(x0-1/2))
그것은 무작위 행동이 아닙니다!
원래 시퀀스 (누적 합계로 표시)를이 하위 시퀀스와 비교하면 현재 진행중인 작업을 알 수 있습니다.
긴 시퀀스는 실제로 임의의 보행처럼 동작하지만 추출한 특정 하위 시퀀스 에는 동일한 길이의 모든 하위 시퀀스 중에서 가장 긴 상향 상승이 포함됩니다. "비 랜덤"동작을 나타내는 다른 하위 시퀀스도 추출 할 수있을 것 같습니다. 예를 들어 약 개를 중심으로 한 행에 약 20 개의 행이 나타납니다.9000
이러한 간단한 분석에서 알 수 있듯이, 어떤 테스트도 시퀀스가 무작위로 나타나는 것을 "증명"할 수 없습니다 . 우리가 할 수있는 것은 무작위 서열이 예상 한 행동에서 충분히 벗어나서 무작위가 아니라는 증거를 제공하는지 테스트하는 것 입니다. 이것은 난수 테스트 배터리의 작동 방식입니다. 난수 시퀀스에서 발생할 가능성이 거의없는 패턴을 찾습니다. 그들은 한 번에 한 번씩 무작위로 숫자가 무작위로 표시되지 않는다는 결론을 내릴 수 있습니다. 다른 시도는 거부 할 것입니다.
그러나 장기적으로, 우리 모두가 죽은 것처럼, 임의의 난수 생성기는 가능한 모든 1000 자리 시퀀스를 생성 하며 무한히 여러 번 수행됩니다. 논리적 인 문제에서 우리를 구출하는 것은 그러한 명백한 수차가 발생하기 위해 끔찍한 시간을 기다려야한다는 것입니다.