Dada una matriz de N enteros, ¿cómo podemos encontrar el número de subsecuencias crecientes de longitud ‘K’ (K <= N) de manera eficiente?

Como se publicó en los comentarios de las preguntas, puede leer la solución y su implementación de C ++ en los foros de TopCoder. Solo estoy proporcionando una idea de muy alto nivel. Este problema se puede resolver con la programación dinámica.

Deje que [math] dp [i] [j] [/ math] denote el número de subsecuencias crecientes de [math] A [/ math] con una longitud [math] j [/ math] cuyo último elemento es [math] A [i ][/matemáticas]. Podemos dividir todas esas secuencias en función del índice del segundo último elemento de la subsecuencia. Si el segundo último índice es [matemática] k [/ matemática] entonces [matemática] k <i [/ matemática] y [matemática] A [k] <A [i] [/ matemática]. Además, la subsecuencia sin su último elemento es de la longitud [matemática] j – 1 [/ matemática] y termina en [matemática] A [k] [/ matemática]. Entonces, poniéndolo en una relación de recurrencia, obtenemos:

[matemáticas] dp [i] [j] = [/ matemáticas] [matemáticas] \ sum_ {k <i} (dp [k] [j-1] \ text {if} A [k] <A [i] \ texto {else} 0) [/ math]

con los casos base:

[matemáticas] dp [i] [0] = 1 [/ matemáticas]

Esto puede dar inmediatamente una solución [matemática] O (N ^ 2K) [/ matemática] si queremos encontrar el número de subsecuencias de longitud [matemática] k [/ matemática] para todas las [matemática] k \ le K [/ matemática ] Con algunas estructuras de datos, el factor [math] O (N ^ 2) [/ math] puede reducirse a [math] O (N log (N)) [/ math].

More Interesting

¿Algoritmo de libros o proyecto de código abierto para ser contratado por empresas tecnológicas de San Francisco como Google?

¿Cómo puede uno prepararse para la entrevista de Amazon SDE 2 en 3 semanas para habilidades relacionadas con c ++?

¿Cómo es el proceso de entrevista de ingeniería en Spotify?

¿Qué estructuras de datos se utilizan en la guía telefónica? ¿Cómo funciona la funcionalidad de búsqueda de manera eficiente?

¿Cuáles son los elementos comunes entre dos matrices de tamaño n y m? ¿Cuál es el tiempo y la complejidad de la memoria?

¿Cuáles son las preguntas frecuentes de Java?

¿Cuál es el mejor libro para prepararse para la ronda técnica de las entrevistas, principalmente para C y C ++?

¿Cómo debo prepararme para la entrevista de Morgan Stanley en Java?

¿Cuáles son algunos acertijos interesantes que se hacen en las entrevistas técnicas de programación informática?

Si dice que es competente en un lenguaje de programación al salir de la universidad, ¿qué grado de comprensión profunda necesita en dicho idioma para tener éxito en una entrevista técnica?

¿Puedes sintaxis de Google durante una entrevista telefónica de codificación?

¿Cuál es la peor forma de prepararse para una entrevista de ingeniería de software?

¿Qué tipo de preguntas se hacen en la prueba de análisis Flipkart?

¿Cuáles son las preguntas difíciles de programación (codificación) formuladas en la entrevista?

Cómo medir la complejidad temporal y espacial de una función recursiva