Vous êtes sur la page 1sur 4

Programación y Estructuras de Datos

Avanzadas (cod:71902019)
curso 2018-2019

PED1: Subconjuntos Suma Dada

Álvaro Ruiz García


25351528-P
Centro Asociado María Zambrano (Málaga)
tel.617071622
email: janfribatt@gmail.com
1. Describa el esquema algorítmico utilizado y cómo se aplica al
problema.

Para la realización de esta práctica se requería del uso del esquema de vuelta
atrás. Este tipo de algoritmo parte de un nodo raíz, generando el árbol de
posibilidad asociado a todos los pasos subsiguientes posibles y valorando la
viabilidad de cada solución. Si se explora un nodo cuyos valores no son
compatibles con una posible solución, el algoritmo lo desecha, y vuelve al nodo
ya explorado más cercano que presentara unos valores dentro de una posible
solución, y desde ese mismo nodo, accede al siguiente nodo hijo que no sea el
ya mencionado. De esta manera continúa hasta que alcanza todos los nodos que
representan una solución para el problema.

En el caso de la aplicación del algoritmo al problema concreto de la practica, el


algoritmo comienza con la lista de enteros que queremos comprobar. Para cada
entero de la lista, el programa lo suma a un valor acumulativo inicializado a
cero, y despliega tantos nodos como números haya aparte del ya seleccionado.
Continúa sumando el siguiente número al valor acumulado, y se comprueba si
éste valor es menor a la suma objetivo, y si la cantidad de sumandos es menor a
la requerida, si es así, sigue desplegando los nodos bajo este segundo número, si
el valor de la suma fuese mayor al valor objetivo, el nodo seria eliminado y
volvería al último nodo prometedor explorado. Y así seguirá hasta que consiga
explorar todos los nodos solución.

Cuando se llega a un nodo solución, ésta se registra en un vector de booleanos


asociado a la lista. Para los valores TRUE del vector el algoritmo coge el
número en esa posición y lo introduce en otro vector de enteros. Al final se
devuelven todos los vectores solución.
2. Analice el coste computacional del algoritmo

El tiempo de ejecución dependerá del número de nodos desplegados. El caso


peor para una lista de N enteros seria generar todas las combinaciones posibles
para cada ni. Por tanto T(n) E O(n!).

3. Exponga alternativas al esquema utilizado, si las hay, y compare


su coste con el de la solución realizada. Si no es posible la
aplicación de otros esquemas vistos en la asignatura, justificar por
qué.

Podría aplicarse un esquema de programación dinámica, mediante la


construcción de una matriz booleana que indique si la suma acumulada de
varios de los enteros de la lista, tiene posibilidad de convertirse en el valor
deseado. De esta forma se reduciría la cantidad de comprobaciones de
combinaciones de sumandos.

4. Describa los datos de prueba utilizados y los datos obtenidos


con ellos.

Para comprobar el correcto funcionamiento del programa, le he proporcionado


varios archivos con casos distintos para asegurarme de que no hay errores en los
casos mas problemáticos, como números negativos, o cantidades altas.

Archivo de entrada: Archivo de salida:


4 8 9 12 489
3
21
Archivo de entrada: Archivo de salida:
-1 -3 -4 -5 -7 74 12 5 -71 -4 -5 12 5
4
8

Archivo de entrada:
14 5 -10 78 2 6 8 -5 11 10 -3 74 87 64 -9 12 15 -7 21
4
31

Archivo de salida:

-5 11 10 15
8 11 -9 21
8 11 -3 15
6 11 -7 21
2 15 -7 21
2 11 -3 21
2 8 11 10
2 6 11 12
2 6 8 15
-10 8 12 21
5 12 -7 21
5 -5 10 21
5 8 -3 21
5 6 8 12
5 -10 15 21
14 11 -9 15
14 -5 10 12
14 8 -3 12
14 -10 12 15
14 -10 6 21
14 5 -9 21
14 5 -3 15
14 5 2 10