Sunteți pe pagina 1din 12

UNIVERSIDAD NACIONAL MAYOR DE SAN

MARCOS
Universidad del Perú, DECANA DE AMÉRICA
Facultad de Ingeniería de Sistemas e Informática

Algoritmica 3

Análisis, Diseño e Implementación de un Planificador de Tareas


Docente : MSc Ing Yudi Guzmán Monteza
Integrantes :
 Tapia Cruz, Junior Guido
 Vasquez Razo, Richard
 Zegarra Villanueva, Juan Diego
 Colan Torres, Manuel
 Samir
LIMA-PERÚ
2019
ÍNDICE

1.-Definicion del problema

1.1 Planteamiento………………………………………………….

2. Análisis del algoritmo

2.1 Datos de Entrada……………………………………….

2.2 Condiciones o supuestos del Algoritmo………………..

2.3 Datos de Salida………………………………………….

2.4 Análisis de Complejidad……….………………………..

3. Diseño del algoritmo

3.1 ……………………………………………

3.2 ……………………. …………………….

4. Codificacion

5. Prueba y depuración

6. Documentacion externa

6. Referencias bibliograficas
1. DEFINICIÓN DEL PROBLEMA:

1.1. PLANTEAMIENTO

Como actuales estudiantes de la facultad de Ingeniería de Sistemas, una de las


mayores preocupaciones más comunes que solemos percibir a inicio de cada
ciclo académico es la toma de decisión de los cursos en los que nos
matriculemos con la condición de abarcar la mayor cantidad de cursos que el
creditaje nos permita y de percibir un ahorro de tiempos de espera entre clase
y clase.
En este presente proyecto hemos decidido abarcar una de las tantas
aplicaciones del algoritmo de Dijkstra, como consecuencia los nodos de
entrada para este algoritmo serán los cursos disponibles según la situación del
estudiante con su respectivo horario, el resultado de la implementación de
dicho algoritmo nos dará el camino más corto de cursos con las que perdemos
menos tiempo de espera a la semana abarcando la mayor cantidad de estos
posibles.
Consideramos que este proyecto será provechoso para cualquier estudiante
que desee un resultado inmediato acerca del mayor aprovechamiento de
tiempo en lo que respecta a los cursos en los que desea matricularse en un
semestre académico.
2. ANALISIS DEL ALGORITMO:

2.1 DATOS DE ENTRADA

Los datos de entrada necesarios para el correcto funcionamiento serán:

 Nombre/ID del curso


 Créditos del curso
 Horario del curso

Observación: En caso de que un mismo curso esté disponible en diferentes


horarios simplemente debemos agregar otro nodo con los datos
correspondientes.

2.2 CONDICIONES O SUPUESTOS DEL ALGORITMO

Las condiciones para el correcto funcionamiento del algoritmo Dijkstra serán


las siguientes:

 No puede ni debe haber cruce de horarios entre cursos matriculados.


 Los “pesos” requeridos por el algoritmo se tomarán de los valores de las
aristas mas no del creditaje de cada curso.
 El camino mínimo (con las restricciones anteriores) dará el mayor
abarque de procesos y de manera análoga el camino máximo
determinará el menor abarque.
2.3 DATOS DE SALIDA

Como datos de salida el estudiante obtendrá el camino más corto de tiempos


de espera entre cursos con la mayor cantidad de estos disponibles para
matricularse en un semestre dado.

2.4 ANALISIS DEL ALGORITMO

La complejidad computacional del algoritmo de Dijkstra se puede calcular


contando las operaciones realizadas:

 El algoritmo consiste en n-1 iteraciones, como máximo. En cada


iteración, se añade un vértice al conjunto distinguido.
 En cada iteración, se identifica el vértice con la menor etiqueta entre los
que no están en 𝑆𝑘 . El número de estas operaciones está acotado por n-
1.
 Además, se realizan una suma y una comparación para actualizar la
etiqueta de cada uno de los vértices que no están en 𝑆𝑘 .
 Luego, en cada iteración se realizan a lo sumo 2(n-1) operaciones.

Entonces:
Teorema: El algoritmo de Dijkstra realiza O(𝑛2 ) operaciones (sumas y
comparaciones) para determinar la longitud del camino más corto entre dos
vértices de un grafo ponderado simple, conexo y dirigido con n-vértices.
PEQUEÑO EJEMPLO DIDÁCTICO DE DIJKSTRA APLICADO A
NUESTRO CASO

Previamente hay que dejar claro que los nodos podrán tener dos tipos de
propiedades, "TiempoAcumulado" y "CursoAntecesor".

"TiempoAcumulado" corresponde a la suma de tiempos entre nodos. En el


ejemplo mostrado a continuación se muestra en diversas ocasiones.
"CursoAntecesor" corresponde al nodo que precede al nodo que ahora mismo
se está estudiando con menor tiempo acumulado.
A efectos de la explicación se utilizará el grafo que se muestra en la siguiente
figura, y se buscará el camino óptimo para conseguir llevar la máxima
cantidad de cursos posibles desplazándonos del nodo 1 hasta el nodo 5:}

 Los valores dentro de los nodos representan los cursos: curso 1=1, curso
2=2, y así sucesivamente dependiendo de cuantos cursos haya.
 Y los valores de las aristas representan el espacio de tiempo que hay
entre curso y curso en unidades de tiempo.
PRIMERA ITERACIÓN. Se selecciona un nodo de inicio, en este caso será
el nodo 1(curso 1), y se iniciaran las dos variables de las cuales se ha hablado
antes.
TiempoAcumulado = 0; (puesto que acaba de empezar la iteración)
CursoAntecesor = Nulo; (puesto que no le precede ningún nodo o curso)

Como puede comprobarse en la figura anterior, se ha marcado con color verde


el nodo inicial, y consecuentemente se marcarán también los nodos se hayan
tomado como nodo central. Y por consiguiente estos nodos no volverán a ser
visitados.

Por otro lado, se marcará en el ejemplo (de color lila) las dos propiedades
comentadas con anterioridad. Siguiendo el siguiente patrón:
[TiempoAcumulado, CursoAntecesor].
SEGUNDA ITERACIÓN. Se marcarán todos los nodos adyacentes al nodo 1
inicializando sus variables siguiendo el siguiente patrón:

TiempoAcumulado = [TiempoAcumulado del nodo anterior(en este caso el


nodo 1) ] + [tiempo de la arista que los une]
CursoAntecesor = el nodo del cual proviene.
De esta forma:
Para nodo 2
TiempoAcumulado(nodo 2) = 0 + 2 = 2
CursoAntecesor = 1
Para nodo 3
TiempoAcumulado (nodo 3) = 0 + 5 = 5
CursoAntecesor = 1
Para nodo 4
TiempoAcumulado(nodo 4) = 0 + 3 = 3
CursoAntecesor = 1
TERCERA ITERACIÓN. En esta ocasión, el nodo con menor tiempo
acumulado es el nodo 2. Así que se repetirá el proceso sin volver a comprobar
los nodos que ya se han utilizado previamente (en verde).

Para nodo 3
nuevoTiempoAcumulado (nodo 3) =2 + 4 = 6
TiempoAcumulado(nodo3) < nuevoTiempoAcumulado(nodo3)
TiempoAcumulado(nodo3) = 5
CursoAntecesor = 1
Para nodo 4
nuevoTiempoAcumulado (nodo4) = 2 + infinito = infinito
TiempoAcumulado (nodo4) < nuevoTiempoAcumulado (nodo4)
TiempoAcumulado (nodo4) = 3
CursoAntecesor = 1
CUARTA ITERACIÓN. En este caso el nodo 4 es el nodo de menor peso
acumulado, por lo que se centra el proceso en él. (se pinta de verde para
señalar que ya se ha comprobado)

Para nodo 3
nuevoTiempoAcumulado (nodo 3) =3 +1 = 4
TiempoAcumulado (nodo3) > nuevoTiempoAcumulado (nodo3)
TiempoAcumulado (nodo3) = nuevoTiempoAcumulado (nodo3) = 4
CursoAntecesor = 4
Para nodo 5
PesoAcumulado(nodo5) = 3 + 6 = 9
CursoAntecesor = 4
QUINTA ITERACIÓN. En este caso el nodo 3 es el nodo de menor peso
acumulado, por lo que ahora se centra el proceso en él. (se pinta de verde para
señalar que ya se ha comprobado)

Para nodo 5
nuevoTiempoAcumulado (nodo 5) =4 +1 = 5
TiempoAcumulado (nodo5) > nuevoTiempoAcumulado (nodo5)
TiempoAcumulado (nodo5) = nuevoTiempoAcumulado (nodo5) = 5
CursoAntecesor = 3
SOLUCIÓN
De este modo se da por finalizada la exploración del grafo, puesto que todos
los nodos han sido comprobados.

En la situación del grafo del ejemplo, el coste total óptimo en trasladarse des
del nodo 1 al nodo 5 es de 5u (5 unidades de tiempo). Y el camino óptimo
teniendo en cuenta el nodo antecesor en cada situación es 1-4-3-5 que
representan los cursos los cuales se han tomado en cuenta que son:

Curso 1, curso 4, curso 3 y curso 5.

S-ar putea să vă placă și