바이어스가 알려지지 않은 동전이 주어지면 공정한 동전에서 효율적으로 변수를 생성하십시오.


10

바이어스 가 알려지지 않은 동전이 주어지면 pBernoulli 분포가 0.5 인 확률을 가능한 한 효율적으로 생성 할 수 있습니까? 즉, 생성 된 변수 당 최소 플립 수를 사용합니다.


3
간단한 해결책은 동전을 두 번 플립하는 것입니다 그것의 경우 그것의 경우, 머리에 매핑 T H가 꼬리에 매핑. 그렇지 않으면이 두 가지 중 하나에 도달 할 때까지 실험을 반복하십시오. HTTH
추기경

1
@ 카디널 : 니스! 답변을 추가하지 않으시겠습니까?
Neil G

2
@Glen_b : 알겠습니다. 그러나 생성 된 변수 당 최소 플립 횟수로 할 수 있습니까?
Neil G

3
@ MichaelLugo : 나는 확실히 의존 한다고 말하고 싶습니다 . :-) 경우 P는 = (1) / 2 우리는 우리가 하나의 플립에서 그것을 할 수 있습니다 알고 있습니다. p = 1 / 4 이면 두 가지로 할 수 있으며 두 경우 모두에 최적이라는 것을 알 수 있습니다. 답은 엔트로피 H ( p ) 와 관련이 있어야합니다 . 우리가 알고하지 않으면 아무것도 에 대한 페이지 가 아닌 다른 페이지를 ( 0 , 1 )pp=1/2p=1/4H(p)pp(0,1)그런 다음 간단한 게임 이론 결과가 첫 번째 코멘트에서 적절한 방식으로 "최적"인 스킴에 가까운 것을 산출 할 것이라고 생각합니다.
추기경

4
Giorgio1927 님, 안녕하세요. 사이트에 오신 것을 환영합니다! 사람들이 단순히 답변을 제공하는 것이 아니라 답변으로 안내해야한다는 것을 알 수 있도록이 질문에 "자기 학습"태그를 추가하십시오.
jbowman

답변:


6

이것은 여기에서 논의되고 스택 오버 플로우에서 논의 된 몇 가지 훌륭한 솔루션의 잘 알려진 문제입니다 (하나 이상의 링크를 게시 할 수는 없지만 빠른 Google 검색은 흥미로운 항목을 제공합니다). 위키 백과 항목을보십시오

http://en.wikipedia.org/wiki/Fair_coin#Fair_results_from_a_biased_coin


죄송합니다. Google에서 쉽게 할 수 없도록 질문을 수정했습니다…
Neil G

질문에 대한 답변을 생각하는 사람들에게는이 답변이 편집 한 질문에 최적이 아님을 참고하십시오.
Neil G

3

이것은 고전적인 문제이며, 원래 폰 노이만 (Bon Neumann)이 원인이라고 생각합니다. 한 가지 해결책은 쌍이 다를 때까지 동전을 계속 쌍으로 던지고 쌍의 첫 번째 동전의 결과를 연기하는 것입니다.

(Xi,Yi)iXiYipP(Xi=H|XiYi)=P(Xi=T|XiYi)P(Xi=H|XiYi)=1/2XiYi(H,T)(T,H)

경험적으로, 그러한 불평등 한 쌍이 될 때까지의 대기 시간은

1/P(XY)=11p2(1p)2=12p(1p),

p


2

nt ntn't' ( n'(nt)ntnt(nt)

설명하기 위해 :

TH 또는 HT에서 동일한 확률을 가지므로 멈출 수 있습니다. 파스칼의 삼각형을 따라 내려 가면 다음 짝수 항은 4, 6, 4입니다. 두 부분 일치를 만들 수 있기 때문에 헤드 하나가 나오면 롤 후 멈출 수 있음을 의미합니다. 우리가 이미 그 일을 중단했을 것입니다. 마찬가지로 는 TTHH와 일치하는 HHTT를 생성합니다 (나머지는 도달하기 전에 이미 중지 했음).(42)

를 들어 , 시퀀스의 모든 접두사를 중단했다. 에서 FFFFTTFT와 FFFFTTTF를 일치시키는 것이 조금 더 흥미로워 집니다.( 8(52)(83)

들면 8 롤 후 정지 갖지 않는 기회이다 우리가 정지 한 경우 롤의 예상 된 수와 . 롤링 쌍이 서로 다를 때까지 롤링을 유지하는 솔루션의 경우 중지하지 않을 가능성은 이며 롤이 4를 멈춘 경우 예상 롤 수입니다. 재귀에 의해 예상되는 플립의 상한 제시된 알고리즘은 입니다. 1p=12 531128 15316 1281161281275316=424127<4

중단 점을 인쇄하는 Python 프로그램을 작성했습니다.

import scipy.misc
from collections import defaultdict


bins = defaultdict(list)


def go(depth, seq=[], k=0):
    n = len(seq)
    if scipy.misc.comb(n, k, True) % 2 == 0:
        bins[(n,k)].append("".join("T" if x else "F"
                                   for x in seq))
        return
    if n < depth:
        for i in range(2):
            seq.append(i)
            go(depth, seq, k+i)
            seq.pop()

go(8)

for key, value in sorted(bins.items()):
    for i, v in enumerate(value):
        print(v, "->", "F" if i < len(value) // 2 else "T")
    print()

인쇄물:

FT -> F
TF -> T

FFFT -> F
FFTF -> T

FFTT -> F
TTFF -> T

TTFT -> F
TTTF -> T

FFFFFT -> F
FFFFTF -> T

TTTTFT -> F
TTTTTF -> T

FFFFFFFT -> F
FFFFFFTF -> T

FFFFFFTT -> F
FFFFTTFF -> T

FFFFTTFT -> F
FFFFTTTF -> T

FFFFTTTT -> F
TTTTFFFF -> T

TTTTFFFT -> F
TTTTFFTF -> T

TTTTFFTT -> F
TTTTTTFF -> T

TTTTTTFT -> F
TTTTTTTF -> T

경우 알려지지 않은 모든 용액의 값을 제한하는 일해야 및 . 이것은 @Cardinal의 솔루션이 최적이라는 것을 분명히해야합니다. 예상되는 뒤집기 횟수 ( 물론 알 수없는 주어짐 )는 입니다.p 0 p 1 p 2 / ( ( p ( 1 p ) ))pp0p1p2/((p(1p))
whuber

@ whuber : 왜 그것이 최적이어야하는지 모르겠습니다. 내 솔루션은 그의 경우와 같은 모든 경우에 중지됩니다. 그러나 그는 예를 들어 tthh 후에 계속 굴러가는 반면 중지하는 것은 가능합니다.
Neil G

당신의 해결책은 무엇입니까? 여기에 설명 된 내용이 없습니다. @Cardinal의 솔루션 개념이 다를 수 있다고 생각합니다. "머리 수는 꼬리 수와 같을 때마다 멈추고 시퀀스의 첫 번째 결과 값에 매핑합니다"라는 의미로 이해합니다.
whuber

@whuber : 당신은 이것을 의미합니다 : "간단한 해결책은 동전을 두 번 뒤집는 것입니다. 만약 그것이 HT라면 그것을 머리에, TH라면 그것을 꼬리에 매핑하십시오. 그렇지 않으면,이 둘 중 하나에 도달 할 때까지 실험을 반복하십시오." 이것은 HHTT를 위해 멈추지 않을 것입니다. 짝수 인덱스에서 HT 또는 TH 쌍을 기다립니다.
Neil G

내 해결책은 등가 접두사 (이 중 어느 것도 다른 접두사)와 일치하는 두 부분 일치를 찾고 일치하는 각 절반을 머리 또는 꼬리와 연결하는 것입니다.
Neil G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.