ESCUELA TCNICA SUPERIOR DE INGENIERA INFORMTICA
GRADO EN INGENIERA INFORMTICA
Curso acadmico 2014/2015
Trabajo Fin de Grado
Herramienta para la visualizacin de algoritmos basados en programacin
dinmica
Autor: Juan Antonio Sopale Thompson
Tutor: Manuel Rubio Snchez
Resumen
El siguiente trabajo trata sobre el desarrollo de una aplicacin orientada a la
resolucin de problemas de programacin dinmica. El desarrollo de esta
herramienta supone cubrir el ecosistema de aplicaciones pensadas en el
aprendizaje de algoritmos. El contexto de uso de la aplicacin ser educativo, es
decir, los alumnos podrn reforzar sus conocimientos en la materia mediante la
ejecucin de las visualizaciones.
Desde el punto de vista de la usabilidad, se trata de crear una aplicacin sencilla,
minimalista, que sea intuitiva de cara al usuario final. Con el diseo se busca
practicidad sin descuidar el estilo grfico.
NDICE 1. Introduccin .................................................................................................. 1
1.1 Programacin dinmica ............................................................................. 1
1.2 Objetivos ................................................................................................... 2
2. Herramientas de visualizacin de software ................................................... 3
3. Especificacin y anlisis de requisitos .......................................................... 9
3.1 Descripcin del problema .......................................................................... 9
3.2 Caractersticas de los usuarios .................................................................. 9
3.3 Requisitos funcionales ............................................................................. 10
3.4 Requisitos de interfaces externos ............................................................ 11
3.5 Requisitos de rendimiento ....................................................................... 11
3.6 Requisitos de desarrollo .......................................................................... 12
3.7 Requisitos tecnolgicos ........................................................................... 12
4. Descripcin de los problemas de la aplicacin ........................................... 13
4.1 Mochila 01 ............................................................................................... 13
4.2 Alineamiento de secuencias .................................................................... 16
4.3 Cortar una vara ....................................................................................... 19
4.4 Multiplicacin de matrices ........................................................................ 21
4.5 Subsecuencia comn ms larga .............................................................. 23
5. Modelo de negocio ..................................................................................... 25
5.1 Diagrama de casos de uso ...................................................................... 25
5.1.1 Detalle de casos de uso (flujo de eventos)........................................ 26
6. Diseo de la aplicacin ............................................................................... 35
6.1 Diagramas de clases ............................................................................... 35
6.2 Diagramas de clases en detalle ............................................................... 39
6.2.1 Subsistema de entrada de datos ...................................................... 39
6.2.2 Subsistema de visualizacin paso a paso ......................................... 42
6.2.3 Subsistema de ayuda ....................................................................... 44
6.2.4 Fichero ............................................................................................. 45
7. Diseo de la interfaz grfica ....................................................................... 47
7.1 Diseo del panel principal ........................................................................ 47
7.2 Diseo de los paneles de entrada ........................................................... 48
7.3 Diseo de los paneles de visualizacin paso a paso ............................... 52
7.3.1 Visualizacin de la mochila 0,1 ......................................................... 53
7.3.2 Visualizacin del alineamiento de secuencias .................................. 55
7.3.3 Visualizacin de cortar una vara ....................................................... 56
7.3.4 Visualizacin de multiplicacin de matrices ...................................... 58
7.3.5 Visualizacin de la subsecuencia comn ms larga ......................... 59
7.4 Diseo de los paneles de ayuda .............................................................. 61
7.5 Tipografas .............................................................................................. 63
Conclusiones ...................................................................................................... 65
Bibliografa ......................................................................................................... 67
NDICE DE ILUSTRACIONES
Figura 1: Proceso de visualizacin de datos........................................................ 4 Figura 2: Diagrama de actividad de la mochila 01 ............................................. 15 Figura 3: Diagrama de actividad de alineacin de secuencias .......................... 18 Figura 4: Diagrama de actividad de cortar una vara .......................................... 20 Figura 5: Diagrama de actividad de multiplicacin de matrices ......................... 22 Figura 6: Diagrama de actividad de subsecuencia comn ms larga ................ 24 Figura 7: Diagrama de casos de uso ................................................................. 25 Figura 8: Relacin de los subsistemas de la aplicacin ..................................... 36 Figura 9: Clases del subsistema de entrada de datos ....................................... 36 Figura 10: Clases del subsistema de visualizacin paso a paso........................ 37 Figura 11 Clases del subsistema de ayuda ....................................................... 38 Figura 12 La clase que gestiona la interaccin con ficheros de texto ................ 38 Figura 13: Panel principal de la aplicacin ........................................................ 48 Figura 14: Panel de entrada del problema de la mochila ................................... 49 Figura 15: Panel de entrada del problema del alineamiento de secuencias ...... 50 Figura 16: Panel de entrada del problema de cortar una vara ........................... 50 Figura 17: Panel de entrada del problema de multiplicacin de matrices .......... 51 Figura 18: Panel de entrada del problema de la SCML ..................................... 51 Figura 19: Panel de entrada con casillas en rojo sin completar ......................... 52 Figura 20: Inicializacin de la mochila ............................................................... 53 Figura 21: Visualizacin paso a paso de la mochila .......................................... 54 Figura 22: Solucin de la mochila ...................................................................... 54 Figura 23: Inicializacin del alineamiento de secuencias ................................... 55 Figura 24: Visualizacin paso a paso del alineamiento de secuencias .............. 55 Figura 25: Solucin del alineamiento de secuencias ......................................... 56 Figura 26: Inicializacin de cortar una vara ....................................................... 56 Figura 27: Visualizacin paso a paso de cortar una vara .................................. 57 Figura 28: Solucin de cortar una vara .............................................................. 57 Figura 29: Inicializacin de la multiplicacin de matrices ................................... 58 Figura 30: Visualizacin paso a paso de la multiplicacin de matrices .............. 58 Figura 31: Solucin de la multiplicacin de matrices ......................................... 59 Figura 32: Inicializacin de la subsecuencia comn ms larga .......................... 59 Figura 33: Visualizacin pasos a paso de SCML ............................................... 60 Figura 34: Solucin de la subsecuencia comn ms larga ................................ 60 Figura 35: Informacin del problema ................................................................. 61 Figura 36: Informacin de cargar y guardar ....................................................... 62 Figura 37: Caracterizacin de colores ............................................................... 63
1
1. Introduccin
La programacin dinmica es uno de los paradigmas ms importantes de diseo
de algoritmos, pero es compleja y por ello se pretende disear una herramienta
que favorezca el aprendizaje de este paradigma. Para ello nos centraremos en
algunos de los problemas que se pueden resolver valindonos de la programacin
dinmica, y mediante la herramienta se podr visualizar la ejecucin completa del
algoritmo.
1.1 Programacin dinmica
La programacin dinmica [7] [8], que fue inventada por Richard Bellman en 1953,
es una tcnica que se aplica generalmente para resolver problemas de
optimizacin. Constituye adems una optimizacin de algoritmos recursivos en los
que la solucin al problema implica la repeticin de subproblemas. La
programacin dinmica se vale de la utilizacin de tablas, de modo que en ellas
se guardan las soluciones a los subproblemas ya calculados, por lo que la
subsolucin slo es calculada una vez. La ventaja principal de esta tcnica reside
en que reducimos el coste de tiempo; la desventaja est en que con el uso de la
tabla se aumente el espacio de almacenamiento en memoria.
La programacin dinmica tiene dos enfoques:
Top-down (memoizacin): La estructura del algoritmo sigue siendo
recursiva. Sin embargo, antes de resolver un problema se verifica si la
solucin ya est calculada. En el caso de que no est an calculada la
solucin entonces se calcula y se guarda en una tabla.
Bottom-up: Este algoritmo es iterativo. Se van resolviendo los problemas
desde el caso base, de menor a mayor tamao por etapas, de modo que
las soluciones menores sirven para el clculo de subproblemas de mayor
tamao. Para ello, como en memoizacin, se emplea una tabla donde se
almacenan las soluciones a los subproblemas. En general los pasos
necesarios para resolver un problema mediante este enfoque son los
siguientes:
2
1. Hallar la definicin recursiva del problema (incluyendo los casos base),
plantendolo mediante ecuaciones.
2. Inicializar la tabla de soluciones (normalmente un vector o una matriz),
rellenando las casillas que corresponden a los casos base.
3. Mediante la iteracin con bucles, calcular el resultado para otros casos
empleando la definicin recursiva.
1.2 Objetivos
El objetivo del desarrollo de esta herramienta de software es dotar al alumnado de
una aplicacin prctica para entender los algoritmos de programacin dinmica
mediante la resolucin por etapas de los diversos problemas planteados.
Esta aplicacin est basada en otra herramienta de software enfocada tambin en
la programacin dinmica, vase [26]. Buscamos por tanto, con esta versin,
mejorar en aspectos como el diseo de la herramienta, la visualizacin de los
algoritmos o la mejora de las funcionalidades de la interfaz de usuario.
Anteriormente, en el apartado 1.1, mencionbamos los dos enfoques desde los
cuales se puede estudiar la programacin dinmica. En nuestro caso, la
herramienta est basada en el procedimiento bottom-up. Por tanto, el tablero de
la solucin est representado con una matriz cuyas casillas van siendo rellenadas
desde las soluciones parciales hasta la solucin final, de modo que se puedan
visualizar las dependencias de las soluciones posteriores con las anteriores
calculadas.
Resumen de las caractersticas de la aplicacin:
Interfaz accesible para todo tipo de usuarios.
Potenciar el minimalismo, la sencillez, la facilidad de uso.
Visualizar y comprender paso a paso el funcionamiento de los algoritmos
de programacin dinmica. Desde el uso de las ecuaciones, pasando por
el clculo de los subproblemas, hasta la obtencin de la solucin final
ptima.
Proveer al alumnado de una herramienta para el aprendizaje de algoritmos
de programacin dinmica, facilitndole de este modo el estudio de esta
tcnica.
3
2. Herramientas de visualizacin de software
Desde hace un tiempo, en el mbito educativo existen herramientas con fines de
aprendizaje, pero nunca han llegado a tener un gran impacto en los centros
educativos por la falta de eficacia de sus resultados o el elevado coste de
implantacin.
La usabilidad es un factor importante a la hora de probar la efectividad de una
herramienta de aprendizaje. De hecho, la facilidad con la que se interaccione con
el sistema y la manera en la que se interpretan las visualizaciones determinan el
xito o fracaso de la herramienta [32].
Hasta hace poco el trmino visualizacin significaba construir una imagen visual
en nuestra mente. Hoy da significa algo ms que una representacin grfica de
datos o conceptos. La visualizacin tiene la capacidad de comunicar conceptos
abstractos de una forma familiar y accesible. De hecho, las visualizaciones tienen
un importante rol en el sistema cognitivo. Nosotros, los seres humanos,
adquirimos ms informacin a travs de la vista que de los otros sentidos
combinados, vase [34].
Uno de los grandes beneficios de la visualizacin est en que permite rpidamente
poder interpretar una gran cantidad de informacin si dicha informacin est bien
representada [34]. Tambin facilita la comprensin de la estructura de las partes
de los datos como un todo. Permite observar desde diferentes perspectivas la
apariencia de los datos.
Segn Colin Ware [34], el proceso de visualizacin de datos se compone por
cuatro fases, combinadas en un nmero de lazos de realimentacin, segn se
ilustra en la siguiente figura:
4
Figura 1: Proceso de visualizacin de datos
Esas cuatro fases consisten en lo siguiente:
La recoleccin y almacenaje de los datos
El pre-proceso para transformar los datos en algo que podamos entender
Generacin de la representacin grfica
El sistema humano perceptor y cognitivo
Hay tres lazos de realimentacin que son la recoleccin, manipulacin y
exploracin de datos. El analista de la informacin puede recolectar datos y
aadirlos para que stos sean pre-procesados y representados grficamente.
Tambin puede manipular la manera grfica en la que se muestran los datos pre-
procesados y transformados. Mediante la exploracin de datos puede elegir
diferentes pre-procesos o transformar datos existentes para obtener datos
derivados.
Finalmente, tanto el entorno fsico como el entorno social estn involucrados en el
proceso de realimentacin. El entorno fsico es una fuente de datos, mientras que
el entorno social determina la manera en la que son recolectados e interpretados
los datos.
El concepto de algoritmo es un tema fundamental en la computacin, pero para
los alumnos representa un concepto abstracto por lo que les dificulta su
aprendizaje [13]. Por ello, las tcnicas de visualizacin pueden llegar a esclarecer
la eficiencia de los algoritmos.
5
Las herramientas de visualizacin de software tienen como propsito la
representacin esttica o dinmica de programas y algoritmos. Segn el nivel de
abstraccin, vase [32], podemos diferenciar entre dos tipos: visualizacin de
programas (bajo nivel) y visualizacin de algoritmos (alto nivel).
Hay que diferenciar tambin entre visualizacin y animacin de algoritmos:
La visualizacin de algoritmos es una abstraccin de alto nivel que
describe el software.
La animacin de algoritmos muestra cmo se comporta un algoritmo. La
ejecucin del algoritmo se divide en estados y cada estado se representa
con una visualizacin grfica.
La animacin de algoritmos tiene las siguientes ventajas:
Desde el punto de vista educativo sirve a profesores para mostrar a sus
alumnos el funcionamiento de algoritmos.
Un desarrollador se retroalimenta de la visualizacin de algoritmos de tal
manera que pueden mejorar la representacin de dicha visualizacin. Los
desarrolladores visualizan los algoritmos para entender mejor cmo
funcionan.
La visualizacin le sirve al programador para encontrar errores en la
representacin de la informacin y poder corregirlos.
En el contexto en el que nos encontramos existen pocas herramientas para el
aprendizaje de la algoritmia. Sin embargo, es necesaria la proliferacin de este
tipo de herramientas ya que la visualizacin del funcionamiento de un algoritmo
podra llegar a ser una manera ms rpida y efectiva de aprendizaje que la forma
tradicional.
Existen algunas herramientas enfocadas en la visualizacin de algoritmos y
programas. A continuacin destacamos alguna de estas herramientas:
SRec, vase [27] y [30], es una herramienta de visualizacin, con fines
educativos, enfocada en proporcionar visualizaciones animadas e interactivas
sobre problemas de recursividad en Java. Adems cuenta con la posibilidad
de guardar visualizaciones generadas que luego pueden ser cargadas, de
exportar grficos y de mostrar informacin detallada. Ofrece tres maneras de
visualizar la recursin: traza, pila de control y rbol de recursin.
6
La aplicacin genera las visualizaciones a partir de pre-proceso de una clase
en Java. El usuario puede avanzar, detenerse, retroceder en la visualizacin
paso a paso del algoritmo mediante los controles de navegacin.
GreedEx, vase [13] y [16], es una herramienta de visualizacin que est
centrada en la resolucin de algoritmos voraces. El objetivo de la herramienta
est en la comprensin de cmo funcionan los algoritmos voraces y qu
incidencia tienen las funciones de seleccin en dicho algoritmo.
Las visualizaciones generadas son el resultado de aplicar las funciones de
seleccin a los datos de entrada introducidos. El usuario puede ejecutar paso
a paso las animaciones mediante los controles de navegacin. Adems
permite guardar datos y resultados, y exportar visualizaciones.
GraphsJ [15] es una herramienta didctica orientada a la resolucin y
aprendizaje de algoritmos de grafos. Permite la ejecucin paso a paso de
estos algoritmos ofreciendo en cada paso informacin detallada para el
usuario. La aplicacin incluye cuatro problemas de algoritmos de grafos: el
rbol de recubrimiento del coste mnimo, los caminos ms cortos, el flujo
mximo y el camino crtico. No obstante cualquier desarrollador puede aadir
nuevos problemas a la herramienta.
Jeliot [21] es una herramienta de visualizacin de programas en Java. Su
propsito es visualizar la manera en que un cdigo en Java es interpretado
cuando se lanza su ejecucin. Llamadas a mtodos, variables y operaciones
son mostradas por pantalla en la visualizacin de modo que el usuario pueda
observar paso a paso la ejecucin del programa. Esto representa una manera
didctica de familiarizarse con las caractersticas bsicas de Java.
Las visualizaciones se generan automticamente cuando se ejecuta el
programa en Java. La herramienta muestra un panel con dos secciones: el
cdigo escrito en Java y los grficos de la ejecucin de dicho cdigo. El
usuario tiene la posibilidad de pausar, avanzar y retroceder en el proceso de
visualizacin.
ViLLE [29] es una herramienta de visualizacin de programas diseada con
el propsito de mostrar los conceptos generales bsicos de programacin.
Est aplicacin tiene principalmente un enfoque didctico de tal manera que
profesores pueden mostrar a sus alumnos el comportamiento de la ejecucin
7
de un programa. ViLLE contiene una serie de ejercicios de ejemplo
organizados por categoras. No obstante la aplicacin permite aadir ms
ejercicios.
Uno de los puntos fuertes de esta herramienta es que soporta la visualizacin
de los programas en diferentes lenguajes de programacin. Adems un
usuario puede ejecutar el cdigo de un programa simultneamente en dos
diferentes lenguajes de programacin, de este modo el usuario puede ver las
diferencias sintcticas entre ambos lenguajes.
Otra destacada caracterstica es que el usuario puede editar el cdigo en una
visualizacin para observar los cambios que se producen en la ejecucin y
visualizacin.
AlgoViz [1] es un portal web cuyo propsito es la representacin de las
animaciones de algoritmos. Los usuarios pueden aadir sus propios
algoritmos en varios lenguajes de programacin y generar sus propias
visualizaciones. Adems permite exportar grficos.
BlueJ [3] es una herramienta que ofrece un entorno desarrollo de programas
en Java. Facilita el aprendizaje del paradigma de la orientacin de objetos a
travs del lenguaje Java. Posee un editor que te permite visualizar el cdigo
de una manera ms rpida debido al coloreado de las partes del cdigo. En
la ejecucin del cdigo, los objetos pueden ser inspeccionados para poder
analizar el comportamiento del programa. Al igual que se pueden inspeccionar
los objetos en tiempo de ejecucin tambin se pueden crear nuevos objetos
e invocar sus mtodos. Tambin se pueden aadir breakpoints en el cdigo
para parar la ejecucin en el punto indicado y poder as ver el estado de las
variables.
BlueJ ofrece una representacin UML cuando tenemos un proyecto con
diversas clases. De este modo podemos visualizar las relaciones entre las
clases.
Hemos visto ejemplos de herramientas enfocadas a problemas recursivos, a
algoritmos voraces o a algoritmos de grafos. Sin embargo, en el mbito de la
programacin dinmica hay carencia de herramientas de visualizacin y por ello,
uno de los requisitos con este trabajo es el de completar el ecosistema de
aplicaciones pensadas para el aprendizaje de algoritmos.
8
9
3. Especificacin y anlisis de requisitos
Este apartado consiste en desglosar los requerimientos de la aplicacin que se va
a desarrollar. Esta es una parte fundamental del proceso de desarrollo ya que a
partir de aqu se tomarn las decisiones de diseo.
3.1 Descripcin del problema
El sistema debe permitir al usuario la visualizacin paso a paso del
desarrollo del algoritmo de programacin dinmica para cada problema.
El usuario podr avanzar o retroceder en la visualizacin paso a paso del
algoritmo aplicado al problema seleccionado.
El usuario podr introducir manualmente los datos del problema
seleccionado.
El usuario podr cargar y guardar los datos del problema seleccionado.
3.2 Caractersticas de los usuarios
El tipo de usuario que maneja esta aplicacin debe estar familiarizado con
aplicaciones de esta ndole; debe tener algn conocimiento mnimo sobre
programacin dinmica. La interfaz es intuitiva y fcil de usar por lo que la curva
de aprendizaje para un usuario con conocimientos bsicos es muy pequea.
Tenemos el siguiente tipo de usuario que utilizar la aplicacin:
Usuario, compuesto por dos subtipos (alumno, profesor).
El usuario podr disponer de las siguientes funcionalidades al acceder a la interfaz
de la aplicacin:
Seleccionar un problema: El usuario selecciona uno de los problemas de
la lista que muestra la interfaz de inicio.
10
Introducir datos de problema: El usuario introducir los datos del
problema previamente seleccionado completando las casillas
correspondientes.
Cargar datos del problema: El usuario puede cargar desde un archivo de
texto los datos del problema seleccionado.
Guardar datos del problema: El usuario puede guardar los datos del
problema, previamente introducidos, en un archivo de texto.
Avanzar en la solucin del problema: El usuario puede avanzar
subproblema a subproblema hasta la solucin final.
Retroceder en la solucin del problema: El usuario puede retroceder a
un subproblema anterior.
Obtener la solucin final: El usuario puede obtener y visualizar el
resultado de la solucin final del problema.
Reiniciar solucin: El usuario puede volver desde la etapa en la que se
encuentre hasta el estado inicial.
3.3 Requisitos funcionales
Visualizacin paso a paso del algoritmo:
Se requiere de la visualizacin, a travs de la interfaz, de la tabla que
contiene las soluciones parciales de los subproblemas de modo que el
usuario pueda en todo momento saber qu soluciones se han calculado.
Tambin se requiere de la visualizacin de las ecuaciones usadas, y sus
respectivos clculos, para hallar la solucin subptima de cada etapa.
Finalmente, al acabar con los clculos parciales obtenidos en cada
iteracin, debe mostrarse la solucin final ptima.
Avance y retroceso en la solucin del problema:
Se requiere que la aplicacin permita al usuario poder interactuar con la
interfaz de modo que puede tanto avanzar como retroceder a lo largo de
las etapas de la resolucin del problema. El usuario podr avanzar desde
el estado inicial hasta que se alcanza la solucin final. Del mismo modo,
el usuario puede retroceder siempre y cuando no se halle en el estado
inicial. Directamente, el usuario puede obtener la solucin final del
problema y tambin reiniciar el problema hasta el estado inicial.
11
Introduccin manual de datos:
Se requiere que el usuario pueda introducir manualmente, mediante el
uso de teclado y ratn, los datos correspondientes al problema
seleccionado. Se verificar si los datos introducidos por el usuario son
vlidos de modo que se garantice el correcto funcionamiento de la
aplicacin.
Carga y guardado de los datos del problema:
Se requiere que el usuario pueda tanto cargar datos desde un archivo de
texto, con extensin .txt, como guardarlos. Para cada problema se
verificar que el archivo desde donde se cargan los datos del problema
lleva un formato vlido para la lectura de dichos datos.
3.4 Requisitos de interfaces externos
Interfaces de usuario:
La interfaz de usuario estar orientada a ventanas y se manejar
mediante teclado y ratn. La interfaz debe cumplir con los requisitos
accesibilidad y usabilidad.
Interfaces hardware y software:
No se han definido.
Interfaces de comunicacin:
No son necesarias para la aplicacin.
3.5 Requisitos de rendimiento
Los tiempos de espera y respuesta deben ser rpidos, de 2 segundos como
mucho. Al ejecutar la aplicacin y sus funcionalidades, el uso de la CPU no debe
sobrepasar el 20%.
12
3.6 Requisitos de desarrollo
El ciclo de vida elegido para desarrollar la aplicacin tendr en cuenta que se
puedan incorporar fcilmente cambios y nuevas funciones, as como aprovechar
las ventajas de reusabilidad proporcionada por el paradigma de orientacin a
objetos. La metodologa de desarrollo a utilizar ser el proceso unificado de
desarrollo y el lenguaje UML.
3.7 Requisitos tecnolgicos
La aplicacin debe correr como mnimo en ordenadores con Windows. Tambin
est pensado para el uso en las plataformas Mac y Linux.
La configuracin mnima del equipo para ejecutar la aplicacin es:
Procesador: Pentium 100 Mhz.
Memoria ram: 16 Mb
Espacio libre en disco: 1 Mb mnimo
Para la ejecucin de la aplicacin se proporcionar el archivo ejecutable y sus
dependencias.
13
4. Descripcin de los problemas de la
aplicacin
En este apartado, para cada uno de los problemas se explica en qu consisten,
las ecuaciones usadas que representan la manera iterativa con la que se van
calculado los valores que se almacenan en la tabla desde los casos base hasta
los de mayor tamao, y el diagrama de actividad muestra cmo se comporta el
algoritmo, es decir, conseguimos con ello mostrar una visin dinmica del
algoritmo.
4.1 Mochila 01
Problema:
El problema de la mochila, vase [28] y [19], es un problema de optimizacin
combinatoria, es decir, que busca la mejor solucin posible entre un conjunto de
posibilidades.
Este es un problema que consiste en decidir de entre n objetos de pesos p1, p2,...,
pn y beneficios b1, b2,..., bn, cules hay que incluir en una mochila de capacidad c
sin superar dicha capacidad y de forma que se maximice la suma de los beneficios
de los elementos escogidos.
Primero debemos plantear el problema como una secuencia de decisiones que
verifique el principio ptimo. De aqu seremos capaces de deducir una expresin
recursiva de la solucin. Por ltimo habr que encontrar una estructura de datos
donde se almacenarn los clculos de los subproblemas.
Sea m(i,p) el valor del beneficio mximo de la mochila con capacidad p
considerando los n-i+1 ltimos objetos de los n totales, siendo 0 p c y 1 i
n. Entonces, podemos definir el problema de forma recurrente en funcin de si se
usa o no el objeto i-simo:
Si se usa el objeto i-simo entonces la subsecuencia de decisiones
tomadas para obtener m(i+1,p-pi) ha de ser ptima.
14
Si no se usa el objeto i-simo entonces la subsecuencia de decisiones
tomadas para obtener m(i+1,p).
Por tanto, el valor que toma m(i,p) ser el mayor entre m(i+1,p), que indica que el
elemento i no se introduce, y m(i+1,p-pi) + bi, que es el resultado de introducirlo,
para cuando la capacidad p es mayor que pi. Si no se introduce el objeto i debido
a que tiene un peso pi p, entonces m(i,p) toma el valor de m(i+1,p).
Finalmente, en los casos base el beneficio es 0, para cuando i=n+1, es decir, no
se introducira ningn objeto.
La solucin del problema original sera m(1,c) y se necesitara una tabla con n+1
filas y c+1 columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
Donde:
p: es la capacidad parcial de la mochila.
pi: es el peso del objeto i.
bi: es el beneficio del objeto i.
c: es la capacidad total de la mochila.
n: es el nmero de objetos.
m: es la tabla donde se almacenan los resultados.
cpniparappsibppimpim
ppsipimpim
cpparapnm
iii
i
0,1)),1(),,1(max(
),1(),(
00),1(
15
Diagrama de actividad:
Figura 2: Diagrama de actividad de la mochila 01
16
4.2 Alineamiento de secuencias
Problema:
El problema del alineamiento de secuencias, vase [2] y [19], consiste en lo
siguiente: dadas dos secuencias de caracteres, sean x e y, se busca encontrar el
mnimo nmero de operaciones para convertir la secuencia x en la y. El mnimo
nmero de operaciones permitidas son del siguiente tipo: borrar un carcter,
insertar un carcter, y sustituir un carcter.
Llamaremos m a la longitud de la cadena x, n a la longitud de la cadena y, y C(m,n)
indicar el nmero de operaciones bsicas mnimo para transformar una cadena
x de longitud m en otra cadena y de longitud n.
Para resolver el problema es necesario plantearlo como una sucesin de
decisiones que satisfaga el principio ptimo.
Empezaremos por fijarnos en el ltimo carcter de cada una de las cadenas.
Entonces tendremos que escoger la situacin ms beneficiosa de entre tres
posibilidades:
1. Considerar la primera cadena y la segunda pero sin el ltimo elemento.
Esta opcin se correspondera con la operacin de insertar un carcter.
2. Considerar la primera cadena menos el ltimo elemento y la segunda
cadena. Esta opcin se correspondera con la operacin de borrar un
carcter.
3. Considerar las dos cadenas sin el ltimo elemento. En caso de que no
coincidiesen los ltimos caracteres de ambas cadenas, xm yn, se
correspondera con una operacin de sustitucin. En caso contrario no se
realizara ninguna operacin.
Esto dara lugar a las siguientes relaciones de recurrencias para C(m,n):
xm yn: C(m,n) = min{ 1 + C(m,n-1), 1 + C(m-1,n), 1 + C(m-1,n-1) }
xm = yn: C(m,n) = min{ 1 + C(m,n-1), 1 + C(m-1,n), C(m-1,n-1) }
Respecto a los casos base tendramos dos situaciones:
17
Que el nmero de caracteres de la secuencia x, fuese m, y el nmero de
caracteres de la secuencia y fuese 0, en ese caso habra que hacer m,
operaciones de borrado, o lo que es lo mismo, C(m,0) = m.
Que el nmero de caracteres de la secuencia x, fuese 0, y el nmero de
caracteres de la secuencia y fuese n, en ese caso habra que hacer n,
operaciones de insercin, o lo que es lo mismo, C(0,n) = n.
La solucin del problema original sera C(m,n) y se necesitara una tabla con m+1
filas y n+1 columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
Donde:
x: es la secuencia de caracteres X; cada xi representa un carcter.
y: es la secuencia de caracteres Y; cada yi representa un carcter.
i: toma valores desde 0 hasta el nmero total de caracteres de la secuencia X - 1.
j: toma valores desde 0 hasta el nmero total de caracteres de la secuencia Y - 1.
C: es la tabla donde se almacenan los resultados.
)(1
)(0),(
1),1(
1)1,(
min)1,1(
,...,),0(
,...,)0,(
1111
11
1
1
1
1
jiji
ji
j
i
j
i
yporxsustituyeseyxsi
nadahacesenoyxsijiC
yinsertasejiC
xborrasejiC
jiC
yyinsertasejjC
xxborraseiiC
18
Diagrama de actividad:
Figura 3: Diagrama de actividad de alineacin de secuencias
19
4.3 Cortar una vara
Problema:
Se requiere cortar una vara (de longitud n) en varios trozos de determinadas
longitudes para luego poder venderlos.
El problema de cortar una vara, vase [8], [9] y [10], busca encontrar la cantidad
ptima de cortes a lo largo de una vara en trozos de una determinada longitud que
maximice el precio de venta de los trozos cortados.
Denominaremos p1, p2, , pn a los precios de particin de la vara segn la longitud
indicada por el subndice. Definimos r(i,j) como el beneficio mximo obtenido de
cortar una vara, para 1 i j n, donde i representa la longitud de la vara en un
instante dado, y j representa la descomposicin en trozos de la vara.
Por ejemplo, para una vara de longitud m habra m posibilidades de descomponer
una vara, por lo que 1 j m. Cuando j = m ya se habra llegado a la ltima
descomposicin posible y se comparara con la mejor descomposicin obtenida
hasta el momento, es decir, con las m-1 descomposiciones previas. Esto dara la
siguiente relacin de recurrencia:
r(i,m) = max{ r(i,m-1), pi + r(i-m, i-m) }
El caso base vendra dado por r(i,0) = 0, ya que no habra ninguna
descomposicin.
La solucin del problema original sera r(n,n) y se necesitara una tabla con n filas
y n columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
Donde:
p(i): es el valor del precio al cortar la vara una longitud i.
i: toma valores desde 0 hasta el valor de la longitud de la vara.
j: toma valores desde 0 hasta el valor de la longitud de la vara.
r: es la tabla donde se almacenan los resultados.
jiparajijirip
jirjir
ir
1),()(
),1,(max),(
0)0,(
20
Diagrama de actividad:
Figura 4: Diagrama de actividad de cortar una vara
21
4.4 Multiplicacin de matrices
Problema:
Supongamos que tenemos las matrices M1, M2,..., Mn, que queremos multiplicar:
M = M1 M2 ... Mn
Puesto que el producto es asociativo, habr muchas formas de realizar las
multiplicaciones. Cada colocacin de los parntesis indica un orden en el que se
realizan las operaciones. Segn el orden de las multiplicaciones, el nmero de
total de multiplicaciones escalares necesarias puede variar considerablemente.
Sea una matriz A de dimensin pxq y B de qxr, entonces el producto AB requiere
pqr multiplicaciones escalares. Entonces, el problema de multiplicacin
encadenada de matrices busca encontrar un orden de multiplicacin que minimice
el nmero de multiplicaciones escalares [19].
Definimos m(i,j) como el nmero de productos escalares necesarios para realizar
la multiplicacin entre la matriz i y la matriz j, para i j, tal que m(i,j) = Mi Mi+1 ...
Mj. Denominaremos d1, d2, ..., dn a las dimensiones de las matrices donde la
matriz Mi sera de dimensin dixdi+1
Entonces, tenemos los siguientes casos base:
Si i = j, entonces m(i,j) = 0. No necesitamos hacer ninguna operacin.
Si i = j - 1, entonces m(i,j) = di di+1 di+2. Slo existe una forma de hacer
el producto.
Si no se da ninguno de los anteriores casos base, entonces podemos hacer la
primera multiplicacin por una posicin k, para i k < j:
(Mi ... Mk) (Mk+1 ... Mj).
Por lo tanto, el valor mnimo sera:
m(i,j) = min{ m(i,j) + m(i,j) + di dk dj }, para i k < j.
La solucin del problema original sera m(1,n) y se necesitara una tabla con una
posicin para cada i, j, para 1 i j n, es decir, una tabla con n filas y n columnas.
El algoritmo usara la mitad de la tabla.
22
Ecuaciones:
Donde:
n: es el nmero de matrices encadenadas.
d: es el vector de dimensiones; por ejemplo, si tenemos 4 matrices de dimensiones
5x2, 2x4, 4x1, 1x7, entonces el vector de dimensiones sera {5, 2, 4, 1, 7}.
m: es la tabla donde se almacenan los resultados.
Diagrama de actividad:
Figura 5: Diagrama de actividad de multiplicacin de matrices
njiparajdkdidjkmkimjkijimiim
1)()()1(),1(),()min(),(
0),(
23
4.5 Subsecuencia comn ms larga
Problema:
Sean dos secuencias de caracteres, X = { x1 x2 xm } e Y = { y1 y2 yn } se debe
encontrar la subsecuencia de caracteres ms larga contenida tanto en X como en
Y , vase [19] y [31].
Definiremos SCML(i,j) a la longitud de la secuencia mxima de las dos secuencias
Xi e Yj, siendo Xi el i-simo prefijo de X (esto es, Xi = { x1 x2 xi }) e Yj el j-simo
prefijo de Y, (Yj = { y1 y2 yj }).
Podemos plantear la solucin como una sucesin de decisiones en las que en
cada paso determinaremos si un carcter forma parte de la subsecuencia comn
mxima. Escogemos la estrategia hacia atrs, es decir, comenzamos teniendo en
cuenta los ltimos caracteres de ambas secuencias, por lo que llegamos a las
siguientes posibilidades:
Si i = m + 1 j = n + 1: no se considerara ningn carcter de la secuencia
X y/o no se considerara ningn carcter de la secuencia Y por lo que no
habra ninguna subsecuencia en comn, es decir, SCML(i,j) = 0. Se
correspondera con los casos base.
Si i m + 1, j n + 1: en este caso debemos verificar si los caracteres xi e
yj coinciden. Si coinciden entonces se aaden a la solucin y calculamos
el ptimo para las mismas secuencias menos el ltimo carcter de ambas,
es decir, SCML(i,j) = SCML(i-1,j-1) + 1. Si no coinciden entonces SCML(i,j)
= max{ SCML(i,j-1) SCML(i-1,j), }, es decir, consideraramos la
subsecuencia comn mxima, entre la secuencia Xi y la secuencia Yj-1, y
entre la secuencia Xi-1 y la secuencia Yj.
La solucin del problema original sera SCML(1,1) y se necesitara una tabla con
m+1 filas y n+1 columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
nosijiSCMLjiSCML
yxsijiSCMLjiSCML
niSCML
jmSCML
ji
)}1,(),,1(max{
)1,1(1),(
0)1,(
0),1(
24
Donde:
x: es la secuencia de caracteres X; cada xi representa un carcter.
y: es la secuencia de caracteres Y; cada yj representa un carcter.
i: toma valores desde 1 hasta el nmero total de caracteres de la secuencia X + 1.
j: toma valores desde 1 hasta el nmero total de caracteres de la secuencia Y + 1.
m: es el nmero de caracteres de la secuencia Y.
n: es el nmero de caracteres de la secuencia X.
SCML: es la tabla donde se almacenan los resultados.
Diagrama de actividad:
Figura 6: Diagrama de actividad de subsecuencia comn ms larga
25
5. Modelo de negocio
5.1 Diagrama de casos de uso
El diagrama de casos de uso representa la vista externa del comportamiento del
sistema desde el punto de vista del usuario.
Figura 7: Diagrama de casos de uso
26
5.1.1 Detalle de casos de uso (flujo de eventos)
Aqu se muestra la secuencia de acciones que determinan la interaccin del
usuario con el sistema para cada caso de uso.
Flujo de eventos
Camino bsico del caso de uso Obtener datos de entrada del problema
ACTOR SISTEMA
2. Selecciona el problema 1. Muestra el men de inicio
4. Introduce datos de entrada por
teclado 3. Muestra el panel de entrada
6. Confirma los datos de entrada 5. Comprueba los datos de entrada
7. Valida los datos de entrada
8. Muestra el panel de ejecucin del
algoritmo con los datos del problema
Caminos alternativos
Evento 4: El usuario introduce los datos de entrada desde fichero.
Evento 5: Los datos de entrada, por teclado o desde fichero, son errneos por
lo que confirma el error.
Flujo de eventos
Camino bsico del caso de uso Guardar datos de entrada
ACTOR SISTEMA
2. Selecciona el problema 1. Muestra el men de inicio
4. Introduce datos de entrada por
teclado 3. Muestra el panel de entrada
6. Selecciona guardar datos en fichero 5. Comprueba los datos de entrada
7. Confirma guardado de datos
Caminos alternativos
Evento 4: El usuario introduce los datos de entrada desde fichero.
Evento 5: Los datos de entrada son errneos por lo que devuelve error.
27
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Mochila 01) *
ACTOR SISTEMA
2. Ejecuta una iteracin del algoritmo 1. Muestra el panel de ejecucin del
algoritmo con los datos del problema
3. Muestra los clculos de la iteracin
5. El usuario procesa la informacin
visualizada
4. Muestra el beneficio mximo posible
para la iteracin realizada
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el beneficio ptimo final y los objetos introducidos en la mochila.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Alineamiento de secuencias) *
ACTOR SISTEMA
2. Ejecuta una iteracin del algoritmo 1. Muestra el panel de ejecucin del
algoritmo con los datos del problema
3. Muestra los clculos de la iteracin
5. El usuario procesa la informacin
visualizada
4. Muestra el mnimo n de
operaciones posible para convertir la
subsecuencia X en la subsecuencia
Y para la iteracin realizada
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el n mnimo de operaciones para convertir las secuencia X en la
secuencia Y, y las operaciones realizadas para llevar a cabo la conversin.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
28
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Cortar una vara) *
ACTOR SISTEMA
2. Ejecuta una iteracin del algoritmo 1. Muestra el panel de ejecucin del
algoritmo con los datos del problema
3. Muestra los clculos de la iteracin
5. El usuario procesa la informacin
visualizada
4. Muestra el valor del precio de la
particin subptima para la iteracin
realizada
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el valor del precio de la mejor particin posible para la vara
especificando en cuantos trozos se ha de partir la vara.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Multiplicacin de matrices) *
ACTOR SISTEMA
2. Ejecuta una iteracin del algoritmo 1. Muestra el panel de ejecucin del
algoritmo con los datos del problema
3. Muestra los clculos de la iteracin
5. El usuario procesa la informacin
visualizada
4. Muestra el mnimo n de productos
para la iteracin realizada
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el mnimo n de productos y de qu manera se agrupan las matrices
para obtener dicho valor mnimo.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
29
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Subsecuencia comn ms larga) *
ACTOR SISTEMA
2. Ejecuta una iteracin del algoritmo 1. Muestra el panel de ejecucin del
algoritmo con los datos del problema
3. Muestra los clculos de la iteracin
5. El usuario procesa la informacin
visualizada
4. Muestra el n mximo de caracteres
en comn para la iteracin realizada
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra la subsecuencia comn ms larga.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Mochila 01) *
ACTOR SISTEMA
1. Ejecuta una iteracin hacia atrs del
algoritmo
2. Muestra los clculos de la penltima
iteracin
4. El usuario procesa la informacin
visualizada
3. Muestra el beneficio mximo posible
para la penltima iteracin realizada
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
30
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Alineamiento de secuencias) *
ACTOR SISTEMA
1. Ejecuta una iteracin hacia atrs del
algoritmo
2. Muestra los clculos de la penltima
iteracin
4. El usuario procesa la informacin
visualizada
3. Muestra el mnimo n de
operaciones posible para convertir la
subsecuencia X en la subsecuencia
Y para la penltima iteracin
realizada
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Cortar una vara) *
ACTOR SISTEMA
1. Ejecuta una iteracin hacia atrs del
algoritmo
2. Muestra los clculos de la penltima
iteracin
4. El usuario procesa la informacin
visualizada
3. Muestra el valor del precio de la
particin subptima para la penltima
iteracin realizada
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
31
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Multiplicacin de matrices) *
ACTOR SISTEMA
1. Ejecuta una iteracin hacia atrs del
algoritmo
3. Muestra los clculos de la penltima
iteracin
5. El usuario procesa la informacin
visualizada
4. Muestra el mnimo n de productos
para la penltima iteracin realizada
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Subsecuencia comn ms larga) *
ACTOR SISTEMA
1. Ejecuta una iteracin hacia atrs del
algoritmo
2. Muestra los clculos de la penltima
iteracin
4. El usuario procesa la informacin
visualizada
3. Muestra el n mximo de caracteres
en comn para la penltima iteracin
realizada
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
32
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Mochila 01)
ACTOR SISTEMA
1. Ejecuta ver la solucin final 2. Muestra el beneficio ptimo final y
los objetos introducidos en la mochila
3. El usuario procesa la informacin
visualizada
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Alineamiento de secuencias)
ACTOR SISTEMA
1. Ejecuta ver la solucin final
2. Muestra el n mnimo de
operaciones para convertir las
secuencia X en la secuencia Y, y las
operaciones realizadas para llevar a
cabo la conversin.
3. El usuario procesa la informacin
visualizada
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Cortar una vara)
ACTOR SISTEMA
1. Ejecuta ver la solucin final
2. Muestra el valor del precio de la
mejor particin posible para la vara
especificando en cuantos trozos se ha
de partir la vara
3. El usuario procesa la informacin
visualizada
33
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Multiplicacin de matrices)
ACTOR SISTEMA
1. Ejecuta ver la solucin final
2. Muestra el mnimo n de productos
y de qu manera se agrupan las
matrices para obtener dicho valor
mnimo
3. El usuario procesa la informacin
visualizada
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Subsecuencia comn ms larga)
ACTOR SISTEMA
1. Ejecuta ver la solucin final 2. Muestra la subsecuencia comn
ms larga
3. El usuario procesa la informacin
visualizada
Flujo de eventos
Camino bsico del caso de uso Ir al inicio
ACTOR SISTEMA
1. Ejecuta ir al estado inicial
2. Muestra el panel de ejecucin del
algoritmo en su estado inicial (con los
datos del problema)
34
35
6. Diseo de la aplicacin
La aplicacin ha sido desarrollada bajo el lenguaje de programacin Java usando
la librera swing para el desarrollo de la interfaz grfica. La librera swing contiene
una serie de layouts, vase [6], [17] y [18], que nos servirn para distribuir los
elementos que componen la interfaz. De este modo organizaremos las reas de
textos, los botones, y las casillas de datos [22] a lo largo de la composicin de los
paneles.
El entorno de desarrollo empleado ha sido Netbeans.
6.1 Diagramas de clases
Aqu expondremos la distribucin interna de las clases que conforman la
aplicacin desarrollada.
Principalmente hay dos subsistemas que desempean el funcionamiento principal
de la herramienta. Por un lado tenemos el subsistema de clases que permiten al
usuario introducir datos para el problema seleccionado, y por otro lado tenemos el
subsistema de clases responsables de la visualizacin paso a paso del algoritmo
seleccionado. Estos dos subsistemas, anteriormente citados, en comn usan las
clases de ayuda que son las responsables de mostrar al usuario la informacin de
ayuda respectiva de la aplicacin y del problema seleccionado. Finalmente, el
subsistema de entrada de datos se relaciona tambin con la clase que maneja la
carga y guardado de datos en fichero de texto.
A continuacin, la figura 8, nos muestra un resumen de la relacin entre los
subsistemas:
36
Figura 8: Relacin de los subsistemas de la aplicacin
Ahora proseguiremos a entrar en detalle en cada subsistema mostrando mediante
diagramas la relacin existente entre las clases de conforman cada subsistema.
Figura 9: Clases del subsistema de entrada de datos
37
Figura 10: Clases del subsistema de visualizacin paso a paso
38
Figura 11 Clases del subsistema de ayuda
Figura 12 La clase que gestiona la interaccin con ficheros de texto
39
6.2 Diagramas de clases en detalle
En este apartado procederemos a explicar en detalle los diagramas de clases
representados en el apartado anterior.
6.2.1 Subsistema de entrada de datos
EntradaDatosAbstracta: Esta es una clase abstracta que dispone de los mtodos
que permiten el funcionamiento de la interfaz de entrada de datos. La mayora de
mtodos son abstractos, es decir, las clases que heredan de esta clase
implementaran esos mtodos. Los nicos mtodos implementados son atras() y
getIconImage() ya que funcionan igual en todas las interfaces de entrada de
datos.
Funcionamiento bsico de los mtodos:
getIconImage(): este mtodo carga el icono de la aplicacin, vase [4].
comprobarEntradaClickPanel(): este mtodo verifica si hay casillas de
entrada vacas al hacer click en el panel de la interfaz.
siguiente(): este mtodo se activa al hacer click en el botn siguiente de la
interfaz. El propsito de este mtodo es el de llevarnos a la interfaz de
visualizacin del algoritmo siempre y cuando se hayan introducido datos
de entrada adecuados.
atras(): este mtodo se activa al hacer click en el botn atrs de la interfaz.
La labor que desempea este mtodo es el de cerrar la ventana de la
interfaz de entrada de datos.
leerDesdeArchivo(): este mtodo es el responsable de cargar los datos
desde un fichero de texto. Esta funcin se activa cuando el usuario accede
a Archivo -> Cargar datos y selecciona un archivo de texto con los datos
para el problema seleccionado. Para cada problema, se comprueba que el
archivo de texto cargado cumple con el formato de entrada, de tal modo
que si el formato es correcto entonces se cargan los datos en la interfaz.
Si el formato no es correcto saldr un mensaje de error.
guardarEnArchivo(): este mtodo es el responsable de guardar los datos
de entrada introducidos en un archivo de texto. Esta funcin se activa
cuando el usuario accede a Archivo -> Guardar datos y selecciona una
ubicacin donde guardar los datos de entrada. El archivo se guardar
40
correctamente si los datos de entrada introducidos en la interfaz son
correctos. Si no, se mostrar un error.
mostrarAyuda(): este mtodo muestra al usuario la interfaz de ayuda
personalizada en funcin del problema seleccionado cuando se hace click
en el botn de icono de ayuda.
entradadatosSec: esta clase hereda de EntradaDatosAbstracta, por lo que
implementa los mtodos abstractos de dicha clase. Esta clase representa la
interfaz de entrada de datos para los problemas que usan secuencias de
caracteres.
Mtodos asociados a la clase:
seleccionarSecx() y seleccionarSecy(): estos mtodos tienen la funcin de
activar el nmero de casillas de entrada para los caracteres.
nuevoSecx() y nuevoSecy(): estos mtodos activan o desactivan casillas
de entrada, para introducir los caracteres de las secuencias, cuando
detecta que ha habido un cambio en el nmero mximo de caracteres
posible para cualquiera de las secuencias.
entradadatosMochila: esta clase hereda de EntradaDatosAbstracta, por lo que
implementa los mtodos abstractos de dicha clase. Esta clase representa la
interfaz de entrada de datos para el problema de la mochila 0,1.
Mtodos asociados a la clase:
seleccionarNumObjetos(): este mtodo activa las casillas de entrada de los
pesos y beneficios de los objetos.
nuevoNumObjetos(): este mtodo activa o desactiva casillas de entrada
cuando el usuario modifica el nmero mximo de objetos en la mochila
mediante el selector.
activarCapacidad(): El propsito de este mtodo es el de activa el selector
para que el usuario pueda establecer la capacidad mxima de la mochila.
41
entradadatosMultMat: esta clase hereda de EntradaDatosAbstracta, por lo que
implementa los mtodos abstractos de dicha clase. Esta clase representa la
interfaz de entrada de datos para el problema de la multiplicacin encadenada de
matrices.
Mtodos asociados a la clase:
seleccionarLongVector(): este mtodo activa las casillas de entrada del
vector de dimensiones.
nuevaLongVector(): este mtodo actualiza el nmero de casillas de
entrada disponibles cuando el usuario modifica el nmero mximo de
dimensiones del vector mediante el selector.
entradadatosCortarVara: esta clase hereda de EntradaDatosAbstracta, por lo
que implementa los mtodos abstractos de dicha clase. Esta clase representa la
interfaz de entrada de datos para el problema de cortar una vara.
Mtodos asociados a la clase:
seleccionarLongVara(): este mtodo activa las casillas de entrada de los
precios de las longitudes.
nuevaLongVara(): este mtodo actualiza el nmero de casillas de entrada
disponibles cuando el usuario modifica el nmero mximo de longitud de
la vara.
LimitadorCaracteres: esta clase es la responsable de limitar a caracteres
numricos, [33], las casillas de entrada de datos. De este modo se evita que el
usuario introduzca datos errneos y previene de tal manera cualquier
comportamiento anmalo de la herramienta. Esta clase es usada por los
problemas cuyos datos de entrada son nicamente caracteres numricos.
LimitadorCaracteresSec: esta clase tiene una responsabilidad similar a la
anteriormente citada. La diferencia radica en que esta clase limita las casillas de
entrada de datos a caracteres alfanumricos. Esta clase es usada por los
problemas de secuencia de caracteres.
42
Para la limitacin de caracteres de las clases LimitadorCaracteres y
LimitadorCaracteresSec seguiremos el procedimiento descrito en [24]
6.2.2 Subsistema de visualizacin paso a paso
Mochila_01: esta clase engloba el clculo del algoritmo correspondiente al
problema de la mochila 0,1.
AlineacionSecuencias: esta clase engloba el clculo del algoritmo
correspondiente al problema del alineamiento de secuencias.
CutRod: esta clase engloba el clculo del algoritmo correspondiente al problema
de cortar una vara.
MultiplicacionMatrices: esta clase engloba el clculo del algoritmo
correspondiente al problema de la multiplicacin encadenada de matrices.
SCML: esta clase engloba el clculo del algoritmo correspondiente al problema de
la subsecuencia comn ms larga.
Las cinco clases anteriores comparten ciertas caractersticas:
Por un lado en cada iteracin de los respectivos algoritmos guardamos en
un vector el estado de las operaciones realizadas. De este modo, al ir
registrando en cada iteracin las soluciones subptimas, conseguimos
almacenar todas las operaciones que sern visualizadas en la interfaz de
visualizacin paso a paso. Con el mtodo getPap() nos devuelve el vector
con todas las operaciones
Los mtodos mochila01_matriz(), alineacin(), cutrod_tab2(),
multiplicarOptimo(), SCML(), hacen respectivamente los clculos desde el
caso base hasta la solucin final del algoritmo. Todos estos mtodos
devuelven una tabla de soluciones del problema calculado.
Finalmente tenemos el mtodo decisin() que para cada problema nos
desvuelve los resultados de la solucin ptima final. En el caso de la
mochila nos devolvera qu objetos han sido introducidos en la mochila.
En el caso de la alineacin de secuencias nos devolvera qu operaciones
(insercin, borrado, sustitucin) se realizaron para alinear la secuencias.
En el caso de cortar una vara nos devolvera la cantidad de trozos en los
43
que ha sido cortada la vara. En el caso de la multiplicacin encadenada de
matrices, devolvera la agrupacin ptima de multiplicacin de las
matrices. Y por ltimo, en el caso de la subsecuencia comn ms larga,
devolvera una secuencia con los caracteres en comn.
Cuadricula y Solucion: El panel Solucion representa la interfaz grfica sobre la
que se visualizar paso a paso el algoritmo. Este panel est compuesto por una
Cuadricula, la cual representa grficamente la tabla de soluciones del problema
seleccionado y est implementada mediante GridLayout [17]. Tambin contiene
varias reas de texto donde respectivamente va informacin acerca de los datos
del problema, el estado de iteracin y la decisin de la solucin ptima. Finalmente
dispone de una serie de botones que permiten al usuario avanzar y retroceder en
la ejecucin del algoritmo.
SolucionAbstracta: Esta clase abstracta contiene la declaracin de los mtodos
abstractos que tienen como finalidad hacer funcionar la visualizacin por etapas
del algoritmo. Las clases que heredan de sta implementaran los mtodos
abstractos en funcin de las particularidades de cada problema respectivamente.
Esas clases reciben los datos del problema de sus respectivos paneles de entrada
de datos que tienen asociados.
Funcionamiento bsico de los mtodos:
getIconImage(): este mtodo carga el icono de la aplicacin [4].
controlador(): este es un mtodo que se ejecuta en la inicializacin de la
clase y desempea la responsabilidad de activar el funcionamiento de los
botones de la interfaz
avanzar(): este mtodo se activa tanto para cuando el usuario hace click
en el botn de ir hacia adelante como para cuando hace click en el botn
de ir hacia atrs. Recibe como argumento un valor booleano de tal modo
que cuando dicho valor es verdadero entonces se realiza una animacin
de avance en el algoritmo, y cuando el valor el falso entonces sucede el
caso contrario, una animacin de retroceso en el algoritmo. Las
animaciones de avance y retroceso implican la llamada a otros mtodos
que permiten el repintado de las casillas de la tabla de resultados y la
visualizacin de las operaciones realizadas en la iteracin.
44
reiniciar(): este mtodo reinicia la visualizacin paso a paso del algoritmo
a su estado inicial cuando el usuario pulsa el botn de reinicio.
solucin(): este mtodo muestra directamente la visualizacin de la
solucin final del algoritmo cuando el usuario hace el click en el botn
correspondiente a dicha accin.
insercioncolor(): este mtodo es llamado cuando se produce una
animacin de avance. La labor que desempea este mtodo es el de
repintar las casillas que intervienen en el clculo de la solucin subptima
en la etapa en la que nos encontremos.
borradocolor(): este mtodo es llamado cuando se produce una animacin
de avance o de retroceso en la que se necesita borrar el color de una
casilla pintada con anterioridad.
insercinpap(): este mtodo, en cada iteracin, se encarga de mostrar la
visualizacin de las operaciones realizadas en el estado actual de
ejecucin del algoritmo.
mostrarAyuda(): este mtodo tienen el mismo funcionamiento que en la
clase EntradaDatosAbstracta.
6.2.3 Subsistema de ayuda
AyudaTextos: esta clase nicamente contiene los textos de informacin de ayuda
para cada problema.
Ayuda: esta clase representa el panel de la informacin de ayuda. Dicha
informacin de ayuda ser suministrada por la clase AyudaTextos. El mtodo
setText() tiene la finalidad de aadir la informacin de ayuda al rea de texto del
panel.
AyudaFrame: esta clase representa la ventana de la interfaz de informacin de
ayuda y lleva contenida el panel Ayuda.
45
6.2.4 Fichero
La clase Fichero es la que se encarga de gestionar la interaccin con ficheros de
textos. Se encarga tanto de guardar los datos de un problema en un fichero de
texto como de cargarlos desde l. Tanto la lectura como la escritura de datos en
un fichero de texto se realiza mediante el procedimiento explicado en [23].
Funcionamiento bsico de los mtodos:
leer(): a partir de una ruta de fichero dada se leer la informacin contenida
en el fichero y se devolver el valor de dicho contenido.
escribir(): a partir de unos datos especificados en una variable y una ruta
donde guardar esos datos se procede mediante este mtodo a crear un
nuevo fichero de texto [11] (o sobrescribir uno ya existente) con la
informacin dada por la variable de datos.
Los mtodos comprobar() verifican, para cada uno de sus respectivos
problemas, que la informacin leda desde un fichero de texto tiene el
formato adecuado para el problema seleccionado.
ruta(): es un mtodo que funciona a modo preventivo ya que este mtodo
asegura que cuando se vayan a guardar datos en un fichero, ese fichero
acabe teniendo extensin .txt.
46
47
7. Diseo de la interfaz grfica
En este apartado mostraremos como ha sido diseada la interfaz grfica de la
aplicacin. Iremos desde el diseo del panel principal hasta el diseo del panel de
visualizacin de los algoritmos, pasando antes por los paneles de entrada de
datos.
Los colores que se usan en la interfaz han sido obtenidos de [5], y los iconos de
los botones de control corresponden a una librera de iconos [20].
7.1 Diseo del panel principal
La figura 13 muestra el diseo del primer panel cuando se ejecuta la herramienta.
Ese panel principal se compone bsicamente de las opciones para seleccionar
uno de los problemas de programacin dinmica.
La imagen de fondo tiene como propsito representar un contexto educativo, con
los dos alumnos apuntando a la pizarra sobre la que se muestran las opciones a
los problemas.
Los botones de Salir y Siguiente estn precedidos por iconos sencillos que
representan las metforas de cerrar y pasar al siguiente panel respectivamente.
48
Figura 13: Panel principal de la aplicacin
7.2 Diseo de los paneles de entrada
Los paneles de entrada mantienen un diseo unificado, es decir, todas las
pantallas de entrada tienen la misma estructura visual.
El objetivo del diseo de los paneles de entrada es el de establecer un equilibrio
visual entre los elementos que lo forman. Por ello, lo primero era decidir la
distribucin de los elementos principales:
La parte central es el lugar idneo para las casillas de entrada y los selectores ya
que estos son los elementos ms importantes del panel. Luego definimos la
ubicacin de los botones. Para mantener la coherencia respecto al panel principal,
los botones de Atrs y Siguiente estn colocados en la esquina inferior
derecha, precedidos de sus respectivos iconos. En la parte superior ubicaremos,
por un lado en la parte izquierda el botn de Archivo para acceder a las opciones
49
de Cargar datos y Guardar datos, y por otro lado en la parte derecha el icono
de Ayuda. Para conseguir el equilibrio visual, en la parte inferior izquierda aado
el dibujo del alumno mirando hacia las casillas de entrada, as evitamos la
sensacin de espacios vacos en la composicin, o de espacios ms poblados que
otros.
En general el diseo de los paneles de entrada es minimalista, limpio, ya que el
propsito es tener una aplicacin cuyo diseo busque la sencillez. De ah la
eleccin de los colores blanco (de fondo) y negro (de contenido), y uso de
tonalidad gris (para indicar por ejemplo las casillas no habilitadas). El color rojo
rompe intencionadamente con el diseo global ya que es un color usado para
destacar las casillas que no han sido correctamente completadas, es decir, el rojo
es usado a modo de alerta.
Figura 14: Panel de entrada del problema de la mochila
50
Figura 15: Panel de entrada del problema del alineamiento de secuencias
Figura 16: Panel de entrada del problema de cortar una vara
51
Figura 17: Panel de entrada del problema de multiplicacin de matrices
Figura 18: Panel de entrada del problema de la SCML
52
Figura 19: Panel de entrada con casillas en rojo sin completar
7.3 Diseo de los paneles de visualizacin paso a paso
Al igual que en los paneles de entrada, aqu planteamos un diseo unificado para
todos los problemas, ya que todos se resuelven de manera similar por
programacin dinmica. Analizamos el posicionamiento de los elementos grficos
que forman parte de la composicin del panel.
Por un lado tenemos la parte de datos del problema en la zona central superior
del panel. Es necesario que el usuario en todo momento tenga en cuenta los datos
ya que son usados en la visualizacin por etapas del algoritmo.
Justo debajo de los datos del problema tenemos la matriz donde se guardan las
soluciones a los subproblemas. La construccin de esta matriz en cuanto al
nmero de casillas que la forman es variable en funcin de los datos dados del
problema. Las casillas de la matriz toman dos tipos de colores: por un lado,
amarillo indica las casillas tenidas en cuenta para calcular la solucin de un
subproblema; por otro lado, verde indica la casilla en la que se ha resuelto el
53
subproblema. Segn se vaya avanzando las casillas se pintarn y despintarn
hasta llegar a la solucin final.
En la parte derecha tenemos dos reas de texto. La primera, la de la zona superior,
registrar los clculos hechos en cada etapa, clculos que tambin se reflejan en
la matriz de resultados. La segunda rea de texto, que aparece justo debajo de la
anterior, muestra la decisin ptima tomada para la resolucin final al problema.
Respecto a los controles, quedan ubicados en la parte inferior derecha porque
considero que es la zona ms confortable teniendo en cuenta que la matriz y datos
del problema ocupan prcticamente dos tercios del panel de visualizacin.
Finalmente, tambin disponemos de un botn de ayuda en la esquina superior
derecha con el que acceder al panel de ayuda, al igual que en los paneles de
entrada de datos.
En general, esta composicin visual trata de darle importancia a la matriz donde
se almacenan los resultados a los subproblemas, ya que la caracterstica
fundamental de la programacin dinmica recae en el uso de las tablas. El objetivo
es que el usuario capte el concepto de cmo se resuelven este tipo de algoritmos
y esta composicin visual est pensada para facilitarle esa labor.
7.3.1 Visualizacin de la mochila 0,1
Figura 20: Inicializacin de la mochila
54
Figura 21: Visualizacin paso a paso de la mochila
Figura 22: Solucin de la mochila
55
7.3.2 Visualizacin del alineamiento de secuencias
Figura 23: Inicializacin del alineamiento de secuencias
Figura 24: Visualizacin paso a paso del alineamiento de secuencias
56
Figura 25: Solucin del alineamiento de secuencias
7.3.3 Visualizacin de cortar una vara
Figura 26: Inicializacin de cortar una vara
57
Figura 27: Visualizacin paso a paso de cortar una vara
Figura 28: Solucin de cortar una vara
58
7.3.4 Visualizacin de multiplicacin de matrices
Figura 29: Inicializacin de la multiplicacin de matrices
Figura 30: Visualizacin paso a paso de la multiplicacin de matrices
59
Figura 31: Solucin de la multiplicacin de matrices
7.3.5 Visualizacin de la subsecuencia comn ms larga
Figura 32: Inicializacin de la subsecuencia comn ms larga
60
Figura 33: Visualizacin pasos a paso de SCML
Figura 34: Solucin de la subsecuencia comn ms larga
61
7.4 Diseo de los paneles de ayuda
El diseo del panel, que muestra la ayuda respectiva al problema seleccionado,
est tambin unificado para todos los problemas. El objetivo con el diseo es
mostrar de manera sencilla y resumida las caractersticas del problema, como
cargar y guardar los datos en archivo de texto, y la caracterizacin de los colores.
La distribucin de los elementos busca un buen equilibrio de la composicin.
Principalmente colocamos el rea de texto, donde se visualizar la informacin de
ayuda, ocupando dos tercios de panel de manera que se da prioridad a una
visualizacin clara de la informacin de ayuda. El formato con el que est
implementado el contenido de esta rea de texto es mediante html/css para poder
darle el estilo deseado.
Los botones aparecen en el lado izquierdo y debajo de ellos un dibujo de un
alumno mirando hacia el rea de texto. La composicin con el dibujo del alumno,
al igual que en los paneles de entrada, busca transmitir un contexto educativo.
La figura 35 representa cmo se muestra la informacin relativa al problema. Por
un lado tenemos una descripcin breve del problema, y por otro lado las
ecuaciones de resolucin mediante programacin dinmica. Las ecuaciones estn
introducidas mediante una imagen que las contiene y dndole los estilos
necesarios mediante css, para adaptar la imagen al rea de texto.
Figura 35: Informacin del problema
62
La figura 36 muestra el panel con la informacin de cmo cargar y guardar datos
del problema. Se explica el formato que debe tener el contenido de un archivo de
texto para poder cargar la informacin al panel de entrada.
Figura 36: Informacin de cargar y guardar
La figura 37 muestra el panel con la informacin de la caracterizacin de los
colores. Las palabras Rojo, Amarillo, y Verde estn coloreados mediante el
uso de estilos css.
63
Figura 37: Caracterizacin de colores
7.5 Tipografas
La tipografa usada, mediante el uso de las fuentes en Java [14], para los ttulos
de los paneles es Franklin Gothic Book ya que es un tipo de letra que se ve bien.
Respecto a la tipografa del contenido, se hace uso de la tipografa Verdana y
Tahoma, que son un tipo de letra estndar de gran legibilidad. Se ha buscado
una relacin de armona entre la tipografa de los ttulos y la del contenido de tal
manera que favorezca el diseo de la composicin.
64
65
Conclusiones
La herramienta apoya las principales caractersticas de la programacin dinmica
ya que permite visualizar la siguiente informacin:
Visualizacin de la tabla de resultados.
Visualizacin de los clculos subptimos en cada una de las iteraciones.
Visualizacin de la subdivisin de problemas, ya que en cada iteracin se
muestra qu casillas se tienen en cuenta para el clculo del subproblema.
Finalmente, visualizacin de la estrategia final ptima para la resolucin
del problema.
La correcta visualizacin de los algoritmos de los problemas facilita al usuario la
comprensin de los mismos.
Se ha conseguido disear una interfaz minimalista e intuitiva de modo que, el
usuario en todo momento es consciente de las acciones que puede realizar y de
la informacin que se le presenta.
El resultado final es una aplicacin liviana, de fcil ejecucin y manejo.
La herramienta cuenta con lo bsico para mostrar a un usuario el funcionamiento
de un algoritmo de programacin dinmica. Sin embargo, se pueden presentar las
siguientes lneas de trabajo:
Ampliar el nmero de problemas de la aplicacin.
Aadir la posibilidad de exportar resultados.
Hacer que la aplicacin sea adaptativa a toda clase de pantallas, es decir,
que el tamao de la ventana se adapte al tamao del monitor.
Hacer un estudio en profundidad sobre la usabilidad de la herramienta.
Probar la eficacia de la herramienta en un contexto educativo.
Este trabajo me ha exigido tanto a nivel tcnico como a nivel artstico. He mejorado
mi capacidad de abstraccin, y tambin he puesto a prueba mi creatividad. El
desarrollo de esta herramienta me ha permitido adentrarme de manera ms
profunda en el mundo de las interfaces grficas de usuario, y al mismo tiempo he
ampliado mis conocimientos en Java. He puesto atencin a todos los detalles
grficos de la aplicacin, para que quedase todo bien definido, y esto me ayuda
para seguir en esta misma lnea en futuros trabajos. En general ha sido una
experiencia gratificante en la cual he podido mostrar mis mejores cualidades.
66
67
Bibliografa
[1] AlgoViz. Obtenido de http://www.algoviz.net/
[2] Alineamiento de secuencias. Obtenido de
http://es.wikipedia.org/wiki/Alineamiento_de_secuencias#Alineamiento_m
.C3.BAltiple_de_secuencias
[3] BlueJ. Obtenido de http://www.bluej.org/about.html
[4] Cambiar cono a un JFrame. Obtenido de
http://www.apuntesdejava.com/2008/11/cambiar-icono-un-jframe.html
[5] Colores para la interfaz. Obtenido de http://www.colourlovers.com/
[6] Cmo usar BoxLayout. Obtenido de
http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html
[7] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Clifford, S. (2001).
Introduction to algorithms (2nd ed.).
[8] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Clifford, S. (2009).
Introduction to algorithms (3rd ed.).
[9] Cortar una vara (1). Obtenido de
http://www.radford.edu/~nokie/classes/360/dp-rod-cutting.html
[10] Cortar una vara (2). Obtenido de http://www.geeksforgeeks.org/dynamic-
programming-set-13-cutting-a-rod/
[11] Crear un fichero en Java. Obtenido de http://lineadecodigo.com/java/crear-
un-fichero-en-java/
[12] Cuadros de dilogo en Java. Obtenido de http://ayuda-
java.blogspot.com.es/2007/07/cmo-hacer-cuadros-de-dilogo-simples.html
[13] Debdi, O. (2014). Aprendizaje interactivo de algoritmos voraces: del enfoque
individual al colaborativo. Tesis doctoral.
[14] Fuentes en Java. Obtenido de
http://docs.oracle.com/javase/6/docs/api/java/awt/Font.html
[15] GraphsJ. Obtenido de http://gianlucacosta.info/software/graphsj/
[16] GreedEx. Obtenido de http://www.lite.etsii.urjc.es/greedex/
[17] GridLayout API. Obtenido de
http://download.java.net/jdk7/archive/b123/docs/api/java/awt/GridLayout.h
tml#GridLayout%28int,%20int,%20int,%20int%29
[18] GroupLayout API. Obtenido de
http://docs.oracle.com/javase/6/docs/api/javax/swing/GroupLayout.Group.
html
[19] Guerequeta, R. V. (2000). Tcnicas de diseo de algoritmos (2 ed.).
[20] Iconos para la interfaz. Obtenido de https://www.iconfinder.com/
68
[21] Jeliot. Obtenido de http://cs.joensuu.fi/jeliot/index.php
[22] JTextField API. Obtenido de
http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html
[23] Lectura y Escritura de Ficheros en Java. Obtenido de
http://chuwiki.chuidiang.org/index.php?title=Lectura_y_Escritura_de_Fich
eros_en_Java
[24] Limitar los caracteres de un JTextField. Obtenido de
http://www.chuidiang.com/java/ejemplos/JTextField/limita_caracteres.php
[25] Mtodo para obtener un recurso. Obtenido de
http://www.herongyang.com/JVM/ClassLoader-getSystemResource-
Method-Find-File.html
[26] Morata Palacios, M. (2010). Asistente interactivo para el aprendizaje de
algoritmos enmarcados en la programacin dinmica. Proyecto Fin de
Grado.
[27] Prez Carrasco, A. (2011). Sistema Generador de Animaciones Interactivas
para la Docencia de Algoritmos Recursivos. Tesis doctoral.
[28] Problema de la mochila. Obtenido de
http://es.wikipedia.org/wiki/Problema_de_la_mochila
[29] Rajala, T., Laakso, M.-J., Kaila, E., & Salakoski, T. ViLLE. Obtenido de
http://www.jite.informingscience.org/documents/Vol7/JITEv7IIP015-
032Rajala394.pdf
[30] SRec. Obtenido de http://www.lite.etsii.urjc.es/srec/
[31] Subsecuencia comn ms larga. Obtenido de
http://xcodigoinformatico.blogspot.com.es/2012/09/subsecuencia-comun-
mas-larga-con.html
[32] Urquiza Fuentes, J., & Velzquez Iturbe, J. . (2009). A Survey of
Successful Evaluations of Program Visualization and Algorithm Animation
Systems.
[33] Validar si un dato es numerico en Java. Obtenido de
http://lineadecodigo.com/java/validar-si-un-dato-es-numerico-en-java/
[34] Ware, C. (2004). Information Visualization: Perception for Design (2nd ed.).