Algoritmos notables: Sub-vector de suma máxima
La máxima subsuma es un clásico de entrevistas técnicas, rétate a ti mismo e inténtalo crack 🔥

Este algoritmo es relativamente conocido, también se le conoce como máxima subsuma.

Su enunciado es el siguiente:

Dado un vector, o arreglo de números enteros con longitud m, hallar un sub-vector, es decir un arreglo dentro de él, de longitud n que nos arroje como resultado la máxima suma de sus elementos, donde m >= n.

Por ejemplo en el vector: [1,2,-4,3,3,-1,2]

el subvector de suma máxima sería [3,3,-1,2] y la suma sería 7. Esto es así ya que si añadimos 1,2 o -4 sólo conseguiríamos reducir la suma.

Piensa dev. Foto de Paola Aguilar en Unsplash

Ahora a resolverlo utilizando C#

        public static int MaximaSubSuma(int[] vector)
        {
            int suma = 0;
            int maxSum = 0;

            for(int i = 0; i < vector.Length; i++)
            {
                for(int j = i; j < vector.Length; j++)
                {
                    suma += vector[j];

                    if(suma > maxSum)
                        maxSum = suma;
                }
                suma = 0;
            }
            return maxSum;
        }

Debido a que quiero probar todo tipo de combinaciones consecutivas, entonces debo hacer una iteración anidada en otra para capturar todas las combinaciones posibles y ayudarme de variables auxiliares.

Pongámoslo a prueba!

Lo haré utilizando un programa de consola

        static void Main(string[] args)
        {
            Console.WriteLine("Max subvector suma!");

            int[] lista = new int[] {1,2,-4,3,3,-1,2 };
            Console.WriteLine(MaximaSubSuma(lista));
        }

Genial, pues ya lo tienes crack!

Recuerda que esta entrada es de la serie de artículos Algoritmos notables, los cuales los subo a este repo, puedes visitarlo y descubrir más algoritmos 😊

Espero esta entrada te haya gustado, analiza el código y trata de optimizarlo.

Ah y no te olvides de compartir esta entrada en toditas tus redes 😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *