Programación Orientada a Objetos

Profesor: Ángel Roldán
Profesor: Ángel Roldán
Cursos Relacionados

Cursos de Java

Divide y Vencerás

Es una técnica muy extendida gracias a su sencillez. Su aproximación es bastante intuitiva, si un problema es demasiado grande se descompone en partes de menor tamaño y más sencillas de resolver. Podremos aplicar esta técnica siempre que la "instancia" del problema se pueda dividir en subinstancias de menor tamaño.

¿En qué consiste esta técnica? 

  • Se divide el problema en subproblemas. Por eficiencia debemos intentar que los subproblemas tengan un tamaño similar. Si es posible resolver el problema, porque este es indivisible, se resuelve directamente

  • Se resuelve el problema para cada una de las instancias más pequeñas

  • Se combinan las soluciones obtenidas para obtener una solución global

La principal ventaja de esta técnica es su sencillez. Sin embargo no siempre obtendremos una solución óptima, aunque en muchas ocasiones será eficiente.

Veamos un ejemplo de aplicación de esta técnica para calcular la suma de los n primeros números naturales (1, 2, 3, ..., n):

Divide y Vencerás


Nos hemos ayudado de una función auxiliar, suma_aux, que suma los números existentes en un intervalo dado. Para divide el intervalo por su punto medio. Si no se puede dividir el intervalo se devuelve el valor ínfimo. Sería el caso del intervalo [2,2], donde se devolvería el 2. En otro caso se resolvería el problema más pequeño de calcular la suma de los intervalos más pequeños. Por último se combinarían las soluciones de los problemas más pequeños sumándolas:

suma_aux

Compartir

Facebook Twitter

Sección de Interés

ÁREA LINUX

Área Linux