Este é um problema interessante, e o polettix fornece a solução para o problema imediato de encontrar o número esperado de saltos. Vou tentar analisar a questão mais ampla da distribuição do tempo que leva para chegar ao último lírio. Essa análise mais ampla nos permite encontrar as probabilidades de qualquer estado e de qualquer momento da distribuição.
Essa análise pode ser enquadrada como um problema de encontrar a distribuição do "tempo de atrito" para o estado de absorção de uma cadeia de Markov discreta. É relativamente simples programar essa cadeia de Markov em software estatístico e extrair a distribuição resultante dos tempos de execução, fornecendo assim uma solução completa para o Problema do Sapo.
Configurando o problema como uma cadeia de Markov: Para configurar o problema, usamos os estados , onde o estado é o sapo na margem do rio e os demais estados são para o sapo estar em lírios respectivamente. Deixamos é o processo aleatório no problema, com o sapo no lily-pad imediatamente após o salto . O processo é uma cadeia Markov discreta e estritamente monótona com a matriz de probabilidade de transição :x=0,1,2,...,nx=01,...,n{Xt|t=0,1,2,3,...}Xtt(n+1)×(n+1)
P=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢000⋮0001/n00⋮0001/n1/(n−1)0⋮000⋯⋯⋯⋱⋯⋯⋯1/n1/(n−1)1/(n−2)⋮0001/n1/(n−1)1/(n−2)⋮1/2001/n1/(n−1)1/(n−2)⋮1/211⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥.
O número de saltos para o último lily-pad é o tempo de acerto para o estado , que é:n
T≡min{t∈N|Xt=n}.
Nosso objetivo será encontrar a função de massa de probabilidade para a variável aleatória , que fornece uma solução completa para o problema do sapo (isto é, descreve completamente o comportamento do número de saltos até o último lírio).T
Encontrando a função de massa probabilística: Como o sapo progride em pelo menos um lírio em cada salto, são necessários no máximo saltos para alcançar o último lírio, portanto devemos ter . A função de distribuição cumulativa para esse momento é:n1⩽T⩽n
FT(t)=P(T⩽t)=P(Xt=n)=[Pt]0,n.
Assim, a função de massa de probabilidade para o tempo é:
pT(t)={1/n[Pt]0,n−[Pt−1]0,nfor t=1,for t>1.
Essa função de massa descreve completamente a distribuição do tempo necessário para que o sapo atinja o último lírio - e, portanto, pode ser considerada uma solução completa para o problema do sapo. Para facilitar a computação, podemos programar essa distribuição R
como a dfrog
função. Esta é uma função vetorizada que gera valores a partir da função de massa de probabilidade para um vetor T
e parâmetro de argumento n
.
dfrog <- function(n, T = 1:n) {
#Create transition probability matrix
P <- matrix(0, nrow = n+1, ncol = n+1);
for (i in 1:n) {
for (j in i:n) {
P[i, j+1] <- 1/(n+1-i); } }
P[n+1, n+1] <- 1;
#Generate CDF and PMF vectors
PP <- P;
CDF <- rep(0, n);
for (t in 1:n) {
CDF[t] <- PP[1, n+1];
PP <- PP %*% P; }
PMF <- diff(c(0, CDF));
#Generate output vector
OUT <- rep(0, length(T));
for (i in 1:length(T)) { OUT[i] <- PMF[T[i]]; }
OUT; }
Podemos usar essa função para gerar e plotar a função de massa de probabilidade. O gráfico abaixo mostra a distribuição do número de saltos quando existem lírios. Como pode ser visto, o sapo geralmente leva de 3 a 4 saltos para alcançar o último lírio neste caso. n=20
#Load ggplot and set theme
library(ggplot2);
THEME <- theme(plot.title = element_text(hjust = 0.5, size = 14, face = 'bold'),
plot.subtitle = element_text(hjust = 0.5, face = 'bold'));
#Plot the PMF
n <- 20;
DATA <- data.frame(Jumps = 1:n, Probability = dfrog(n));
ggplot(aes(x = Jumps, y = Probability), data = DATA) +
geom_bar(stat = 'identity', fill = 'darkgreen') +
THEME +
ggtitle('PMF of number of jumps to last lily-pad') +
labs(subtitle = paste0('(Frog problem with n = ', n, ' lily-pads)'));