CC30A Algoritmos y Estructuras de Datos

Prof. Rodrigo Paredes

Tarea 5 (recuperativa)

Objetivos

El objetivo de esta tarea es estudiar el costo en tiempo y memoria que se necesita para construir un t-spanner. Se utilizarán grafos euclidianos no dirigidos completos representados con matriz de adyacencia y el algoritmo básico de construcción de t-spanners que se muestra en el documento adjunto.
 

Descripción de la tarea

Para los fines de esta tarea, un grafo euclidiano no dirigido completo es un conjunto de puntos (x,y) dentro del cuadrado unitario [0,1]×[0,1], en donde los arcos del grafo representan la longitud entre los extremos del arco y se consideran todos los arcos entre todos los nodos del grafo. El costo de un arco es igual a la distancia euclidiana entre los extremos (esto es, el costo de un arco es igual a su longitud).

Definición de t-spanner. Considere un grafo G = G(V, A) formado por un conjunto de vértices V y un conjunto de arcos con pesos no negativos A. En este grafo es posible determinar los caminos más cortos entre todos los pares de vértices. Este problema se puede resolver utilizando |V| iteraciones del algoritmo de cálculo de caminos más cortos (Dijkstra), considerando todos los vértices como nodo de origen; o con el algoritmo de Floyd. Un t-spanner es un grafo G'  = G' (V, E); E subconjunto de A (note que utiliza el mismo conjunto de vértices y un subconjunto de los arcos), construido a partir del grafo G original, considerando una versión relajada de la condición de encontrar los caminos más cortos entre pares de nodos. La principal propiedad de un t-spanner es que garantiza que el costo del camino entre cualquier par de vértices del grafo G' es a lo sumo t veces la distancia del camino mínimo obtenido en el grafo original G, lo que se conoce como condición de t-spanner. Note que al menos necesita |V| - 1 arcos, para que el grafo G' sea conexo y que a lo más necesita insertar los A arcos del grafo original G. Mayor información se muestra en el documento adjunto.

Usted debe escribir un programa tspanner  que pueda ser ejecutado como:

        java tspanner [-v] n t nreps
donde n es el número de nodos del grafo, t el factor de "estiramiento" de las distancias y nreps el número de veces que se debe repetir el experimento.

El programa debe repetir nreps veces lo siguiente:

Al terminar, el algoritmo debe imprimir el tiempo de construcción del t-spanner y la cantidad de arcos del t-spanner para cada repetición, y los valores promedio de tiempo y arcos para las nreps repeticiones. Si se especifica la opción -v (verboso), el programa debe comenzar escribiendo la lista de todos los arcos del árbol mínimo, de a uno por línea. Cada arco se imprime indicando las coordenadas de sus extremos y la distancia entre ellos: x1 y1 x2 y2 dist. (Esta opción le permitirá examinar el t-spanner resultante y depurar su programa). Por ejemplo: 0.2 0.2 0.5 0.6 0.5.

Pruebas

Utilizando este programa, usted debe realizar un estudio para tratar de determinar de qué manera varía el tiempo de construcción promedio del t-spanner y la cantidad de arcos promedio en función de la cantidad de nodos n. Proponga un modelo de ajuste en función de la cantidad de nodos del grafo.

Utilice nreps = 5, t = 1.5, 2.0 y 2.5 y n = 100, 200, 300, 400 y 500.

Restricciones

Hints

Ponderación

El informe equivale a un 50% de la nota de tarea.
El código equivale a un 50% de la nota de tarea.

Entrega de la tarea

 
La entrega de la tarea debe incluir un informe escrito donde se describa y documente el programa realizado, y se incluyan ejemplos de entradas y salidas.

El informe debe ser entregado en la Secretaría Docente de Computación (donde Magaly, tercer piso Edificio de Computación, hasta las 17:00 horas del último día de plazo), y el código fuente (junto a un archivo README que explique como compilar) debe ser enviado utilizando el Cursomático de cc30a.

El contenido del informe debe seguir la siguiente pauta común para todas las tareas:
 

  • Portada