//styles, look here: https://cdnjs.com/libraries/highlight.js/9.12.0

September 8, 2019

260 palavras 2 mins

O Teorema do Macaco Infito: quanto tempo até sair Hamlet?

O Enunciado e Quase-Certeza

Probabilidades de palavras em particular com alfabetos finitos

Simulação

library(dplyr)
library(tibble)
library(rio)

palavras <- import("https://github.com/pythonprobr/palavras/blob/master/palavras.txt?raw=true") %>% 
  as_tibble()
palavras$tamanho <- stringr::str_length(palavras$a) # tamanho das palavras

Existem maneiras mais elegantes de armazenar os resultados desta simulação, mas eu fiz isso com pressa e - convenhamos - isso aqui é só um blog. Vamos ao passo a passo do desenho da simulação. Primeiro definimos parâmetros e objetos:

k <- 5 # número máximo de letras em uma palavra a ser encontrada
n <- 100 # número de tentativas de encontrar palavras entre 1 e k letras

matriz_tentativas <- rep(NA, each = k) # matriz vazia

tentativas <- double(length = k) # vetor vazio com tipo definido como de precisão dupla
for(a in 1:n) { # primeiro loop, o em cima da amostra

for(i in 1:k) { # segundo loop, onde tentamos encontrar as palavras
  
  seq(1:a*n) %>% sample(size = 1) %>% set.seed()  # semente nova sempre para evitar repetição
  ## esse procedimento da semente é discutível, não reproduzir cegamente
  
  contador <- 1
  indicador <- FALSE

  while(indicador == FALSE) {
  
   palavra <- sample(letters, size = i) %>%
     paste(collapse = '')  # sorteando uma palavra
 
     if(palavra %in% palavras$a) {
   
     indicador <- TRUE   # se a palavra está no corpus do português, paramos o loop
 
     } else {
   
     contador <- contador + 1 # se não, contamos a tentativa e começamos de novo
   
   }
  
  }

    tentativas[i] <- contador # salvamos quantas tentativas foram precisas

}


matriz_tentativas <- cbind(matriz_tentativas, tentativas) # juntamos todos os vetores com números de tentativas

print(paste("i =",i))
print(paste("a =",a))

}