Dejemos que $Z\left(n,m\right)$ sea el número de cadenas binarias únicas de longitud $m$ que contiene al menos una instancia de $n$ consecutivos de 1. Estoy tratando de encontrar una expresión para $Z$ preferiblemente calculable directamente, aunque también acepto una solución recursiva. He intentado una formulación basada en [1] , $$ \hat{Z}\left(n,m\right) = \sum_{q=m}^{n}\sum_{i=1}^{\lfloor \frac{q}{m}\rfloor}(-1)^{i+1}\binom{n-q+1}{i}\binom{n-mi}{n-q}\text{,}$$ Sin embargo, estoy obteniendo algunas discrepancias con los casos de prueba que elaboré a mano. Por ejemplo, funciona para $Z\left(7,6\right)=3$ y $Z\left(7,5\right)=8$ pero no funciona para $\left(7,4\right)=16$ (la formulación anterior da $20$ ). N.B. : mis definiciones de $n$ y $m$ son opuestas a las de [1]; $q$ es el mismo.
Creo que tiene algo que ver con el doble conteo de algunas permutaciones de cadenas, pero no he podido averiguar qué más tengo que quitar.
Actualización : He encontrado una formulación recursiva [2] que me da el mismo resultado que mi $\hat{Z}$ arriba: $$ \tilde{Z}\left(n,m\right) = 2\tilde{Z}\left(n-1,m\right) + 2^{n-m-1}-\tilde{Z}\left(n-m-1,m\right) $$ Al haber encontrado esta formulación independiente, tendré que revisar mi recuento y ver si me he equivocado en alguna parte.
Puntos extra por una respuesta que funcione para diccionarios arbitrarios, es decir $W\left(a,n,m\right)$ donde $a$ es el número de símbolos posibles en cada posición de la cadena. La pregunta original equivaldría a $Z\left(n,m\right) = W\left(2,n,m\right)$ .
- [1] G.L., Número de cadenas binarias que contienen al menos n 1 consecutivos
- [2] Gerry Myerson, respuesta a Número de cadenas de bits con 3 ceros consecutivos o 4 1s consecutivos
1 votos
Si una cadena de longitud $m$ contiene un recorrido de longitud $n$ entonces $n<m$ . ¿Podría dar las 7 cuerdas para $Z(5,7)$ ? Me salen ocho: 0011111, 0111110, 0111111, 1011111, 1111100, 1111101, 1111110, 1111111.
1 votos
Si eso es lo que tenías en mente, entonces $Z(n,m) = 2^m - f_n(m)$ donde $f_n(m)=\sum_{j=1}^nf_n(m-j)$ para obtener los valores iniciales adecuados.
0 votos
Lo siento, estaba omitiendo los casos de todo-1 al contar manualmente (y en mi implementación de software), ya que eso es lo que en última instancia se preocupan. He actualizado la pregunta para que refleje los valores adecuados según la definición indicada de $Z$ .
0 votos
No veo dónde $f_n$ adquiere realmente un valor; tal y como está escrito parece que se repite infinitamente, mientras que si se le da la vuelta al $m$ y $n$ alrededor, al final acabas con una suma vacía que devuelve 0, lo que se propaga por toda la cadena.
0 votos
Como encontré una formulación completamente independiente para lo que debería ser el mismo problema ([2]) que daba los mismos resultados que mi método de ([1]), volví a revisar mi recuento. Encontré las cadenas "perdidas" para Z(7,4), así que 20 es de hecho el valor correcto. Ahora tengo que ir a trabajar pero jugaré con él esta noche y veré si me da el resultado esperado para otros valores de $n$ y $m$ .
0 votos
Los valores de partida son $f_n(m)=2^m$ para $0\le m<n$ . Puedes probar cualquiera de estos resultados en Python con una expresión como
len([i for i in range(2**8) if '1111' in bin(i)])
. Me tomaré el tiempo de escribir una respuesta más completa con una explicación.0 votos
Esto se puede escribir en términos de números de Fibonacci de n pasos, véase por ejemplo mathworld.wolfram.com/Fibonaccin-StepNumber.html
0 votos
Consulte la respuesta a este otro post