• No results found

Attuning to Memory: Recording Stories of Lived Experience as a

B. Dream Groups: Communal Spiritual Practice

I. Attuning to Memory: Recording Stories of Lived Experience as a

Como se ha dicho al principio de este capítulo, GRAPHs ha sido diseñado para ser un sistema extensible, por lo que su desarrollo es un proceso continuo, no sólo de integración de nuevos algoritmos, sino de sustitución de algunos de los algoritmos por nuevas versiones que mejoren sus funcionalidades. Hasta el momento han sido desarrollados por alumnos de la Facultad de Informática, bajo la dirección y supervisión de la autora de este trabajo y su directora, los siguientes algoritmos:

3.7.1. Algoritmos de búsqueda en profundidad y en anchura

Implementados por Sonia Escribano Blanco, se trata de variantes de los conocidos DFS (Deep First Search) y BFS (Breadth First Search). Cada uno de los dos algoritmos tiene dos variantes, una “estricta” donde es obligatorio elegir los vértices según el orden lexicográfico de sus etiquetas, y otra “no estricta” que elimina esta restricción, permitiendo comenzar por cualquier vértice del grafo y seleccionar en cada paso cualquier adyacente no seleccionado anteriormente. Los cuatro algoritmos presentan dos niveles de dificultad cada uno.

3.7.2. Algoritmos de caminos de longitud mínima

3.7.2.1. Algoritmo de Dijkstra

Creado por Dijkstra en 1959 (ver[25]), este algoritmo construye un árbol de caminos de longitud mínima desde un vértice origen a todos los demás. Cuando se fija un nodo final, el algoritmo termina al encontrar la distancia y un camino de longitud mínima del origen a ese nodo. Es, probablemente, el algoritmo más utilizado de la teoría de grafos, aunque no puede ser aplicado a grafos o digrafos con pesos negativos. La implementación disponible en la actualidad (ver Figuras 3.2.3 y 3.2.4), desarrollada por Diana López Rodríguez, se ejecuta sólo sobre grafos no dirigidos (aunque el algoritmo puede aplicarse también a digrafos), tiene tres niveles de simulación y una ejecución directa. Todos ellos permiten la simulación del algoritmo con y sin nodo final. Está previsto desarrollar una nueva implementación que pueda ejecutarse también sobre digrafos.

3.7.2.2. Algoritmo de Bellman – Ford

Este algoritmo, al igual que el de Dijkstra, encuentra la distancia y un camino de longitud mínima entre un vértice y todos los demás en un digrafo con pesos. Su coste computacional es bastante superior al de Dijkstra pero puede trabajar con aristas de peso negativo. Su nombre se debe a que fue publicado casi simultáneamente por Richard Bellman en 1958

Primera parte. Herramientas informáticas de ayuda al aprendizaje de algoritmos y conceptos matemáticos

- 36 -

(ver[10]) y Lester Ford en 1956 (ver[34]). Además, Edward F. Moore también publicó el mismo algoritmo en 1957 (ver[67]), por lo que a veces se le llama algoritmo de Bellman– Ford–Moore. El simulador (ver Figura 3.7.1) fue implementado por Alexandra Provencio Horcajo y dispone de tres niveles de dificultad, además de la resolución directa.

Figura 3.7.1. Simulación del algoritmo de Bellman-Ford.

3.7.2.3. Algoritmo de Floyd – Warshall

Este algoritmo encuentra la distancia y un camino de longitud mínima entre todos los pares de vértices del grafo, en un digrafo con pesos, sean éstos positivos o negativos. Fue publicado por Robert Floyd en 1962 (ver[33]) y la estrategia que utiliza está basada en la del algoritmo de Warshall para encontrar el cierre transitivo de un grafo, publicado por Stephen Warshall también en 1962 (ver [135]). El simulador integrado en GRAPHs fue implementado por Marta Rodríguez González y dispone de tres niveles de dificultad, además de la resolución directa.

3.7.3. Algoritmos de coloración

3.7.3.1. Algoritmo (DSATUR) de Brélaz

Este algoritmo, basado en el grado de saturación de un vértice (número de colores utilizados en los vértices adyacentes), obtiene una coloración de los vértices de un grafo. Desarrollado por Daniel Brélaz en 1979 [16], sólo garantiza una coloración utilizando el mínimo número de colores posible en el caso de grafos bipartidos aunque, en general, el

Capítulo 3. GRAPHs descripción y características

número de colores utilizados por este algoritmo se acerca razonablemente a este mínimo. El simulador fue implementado por Francisco Javier Rubio Alguacil y dispone de tres niveles de dificultad y una ejecución directa, cuya única interacción con el usuario es la elección del siguiente vértice a colorear en caso de empate (ver Figura 3.7.2).

Figura 3.7.2. Simulación del algoritmo de Brélaz. 3.7.3.2. Algoritmos básicos de coloración

Javier Teixeira Quevedo ha implementado tres algoritmos básicos de coloración secuencial de vértices. Al contrario que el algoritmo de Brélaz, que colorea en cada iteración el vértice con mayor grado de saturación estos algoritmos colorean teniendo en cuenta únicamente un orden predefinido en los vértices. El primero y más básico de estos tres algoritmos colorea según una ordenación cualquiera de los vértices, el segundo basándose en la selección en cada paso del vértice de mayor grado, y el tercero escogiendo el último el de menor grado. Cada uno de ellos posee dos niveles de dificultad.

3.7.4. Otros algoritmos de grafos

3.7.4.1. Código de Prüfer

En matemática combinatoria, la secuencia de Prüfer de un árbol etiquetado (obtenida mediante este algoritmo) es una secuencia única asociada al árbol. En 1918 [78] Heinz Prüfer describió este algoritmo y utilizó el número de códigos distintos que podían obtenerse como resultado de aplicarlo para probar que el número de árboles etiquetados distintos con n vértices es 𝑛𝑛−2 (fórmula de Cayley). Dentro del entorno GRAPHs, Javier

Primera parte. Herramientas informáticas de ayuda al aprendizaje de algoritmos y conceptos matemáticos

- 38 -

Teixeira Quevedo ha implementado, tanto el simulador de la obtención del código a partir del árbol etiquetado, como la aplicación que simula la reconstrucción del árbol etiquetado a partir de un código dado (ver Figura 3.7.3), con dos niveles de dificultad cada uno.

Figura 3.7.3. Código de Prüfer. Construcción del árbol a partir del código.

3.7.4.2. Algoritmo de Havel y Hakimi

Algoritmo, desarrollado por Havel (1955) [45] y Hakimi (1962) [44], que determina si una secuencia no creciente de enteros no negativos es o no gráfica, es decir, si existe un grafo cuya secuencia de grados es la secuencia dada. En caso afirmativo, también construye un grafo que cumple esa condición. Dentro del entorno GRAPHs, Javier Teixeira Quevedo ha implementado también el simulador de este algoritmo con dos niveles de dificultad.

3.7.5. En fase avanzada de desarrollo: algoritmos de árbol generador de peso mínimo

3.7.5.1. Algoritmo de Kruskal

Este algoritmo, creado por Kruskal en 1956 [57], construye un árbol generador de peso mínimo añadiendo, en cada paso, la arista de peso mínimo que no forma ciclo con las anteriores. El simulador, que está siendo implementado por Francisco Javier Rubio Alguacil, dispone de tres niveles, el primero implementa el algoritmo básico y los otros dos utilizan

Capítulo 3. GRAPHs descripción y características

otra versión del algoritmo en la que las estructuras de datos han sido mejoradas para disminuir la complejidad computacional del algoritmo (ver Figura 3.7.4).

3.7.5.2. Algoritmo de Prim

Este algoritmo, creado por76], construye un árbol generador de peso mínimo añadiendo, en cada paso, la arista de peso mínimo que une uno de los vértices que ya han sido añadidos al árbol con uno de los que aún no han sido añadidos. El simulador, que está siendo implementado por Francisco Javier Rubio Alguacil, dispone de tres niveles, el primero implementa el algoritmo básico y los otros dos utilizan otra versión del algoritmo en la que las estructuras de datos han sido mejoradas para disminuir la complejidad computacional del algoritmo.

Figura 3.7.4. Algoritmo de Kruskal. Nivel alto.

3.8.

Desarrollo futuro del entorno y utilización en el