Cómo calcular el número de subsecuencias distintas de una palabra dada de una longitud dada

Para responder a esta pregunta, primero entenderemos cómo encontrar la longitud de una secuencia.

Si buscamos una relación de recurrencia de dos secuencias, digamos myn .

  Si m == 0 || n == 0, entonces devuelve 0
 Más
  Si x [m] == y [n] entonces devuelve (1+ (m-1, n-1))
   Más 
       a = (m, n-1) 
       b = (m-1, n) 
       c = max (a, b)
        volver c

Para conocer el número de llamadas a funciones distintas de cualquier secuencia, por ejemplo (5,4)

En primer lugar, resolveremos esto de acuerdo con la relación de recurrencia anterior:

Solución: – 5,4 (esto dará el siguiente resultado)

4,3

3,2

2,1

1,0

0 0

Total: – (5 + 1) * (4 + 1 ) llamada a función distinta

Por lo tanto, si tenemos myn

Entonces será: –

(m + 1) (n + 1) llamada a función distinta, ya que 1 es constante podemos eliminarla.

m * n llamada a función distinta

m * n * O (1) (tiempo constante de comparación)

Finalmente:-

O (mn) diferencia la llamada a la función.

Hola,

Sé que debes estar claro ahora con las subsecuencias. Solo quería compartir mi lado de la explicación. [Puede ser útil para alguien más que se encuentra con este concepto]

Supongamos que “ABC” es la cadena para la que necesito encontrar la subsecuencia. Obtengo 2 ^ n – 1 subsecuencias.

UNA

AB

C.A.

si

antes de Cristo

do

A B C

Entonces, en total 7 subsecuencias de la cadena “ABC”.

Para la parte de implementación, considere la siguiente manera:

unsigned int opsize = pow(2, n);

/* Run from counter 000..1 to 111..1*/

for (int counter = 1; counter < opsize; counter++)

{

for (int j = 0; j < n; j++)

{

/* Check if jth bit in the counter is set

If set then print jth element from arr[] */

if (counter & (1<

cout << arr[j] << " ";

}

}

Tienes que mirar todas las subsecuencias posibles para contar el número de subsecuencias distintas de una palabra dada de una longitud dada.

Supongamos que la palabra dada es “volar”. Las subsecuencias posibles son:

volar
flly
volar
Hay 6 subsecuencias posibles para la palabra dada.

Si seguimos el mismo algoritmo.
Por la palabra “infierno”. Las subsecuencias posibles son:

infierno
el el ll
hola ell
infierno

Hay 10 resultados posibles. Pero la subsecuencia “l” se cuenta dos veces (no son distintas).
Al calcular la respuesta, debemos tener en cuenta el hecho anterior.

Aquí está el pseudocódigo.

  palabra = hola
 longitud = n = 5
 var m = 1
 matriz [n]
 var ans = 0

 para m = 1
	 comience a iterar sobre la palabra, elija el número de letras = m (el ciclo se ejecutará [(nm) +1] veces)
		 agregarlo a la matriz si aún no está allí
	 ans + = longitud (matriz)
	 m ++

 imprimir ans

  Simulación para la palabra "Hola"

 primera iteración:

	 matriz [0] = H
	 matriz [1] = e
	 matriz [2] = l
	 array [3]! = l (porque ya está allí)
	 matriz [3] = o
	 len (matriz) = 4
	 ans = 4

 segunda iteración:

	 array [0] = Él
	 matriz [1] = el
	 matriz [2] = ll
	 matriz [3] = lo
	 len (matriz) = 4
	 ans = 8

 tercera iteración:

	 array [0] = Hel
	 array [1] = ell
	 matriz [2] = llo
	 len (matriz) = 3
	 ans = 11

 cuarta iteración:

	 array [0] = Infierno
	 matriz [1] = ello
	 len (matriz) = 2
	 ans = 13

 quinta iteración:

	 array [0] = Hola
	 len (matriz) = 1
	 ans = 14

 final ans = 14

Bueno, creo que la publicación anterior explica cómo contar todas las subcadenas distintas de una cadena dada. Subsecuencia significa todas las cadenas que puede obtener eliminando algunas letras de la cadena. Y se puede calcular en O (N). Lo acabo de codificar, así que aquí está el enlace: http://paste.ubuntu.com/9584698/