CC30A Algoritmos y Estructuras de Datos

Prof. Rodrigo Paredes

Tarea 4

Fecha de entrega: jueves 21 de noviembre. No se aceptarán tareas atrasadas.


Objetivos

El objetivo de esta tarea es estudiar el costo en tiempo que se necesita para construir el árbol cobertor mínimo en función de la densidad de arcos del grafo. Se utilizarán grafos euclidianos no dirigidos representados con listas de adyacencia y el algoritmo Kruskal visto en clases.
 

Descripción de la tarea

Para los fines de esta tarea, un grafo euclidiano no dirigido 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 los arcos considerados en el grafo se eligen al azar. 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). Vamos a considerar un conjunto de arcos escogidos al azar de tamaño variable, comenzando con un grafo con pocos arcos hasta llegar al grafo completo; el tamaño del conjunto de arcos estará dado por la densidad de arcos. Un grafo con densidad 0.01 tiene 0.01*n(n-1)/2 arcos, es decir, tiene el 1% del total de arcos posible; un grafo con densidad 1.0 tiene 1.0*n(n-1)/2 arcos, es decir, es el grafo completo. Para medir como afecta la densidad al costo en tiempo se utilizará la representación de lista de adyacencia. Para no obtener resultados "inesperados", nos tenemos que asegurar que el grafo es conexo.

Usted debe escribir un programa acm (por "árbol cobertor mínimo") que pueda ser ejecutado como:

        java acm [-v] n densidad nreps
donde n es el número de nodos del grafo, densidad es la densidad de arcos del grafo (un valor en el rango [0.01, 1.00]) 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 valor promedio del tiempo de construcción del árbol. 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 árbol 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 árbol en función de la densidad para un valor de n fijo en 1000, es decir, un grafo con 1000 nodos (si tienen problemas de memoria realicen las pruebas con 500 nodos e indiquen esto en el informe). Proponga un modelo de ajuste en función de la cantidad de arcos del grafo, se espera que a menor densidad la construcción del árbol cobertor mínimo sea más rápida.

Utilice nreps = 10 y densidad = 0.01, 0.02, 0.04, 0.06, 0.08, 0.10, 0.20, 0.40, 0.60, 0.80, 1.00.

Bonus

Analice como varía el peso del árbol y determine a partir de qué densidad el peso del árbol se "estabiliza". Indique el criterio de estabilización (por ejemplo, que la variación del costo sea menor a e%, o algo que sea "razonable") y muestre en un gráfico la variación del peso del árbol versus la densidad de arcos del grafo. Refine el gráfico en el rango en que se "estabiliza" el peso del árbol (esto es, una vez detectado el rango [a,b] en que estabiliza el peso del árbol, realice mediciones del peso dentro del rango).

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