Loading [MathJax]/extensions/TeX/mathchoice.js

3 votos

Dado n (longitud de la cadena) y k (número de caracteres para formar la cadena). Encontrar el número de la cadena con 0 a k subcadenas repetitivas

Pregunta: Dado n (longitud de la cadena) y k (número de caracteres que se utilizarán para formar la cadena). Encontrar el número de la cadena con 0 a k subcadenas repetitivas.

Por ejemplo: k=2 y n=3 . S(1) -número de cadenas posibles que tienen subcadena sin caracteres repetidos (por ejemplo 101,010 ). S(2) -número de cadenas posibles que tienen una subcadena con dos caracteres repetidos (por ejemplo 001,100,110,011 ). S(3) número de cadenas posibles que tienen una subcadena con tres caracteres repetidos (por ejemplo 000,111 ).

No soy capaz de abordar este problema. Por favor, ayúdenme a resolverlo.

2voto

Marko Riedel Puntos 19255

Para el caso k=2 consideramos Sq el número de cadenas con al menos como máximo q caracteres que se repiten. Introducimos

F(z)=z+z2++zq=z(1++zq1)=z1zq1z

y obtener la función generadora ( z para un dígito y w para un dígito cero)

G(z,w)=(1+F(w))(q0F(z)qF(w)q)(1+F(z))=(1+F(w))11F(z)F(w)(1+F(z)).

Como sólo nos interesa el recuento podemos poner z=w para obtener

H(z)=(1+F(z))21F(z)2=(1zq+1)2(1z)2z2(1zq)2=12zq+1+z2q+212z+2zq+2z2q+2.

Para una forma cerrada que no requiera los recursos de diferenciación extraemos

T_p = [z^p] \frac{1}{1-2z+2z^{q+2}-z^{2q+2}} = [z^p] \sum_{r_1\ge 0} z^{r_1} (2 - 2z^{q+1} + z^{2q+1})^{r_1} \\ = \sum_{r_1=0}^p [z^{p-r_1}] (2 - 2z^{q+1} + z^{2q+1})^{r_1} \\ = \sum_{r_1=0}^p [z^{p-r_1}] \sum_{r_2=0}^{r_1} {r_1\choose r_2} 2^{r_1-r_2} z^{(q+1)r_2} (z^{q}-2)^{r_2} \\ = \sum_{r_1=0}^p \sum_{r_2=0}^{r_1} {r_1\choose r_2} 2^{r_1-r_2} [z^{p-r_1-(q+1)r_2}] (z^{q}-2)^{r_2} \\ = \sum_{r_2=0}^p \sum_{r_1=r_2}^p {r_1\choose r_2} 2^{r_1-r_2} [z^{p-r_1-(q+1)r_2}] (z^{q}-2)^{r_2} .

Aquí debemos tener p-r_1-(q+1)r_2 = q r_3 donde 0\le r_3 \le \lfloor p/q \rfloor y por lo tanto r_1 = p - (q+1) r_2 - q r_3 \ge 0 para que r_2 \le (p - q r_3) / (q+1) que da como resultado

\sum_{r_3=0}^{\lfloor p/q \rfloor} \sum_{r_2=0}^{\lfloor (p - q r_3) / (q+1) \rfloor} {p - (q+1) r_2 - q r_3 \choose r_2} 2^{p - (q+2) r_2 - q r_3} [z^{q r_3 }] (z^{q}-2)^{r_2} \\ = \sum_{r_3=0}^{\lfloor p/q \rfloor} \sum_{r_2=0}^{\lfloor (p - q r_3) / (q+1) \rfloor} {p - (q+1) r_2 - q r_3 \choose r_2} {r_2\choose r_3} (-1)^{r_2-r_3} 2^{p - (q+1) (r_2 + r_3)}.

Obtenemos entonces la forma cerrada

T_p - 2 T_{p-q-1} + T_{p-2q-2}

con índices negativos que representan sumas vacías y contribuyen con cero. Por ejemplo, obtenemos para cadenas de longitud 40 clasificado en función de según el valor máximo q de subcadenas repetidas la secuencia para q=30..40

1099511622144, 1099511625216, 1099511626624, 1099511627264, \\ 1099511627552, 1099511627680, 1099511627736, 1099511627760, \\ 1099511627770, 1099511627774, 1099511627776.

donde 2^{40} = 1099511627776. Este ejemplo se incluye aquí porque documenta los límites de la extracción de coeficientes utilizando el sistema de Maple coeftayl y es obviamente imposible de atacar por medio de la enumeración total enumeración.

Una importante comprobación de cordura aquí es que debemos tener [z^p] H(z) = 2^p cuando q\ge p (este es el caso en el que el límite de la repetición subcadenas es al menos la longitud de las cadenas que se consultadas). En efecto, para estas p

[z^p] \frac{1-2z^{q+1}+z^{2q+2}}{1-2z+2z^{q+2}-z^{2q+2}} = [z^p] \frac{1}{1-2z+2z^{q+2}-z^{2q+2}} \\ = \sum_{r_1=0}^p [z^{p-r_1}] \sum_{r_2=0}^{r_1} {r_1\choose r_2} 2^{r_1-r_2} z^{(q+1)r_2} (z^{q}-2)^{r_2} = \sum_{r_1=0}^p [z^{p-r_1}] 2^{r_1} = 2^p.

Este fue el código de Maple que se utilizó para trabajar con estos funciones generadoras y verificar los datos por enumeración en la medida de lo posible.

RL :=
proc(n, q)
option remember;
local ind, d, pos, cur, run, runs, res, allq;
    res := 0;

    for ind from 2^n to 2\*2^n-1 do
        d := convert(ind, base, 2);

        cur := -1; pos := 1;
        run := \[\]; runs := \[\];

        while pos <= n do
            if d\[pos\] <> cur then
                if nops(run) > 0 then
                    runs :=
                    \[op(runs), \[run\[1\], nops(run)\]\];
                fi;

                cur := d\[pos\];
                run := \[cur\];
            else
                run := \[op(run), cur\];
            fi;

            pos := pos + 1;
        od;

        runs := \[op(runs), \[run\[1\], nops(run)\]\];

        allq := select(r -> r\[2\] <= q, runs);

        if nops(allq) = nops(runs) then
            res := res + 1;
        fi;
    od;

    res;
end;

X := (n, q) ->
coeftayl((1-2\*z^(q+1)+z^(2\*q+2))/(1-2\*z+2\*z^(q+2)-z^(2\*q+2)),
         z=0, n);

T := (p, q) ->
add(add(binomial(p-(q+1)\*r2-q\*r3, r2)\*binomial(r2, r3)
        \*(-1)^(r2-r3)\*2^(p-(q+1)\*(r2+r3)),
        r2 = 0 .. floor((p-q\*r3)/(q+1))), r3=0..floor(p/q));

S := (n, q) -> T(n, q)-2\*T(n-q-1, q)+T(n-2\*q-2, q);

Adenda. Un medio alternativo de cálculo T_p es utilizar una recurrencia. Obtenemos

[z^p] H(z) (1-2z+2z^{q+2}-z^{2q+2}) = [[p=0]] - 2 [[p=q+1]] + [[p=2q+2]]

o

T_p = 2 T_{p-1} - 2 T_{p-q-2} + T_{p-2q-2} + [[p=0]] - 2 [[p=q+1]] + [[p=2q+2]]

donde los índices negativos producen una contribución nula.

Observación. Utilice S_q-S_{q-1} para el caso en que al menos una instancia de una cadena de q se requieren caracteres de repetición.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X