Summary

동전을 던져서, 앞면이 2개 연달아 나오는 경우와 앞면, 뒷면이 나오는 경우에 대한 기대값을 simulation 해보자.

이때 기대값 E(W_HT) 와 E(W_HH) 를 계산해서 두 개의 값이 같은지? 아니면 어떤 것이 더 큰지를 알아본다.

library(stringr)

set.seed(1234)

num_trials <- 10000 # simulation 시도 횟수 
coin <- c('H', 'T') # 동전 앞면, 뒷면

# 원하는 패턴을 얻을 때까지 동전을 던진 후, 그 횟수를 반환한다.
find_pattern <- function (toss_pattern, toss_count) {
  
  # 임의로 100번 정도 던져서 문자열 패턴을 만들고
  toss <- sample(coin, toss_count, replace = T)
  toss_str <- paste(toss, sep = '', collapse = '')
  
  # 해당 문자열에서, 주어진 패턴이 일치하는 마지막 end 위치값을 반환한다.
  result <- str_locate(toss_str, toss_pattern) 
  result[2]
}

# 함수 테스트
#find_pattern('HT', 100)

# HT 패턴이 몇 번만에 발생하는지 찾는다.
trial_result <- sapply(1:num_trials, function(i) {find_pattern('HT', 100)})
mean(trial_result)
## [1] 4.0088
hist(trial_result)

# HH 패턴이 몇 번만에 발생하는지 찾는다.
trial_result <- sapply(1:num_trials, function(i) {find_pattern('HH', 100)})
mean(trial_result)
## [1] 5.9713
hist(trial_result)