매스 매 티카 165
간소화되지 않았지만 일부는 관심있는 알고리즘을 찾을 수 있습니다.
d = RealDigits; r = RandomInteger;
f@n_ := If[(c = Cases[Transpose@{a = Join[ConstantArray[0, Abs[d[n, 2][[2]]]], d[n, 2][[1]]],
RandomInteger[1, {Length@a}]}, {x_, x_}]) == {}, r, c[[1, 1]]]
용법
f[.53]
1
검사
시간의 약 53 %가 f[.53]실제로 값을 생성 하는지 봅시다 1. 각 테스트는 10 ^ 4의 샘플에 대한 %를 계산합니다.
이러한 테스트는 50 회 실행되고 평균화됩니다.
Table[Count[Table[f[.53], {10^4}], 1]/10^4 // N, {50}]
Mean[%]
{0.5292, 0.5256, 0.5307, 0.5266, 0.5245, 0.5212, 0.5316, 0.5345, 0.5297, 0.5334, 0.5306, 0.5288, 0.528, 0.5379, 0.5293, 0.5263, 0.539, 0.5322, 0.5195, 0.5208, 0.5382, 0.543, 0.5336, 0.5305, 0.5303 0.5297, 0.5318, 0.5243, 0.5281, 0.5361, 0.5349, 0.5308, 0.5265, 0.5309, 0.5233, 0.5345, 0.5316, 0.5376, 0.5264, 0.5269, 0.5295, 0.523, 0.5294, 0.5326, 0.5316, 0.5334, 0.5165, 0.5296, 0.5266, 0.5293 }
0.529798
결과 히스토그램

설명 (스포일러 경고!)
.53의 기본 2 표현은
.10000111101011100001010001111010111000010100011110110
한 번에 한 자리 씩 왼쪽에서 오른쪽으로 진행 :
RandomInteger []가 1을 반환하면 answer = 1,
그렇지 않으면 두 번째 RandomInteger []가 0을 반환하면 answer = 0,
그렇지 않으면 세 번째 RandomInteger []가 0을 반환하면 답 = 0,
그밖에....
모든 숫자를 테스트 했는데도 여전히 답이 없으면 answer = RandomInteger []입니다.