Tarea 5: Grafos de Precedencia

Anuncio
Universidad Simón Bolı́var
Departamento de Computación y Tecnologı́a de la Información
CI-2693 Laboratorio de Algoritmos III
Trimestre Septiembre-Diciembre de 2008
Tarea 5: Grafos de Precedencia
1.
Descripción de la actividad
El objetivo de la tarea 5 es el estudio de los Grafos de Preferencias, por medio de la implementación
de algoritmos relacionados con la Planificación de Proyectos. Un grafo de precedencia es grafo dirigido
sin circuitos.
La primera actividad es determinar si el grafo que se suministra como entrada posee o no circuitos. En
caso de poseer un circuito su aplicación debe indicarlo con un mensaje y luego debe finalizar su ejecución.
La detección de circuitos es explicada en el capı́tulo 4 (IV.2.6.2) del libro de Meza y Ortega [1].
Se tiene que un proyecto es representado por un grafo de precedencia donde los vértices corresponden
a las actividades a realizar, estableciéndose que un arco que va desde un vértice vi hasta un vértice vj ,
indica que la actividad i precede a la actividad j. Cada uno de los arcos posee un costo cij , el cual
representa la mı́nima cantidad de tiempo necesario entre las actividad i y la actividad j. El tema de la
planificación de proyectos es tratado en el capı́tulo 5 (V.5.4) del libro Grafos y Algoritmos [1]. Se requiere
determinar el tiempo mı́nimo necesario para completar un proyecto dado. Para ello es necesario calcular
el camino de costo máximo entre el vértice que representa el comienzo del proyecto y el vértice que
representa su finalización. Para determinar el camino de costo máximo entre un par de vértices se debe
abstener de implementar el algoritmo de Bellman. El intervalo de tiempo de comienzo de una actividad,
para el cual el proyecto no sufrirı́a ningún retraso, viene dado por el [T EC(i), T AC(i)]. Para cada una
de las actividades i, se desea calcular su holgura (T AC(i) − T EC(i)).
2.
Especificación de la Entrada/Salida
2.1.
Entrada
Debe crear un programa llamando PlanProyecto.java que se ejecutará de la siguiente manera:
>java PlanProyecto <entrada>
Donde entrada es el nombre del archivo donde se define el proyecto con el siguiente formato:
n
//
m
//
nodo_ini_1 nodo_fin_1 costo_1 //
.
.
.
nodo_ini_m nodo_fin_m costo_m
nodo_inicio nodo_fin
//
2.2.
número de nodos
número de arcos
m arcos (nodo inicial, nodo final y costo)
actividad inicial y actividad final
Salida
La salida deberá mostrar los siguientes datos:
El tiempo mı́nimo para completar el proyecto
El camino de costo máximo desde la actividad inicial hasta la actividad final (actividades crı́ticas)
Para cada una de las actividades i mostar su holgura (T AC(i) − T EC(i))
1
2.3.
Ejemplo
2.3.1.
Archivo de entrada
12
16
0 1 0
0 10 0
1 2 3
1 3 3
2 4 2
2 5 2
3 5 5
4 11 7
5 6 1
5 7 1
7 9 2
6 8 6
6 9 6
8 11 4
9 11 3
10 11 1
0 11
2.3.2.
Salida
Tiempo minimo de duracion del proyecto: 19
Ejecucion de las actividades criticas: 0 1 3 5 6 8 11
Actividad Holgura
-----------------0 1 0
2 3
3 0
4 7
5 0
6 0
7 5
8 0
9 1
10 18
11 0
Referencias
[1] M. Ortega and O. Meza. Grafos y Algoritmos. Equinoccio, 2006.
2
Descargar