Interviewstreet tuvo su segundo CodeSprint en enero que incluía la siguiente pregunta. La respuesta programática se publica pero no incluye una explicación estadística.
(Puede ver el problema original y la solución publicada iniciando sesión en el sitio web de Interviewstreet con créditos de Google y luego yendo al problema de Lanzamiento de monedas desde esta página ).
Lanzamientos de monedas
Tienes una moneda imparcial que quieres seguir lanzando hasta que obtengas N caras consecutivas. Lanzaste la moneda M veces y, sorprendentemente, todos los lanzamientos resultaron en caras.
¿Cuál es el número esperado de lanzamientos adicionales necesarios hasta obtener N caras consecutivas?
Entrada:
La primera línea contiene el número de casos T. Cada una de las siguientes líneas T contiene dos números N y M.
Salida:
líneas T de salida que contienen la respuesta para el caso de prueba correspondiente. Imprima la respuesta redondeada a exactamente 2 decimales.
Entrada de muestra:
4
2 0
2 1
3 3
3 2
Salida de muestra:
6.00
4.00
0.00
8.00
Explicaciones de muestra:
Si N = 2 y M = 0, debe seguir lanzando la moneda hasta obtener 2 caras consecutivas. No es difícil demostrar que, en promedio, se necesitan 6 lanzamientos de monedas.
Si N = 2 y M = 1, necesitas 2 caras consecutivas y ya tienes 1. Necesitas lanzar una vez más sin importar qué. En ese primer lanzamiento, si obtienes cara, ya está. De lo contrario, debe comenzar de nuevo, ya que el contador consecutivo se reinicia, y debe seguir lanzando la moneda hasta obtener N = 2 caras consecutivas. El número esperado de lanzamientos de monedas es, por lo tanto, 1 + (0.5 * 0 + 0.5 * 6) = 4.0 Si N = 3 y M = 3, ya tiene 3 caras, por lo que no necesita más lanzamientos.
Todas las ecuaciones matemáticas que se me ocurrieron tenían las respuestas correctas para los datos de entrada de muestra enumerados anteriormente, pero estaban equivocados para todos sus otros conjuntos de entrada (que no se conocen). Su solución programática parece resolver el problema de manera muy diferente a mi método de intentar crear una ecuación. ¿Alguien puede explicar cómo llegar a una ecuación que resuelva esto?
fuente
Respuestas:
Este es un ejercicio computacional, así que piense recursivamente . El estado actual del lanzamiento de la moneda está determinado por el par ordenado con N ≥ M ≥ 0 . Deje que el número esperado de lanzamientos para alcanzar N cabezas consecutivas sea e ( N , M ) :(N,M) N≥M≥0 N e(N,M)
(1) Hay un 50% de posibilidades de que el próximo lanzamiento sea cara, llevándote al estado , y un 50% de posibilidades de que el próximo lanzamiento sea colas, llevándote al estado ( N , 0 ) . Esto cuesta una vuelta. Por lo tanto, la expectativa (recursivamente) viene dada por(N,M+1) (N,0)
(2) Condiciones básicas: ya ha estipulado que
y obviamente
(no se necesitan más volteretas).
Aquí está el programa correspondiente de Mathematica (incluyendo el almacenamiento en caché de resultados intermedios para acelerar la recursión, lo que efectivamente lo convierte en una solución de programación dinámica):
fuente
find_x(n)
if n=0 return 1 else return 2*find_x(n-1)
find_x
y = 1; while n > 0 do begin y=2*y; n=n-1 end; return y
R
) apenas difieren en absoluto. (En un caso, crea y luego procesa un vector1:n
y en el otro descubrirá quen:1
ha sido colocado en la pila y procesado a la inversa). Pero parte de mi punto fue conceptual : su comentario inicial hablaba de "trabajar iterativamente". Eso se refería al análisis y no a ningún programa de computadora. Pero estos son puntos triviales y tangenciales cuya discusión no garantiza extender este hilo de comentarios.Para resolver este problema, utilizaré procesos estocásticos, tiempos de parada y programación dinámica.
Primero, algunas definiciones:
El valor que estamos buscando es el valor esperado de , el número de volteos necesarios para observar N volteos consecutivos , dado que ya hemos observado M flips consecutivos . Suponga que como la respuesta es trivialmente 0 de lo contrario. Calculamos: ( X τ N = N ) ( X 0 = M ) M ≤ NτN (XτN=N) (X0=M) M≤N
El primero corresponde al número esperado de volteretas antes de obtener una cola suponiendo que se voltea una cola antes de que se observen N cabezas consecutivas, suponiendo que comencemos con M cabezas consecutivas. No es demasiado difícil ver que
Ahora todo lo que tenemos que hacer es calcular la segunda expectativa condicional que corresponde al número esperado de vueltas necesarias para observar N cabezas consecutivas a partir de 0. Con cálculos similares, vemos que
Esto da una respuesta final de:
Esto concuerda con los cuatro casos de prueba que ha enumerado. Con una respuesta tan simple, puede haber una manera más fácil de calcular esto.
fuente
Advertencia: lo siguiente puede no considerarse como una respuesta adecuada, ya que no proporciona una solución cerrada a la pregunta, especialmente. en comparación con las respuestas anteriores . Sin embargo, el enfoque me pareció lo suficientemente interesante como para calcular la distribución condicional.
Considere la cuestión preliminar de obtener una secuencia de cabezas de tiros, con probabilidad . Esto viene dado por la fórmula de recurrencia De hecho, mi razonamiento es que no se pueden descomponer cabezas de extracciones consecutivas de acuerdo con la primera aparición de una cola de la primera tira. Acondicionado de si esta primera cola se produce en la primera, segunda, ..., º dibujar lleva a esta relación de recurrencia.N k 1−p(N,k)
Luego, la probabilidad de obtener las primeras N cabezas consecutivas en throws es $$ q (N, m) = \ begin {cases} \ dfrac {1} {2 ^ N} & \ text {if} m = NORTE\m≥N
$$ El primer caso se explica por sí mismo. el segundo caso corresponde a una cola que ocurre en el m sorteo, seguido de cabezas, y el último caso prohíbe cabezas consecutivas antes del sorteo. (¡Los dos últimos casos podrían condensarse en uno, concedido!)m−N−1 N N m−N−1
Ahora, la probabilidad de obtener cabezas primero y las primeras cabezas consecutivas en exactamente lanzamientos (y nada menos) es $$ r (M, N, m) = \ begin {cases} 1/2 ^ N & \ text {if} m = N \M N m≥N
\ end {cases} s (M, N, m) = \ begin {cases} 1 / {2 ^ {NM}} & \ text {if} m = N \ 0 & \ text {if} N \ sum_ {r = M + 1} ^ {N} \ dfrac {q (N, mr)} {2 ^ {rM }} & \ text {if} N + M
\ end {cases} \ mathfrak {E} (M, N) = \ sum_ {m = N} ^ \ infty m \, s (M, N, m) $$ o para el número de pasos adicionales ...E ( M , N ) - M
fuente