준도 코키 요시가 멈출 때까지의 평균 준도코 횟수에 대해

개요



준도코키요시에 있어서, 평균 몇번 준 또는 도코를 출력하면 「키요시!」에 도달하는지에 대해서, 초등적인 산출법이 찾아볼 수 없었기 때문에 지금 게다가 기사로 했습니다.

고등학교 수학까지의 범위 정도로 이해할 수 있는 내용으로 되어 있습니다.

어떤 프로그램이었는지 가장 먼저 잊었다고 하는 분은 준도코키요시 정리 를 참조해 주세요.

Java의 강의, 시험이 「자작 함수를 만들어 기술해 주세요」라고 문제였기 때문에 「준」 「도코」중 하나를 랜덤으로 출력해 계속해 「준」 「준」 「준」 「준」 '의 배열이 나오면 '기요시!'라고 출력한 후 끝나고 함수 만들면 만점으로 단위받았다— 테쿠모 (@kumiromilk) March 9, 2016


목적



요청하고 싶은 것은 '준·준·준·································································································································” 즉,



p_k: \text{k回ズンドコしたとき、k回目に初めて「ズンズンズンズンドコ」パターンが現れる確率}


로 정의할 때



E = \Sigma_{k=1}^\infty kp_k     


가 원하는 값입니다.



계산



$p_k$는 'k회 이상 준도코할 확률'에서 'k+1회 이상 준도코할 확률'을 뺀 것으로,

「k회 이상 준도코할 확률」이란 「k-1회째까지 패턴이 나타나지 않을 확률」과 같습니다.

따라서 $q_k$,



q_k: \text{k回ズンドコしたとき「ズンズンズンズンドコ」パターンが現れない確率}


로 정의하면



p_k = q_{k-1} - q_k \tag {1}


가 성립합니다.






또한 $k > 5$일 때 $p_k$는 "k-5회 준도코해도 패턴이 나타나지 않고, k-4번째 이후부터 패턴이 나타날 확률"이기도 하기 때문에,



  p_k = q_{k-5} \cdot \frac{1}{2^5} \tag{2}


가 성립합니다.



이 (1) (2)의 방정식을 사용하면 예상 값 $ E $는



\begin{eqnarray}
  E &=& \Sigma_{k=1}^\infty kp_k  \\
    &=& \Sigma_{k=1}^\infty k(q_{k-1} - q_k)  \tag{(1)より}  \\
    &=& \Sigma_{k=0}^\infty q_k               \tag {うまく相殺されてこうなる} \\
    &=& \Sigma_{k=5}^\infty q_{k-5} \\ 
    &=& 2^5 \cdot \Sigma_{k=5}^\infty p_k           \tag{(2)より} \\
    &=& 2^5 (1 - \Sigma_{k=1}^4 p_k)       \tag{*} \\
    &=& 2^5 (1 - 0)      
\end{eqnarray}


로 계산할 수 있습니다.



(*)의 도출에는 「$p_k$의 합계는 1인 것」 하고 있습니다.



따라서 '기요시!'까지의 평균 준도코 수는 $2^5 = 32$회라는 것을 알았습니다.



실제로 시도해보기



이상의 결과가 올바른지, 파이썬에서도 확인해 봅시다.



import random
import pandas as pd

ZUNDOKO_PATTERN = ['ズン', 'ズン', 'ズン', 'ズン', 'ドコ']

# ズンドコキヨシを実行し、ズンドコ回数を返却する関数
def do_zundoko():
    zundoko_list = []
    while zundoko_list[-5:] != ZUNDOKO_PATTERN:
        zundoko_list.append(random.choice(['ズン', 'ドコ']))
    return len(zundoko_list)

# 100万回実行してリストに格納
zundoko_len_list = []
for i in range(1, 1000001):
    zundoko_len_list.append(do_zundoko())

# 実行結果の統計量やヒストグラムを表示
df = pd.DataFrame(zundoko_len_list, columns=["zundoko length"])
print(df.describe())
df.hist(bins=50)


실행 결과





확실히 평균은 제대로 32 부근이되었습니다.



히스토그램은 다음과 같습니다.

(가로축이 준도코 횟수, 세로축이 빈도)





상당히 왼쪽으로 편향된 분포가 되어 있음을 알 수 있습니다. 많은 경우는 평균보다 상당히 빨리 기요시에 이르는 것 같습니다.



이상입니다.




참고문헌



좋은 웹페이지 즐겨찾기