¿Cómo podemos resolver el problema mencionado a continuación?

Un enfoque simple de fuerza bruta al comparar todos los elementos con todos los demás elementos y luego encontrar la suma, obtendrá su respuesta en el tiempo O (n ^ 2). En su lugar, puede optar por Divide and Conquer, y puede resolverlo en tiempo O (nlogn).

En su lugar, puede usar el algoritmo de Kadane para encontrar la submatriz continua de suma máxima. Se ejecuta en tiempo O (n). Pero dado que su problema viene con una restricción adicional de densidad, necesitamos modificarlo un poco para obtener la respuesta. Entonces, en lugar de mantener el recuento de la suma, realizaremos un seguimiento de la densidad a medida que recorremos toda la matriz.

A continuación se muestra el algoritmo de Kadane que debe modificar según sus necesidades.

#include

#define MAX (a, b) (((a)> (b))? (a): (b))

void maxSum (int * arr, int n) {
int i, maxSum = arr [0], max = arr [0];
para (i = 1; i <n; i ++) {
max = MAX (arr [i], max + arr [i]);
maxSum = MAX (max, maxSum);
}
printf (“Suma máxima =% d \ n”, maxSum);
}

int main () {
int arr [] = {-2, -3, 4, -1, -2, 1, 5, -3};
maxSum (arr, 8);
devuelve 0;
}

La densidad de la subsecuencia no es más que el promedio de la subsecuencia y la respuesta sería la suma de L enteros más grandes en la matriz dividida por L.
¿Por qué?
Tomemos un ejemplo.

Deje que la matriz sea
1 9 3 2 10 6 7 8 4 5 y L = 3

Si tomamos los L enteros más grandes 8 9 10 nuestra densidad sería 27/3 = 9
Ahora, si aumentamos el tamaño de la secuencia secundaria, solo agregaremos un número menor, disminuyendo así la densidad o el promedio.
supongamos que agregamos 6 a nuestra subsecuencia, nuestra densidad se convierte en 33/4 = 8.25

Por lo tanto, todo lo que tenemos que hacer es encontrar los L números más grandes en la matriz.

Ahora, si la matriz está ordenada, tenemos los últimos elementos L. Complejidad O (L)

Si la matriz no está ordenada, no hay otra manera que ordenar la matriz primero y luego obtener los últimos elementos L. Complejidad (NlogN)

More Interesting

¿Cuáles son los ejemplos de aplicación de la estructura de datos gráficos en la programación real?

¿Debo aprender primero "el lenguaje de programación que elegí" o "algoritmo y estructura de datos"?

¿Cuál es la diferencia entre el algoritmo memético y el algoritmo genético?

¿Qué es binario y por qué lo usan las computadoras?

¿Qué tipo de algoritmo de Machine Learning usarías para segmentar a tus clientes en múltiples grupos?

Quiero comparar una consulta con varios documentos y asignarles una clasificación. ¿Qué algoritmo necesito usar?

Estoy buscando algunas clases que me darían consejos sobre el enfoque. ¿Debo tomar el diseño del sistema, el algoritmo o la preparación de la estructura de datos?

¿Cómo puedo extender el algoritmo KMP a 2 dimensiones?

¿Qué representa un peso en los bordes en un gráfico ponderado en la teoría de gráficos?

Cómo encontrar la longitud máxima de la cadena que forma palíndromo en Java

¿Qué método es el más adecuado para resolver problemas de programación de enfermería, programación dinámica o algoritmos genéticos, y por qué?

¿Existe un algoritmo que pueda combinar y separar números?

¿Qué tan complejo debe ser un algoritmo criptográfico para estar sujeto a las regulaciones de exportación de criptografía?

¿Qué consejo le da Ashish Kedia al estudiante de ingeniería de software de último año que no es un buen programador para convertirse en un gran ingeniero? Aprobé las asignaturas, pero no tomé ninguna clase de algo, y mis habilidades para resolver problemas son bajas.

¿Qué se siente al resolver bien los problemas de programación dinámica?