You are on page 1of 7

2013

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

[PRCTICAS DE METOLOGA]
En este documento se presentarn las soluciones a los problemas de prcticas de la asignatura de Metodologa de la Programacin, de 2 Curso del Grado de Informtica, en la UCLM.

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

Metodologa de la Programacin

ndice
A. a) b) c) B. a) b) C. a) b) D. Algoritmos Voraces ............................................................................................................... 2 Descripcin de los algoritmos voraces .............................................................................. 2 Elementos caractersticos ................................................................................................. 2 Esbozo del coste computacional de un algoritmo voraz genrico .................................... 3 Descripcin del problema voraz: Planificacin de Rutas ...................................................... 4 Identificando los elementos caractersticos...................................................................... 4 Justificando por qu el problema es resoluble mediante Dijkstra.................................... 4 Definir un esbozo del algoritmo en pseudocdigo, indicando su orden de complejidad..... 5 Esbozo del algoritmo en pseudocdigo ............................................................................ 5 Coste computacional ......................................................................................................... 5 Bibliografa ............................................................................................................................ 6

~1~

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

Metodologa de la Programacin

A. Algoritmos Voraces
a) Descripcin de los algoritmos voraces
Los algoritmos voraces son aquellos que tratan de resolver un problema eligiendo ciertos elementos de una lista de candidatos que cumplan las restricciones dadas por dicho problema. A este subconjunto de elementos se le llama solucin factible. Esta metodologa de resolucin de problemas suele pretender maximizar o minimizar cierta funcin que resuelve el problema unvocamente. Estos algoritmos suelen utilizarse para resolver problemas de optimizacin que no requieran conocer las circunstancias del programa en el futuro para resolverlo. Adems, la metodologa de estos algoritmos es clara: Recorre la lista de elementos segn una ordenacin determinada y decide si ese elemento es vlido para la solucin del problema o no. Despus de tomar esa decisin, el algoritmo nunca va a volver a preguntarse por ese elemento, de ah que se defina como algoritmo voraz, ya que nunca se pregunta por el estado del programa en un futuro, toma su decisin con los datos que tiene hasta ese momento determinado y esa decisin es definitiva. Existe un tipo de algoritmo que podramos denominar pseudovoraz, denominado algoritmo semivoraz, que consiste en la misma metodologa que un algoritmo propiamente voraz, salvo en un aspecto: El programa decide si un elemento en cuestin es vlido o no, y si as lo fuera, es posible que, tras continuar con el anlisis del resto de elementos, decida que un elemento que en un principio decidi que era vlido, en estas nuevas condiciones s lo sea, y lo descarte de la solucin. Sin embargo, si un elemento lo descarta, es descartado definitivamente, al igual que ocurre en un algoritmo voraz. De esta manera, un problema solo podr ser resuelto por voraz si el mtodo escogido para resolverlo no necesita saber el estado del programa en el futuro, para decidir correctamente si el elemento que est siendo discutido en ese momento forma parte de la solucin final o no.

b) Elementos caractersticos
Los algoritmos voraces constan de cinco elementos clave que deben determinarse correctamente para resolver con xito el problema planteado: I. II. Conjunto de elementos candidatos: Son los elementos del problema sobre los que se puede decidir si forman parte de la solucin o no. Ordenacin: Es el orden de partida de los elementos candidatos. Las distintas ordenaciones pueden suponer que el algoritmo pueda o no resolverse de manera voraz.

~2~

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

Metodologa de la Programacin

III.

IV.

V.

Seleccin: Este elemento indica cmo deben ordenarse los elementos despus de cada decisin sobre un elemento cualquiera. Es un elemento opcional, que no es necesario implementar para la totalidad de los algoritmos voraces. Funcin de factibilidad: Es la secuencia de acciones que debe seguir el algoritmo para resolver los distintos casos que se pueden presentar al analizar cualquier elemento de los candidatos. Debe barajar y solucionar correctamente todas las opciones posibles y es el elemento que decide qu candidato formara parte de la solucin y cual no. Adems, debe actualizar los campos necesarios antes de realizar la siguiente extraccin de un candidato, pudindose valer para ello de la seleccin. La funcin de factibilidad puede contener la solucin, que se comenta a continuacin. Solucin: Es el ltimo elemento y el que indica en qu momento ha terminado de ejecutarse el algoritmo, bien porque ya no quedan ms elementos que analizar, o bien porque se ha llegado a una situacin en la que no es necesario analizar ninguno ms, ya que se ha conseguido llegar a la solucin final.

c) Esbozo del coste computacional de un algoritmo voraz genrico


Un algoritmo voraz tpicamente realiza n elecciones para un problema de tamao n. Por tanto, el tiempo esperado de ejecucin es: O(n*O(elegir(n))) donde elegir(n) es una funcin que permite elegir un elemento entre n objetos. rdenes habituales son O(n), O(n*log(n)) y O(n2).

~3~

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

Metodologa de la Programacin

B. Descripcin del problema voraz: Planificacin de Rutas


En este trabajo se asumir el papel de una compaa que proporciona servicios relativos al diseo de rutas de trfico ptimas entre diferentes ciudades. Dicha compaa debe ser capaz de resolver una serie de problemas concretos relacionados con esta temtica. Para resolver estos problemas, se debern aplicar las familias de algoritmos vistas en clase. El primer servicio que la compaa deber proporcionar es el siguiente. Un cliente solicitar la ruta ptima entre 2 ciudades cualesquiera. Para ello, la compaa dispone de un mapa donde se almacenan las distancias entre ciudades. Dicho mapa consiste en una matriz simtrica donde en cada posicin (i,j) se almacena la distancia entre las ciudades i y j. Un valor de -1 indicar que no existe una ruta directa entre esas dos ciudades. A continuacin se muestra un ejemplo de mapa para 4 ciudades. Se pide el algoritmo que proporcione tal ruta ptima. C1 0 10 18 -1 C2 10 0 7 -1 C3 18 7 0 9 C4 -1 -1 9 0

C1 C2 C3 C4

a) Identificando los elementos caractersticos


Los elementos caractersticos de nuestro problema son los siguientes:
I. II. Conjunto de elementos candidatos: Nodo origen y el resto de los nodos. Ordenacin: No se necesita una ordenacin explcita, ya que hay una implcita. El cdigo usa el valor numrico de las distancias entre los nodos para ir recorrindolas de forma ordenada desde un nodo inicial hasta un nodo final. Seleccin: Selecciona el nodo con mnima distancia conocida al origen. Factibilidad: El nuevo candidato es siempre factible si D[candidato] es la mnima. Solucin: Cuando todos los nodos han sido ya vistos.

III. IV. V.

b) Justificando por qu el problema es resoluble mediante Dijkstra


Utilizamos el algoritmo de Dijkstra para la resolucin de nuestro problema ya que, nos encontramos con un grafo dirigido ponderado con N nodos no aislados. El algoritmo de Dijkstra no obtiene la solucin para valores negativos en las distancias, por lo que se ha tomado la distancia -1 como un entero llamado NOCAMINO inicializado a 999, distancia sta que supera a cualquier otra distancia entre nodos.

~4~

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

Metodologa de la Programacin

C. Definir un esbozo del algoritmo en pseudocdigo, indicando su orden de complejidad


a) Esbozo del algoritmo en pseudocdigo
funcin DIJKSTRA(g es grafo; v_ini es vrtice) devuelve (D, ANT es vector[1..n] de natural) Para cada vV hacer D[v]:= M[v_ini, v]; ANT[v]:= v_ini fpara; D[v_ini]:= 0; VISTOS:= aadir(conjunto_vacio, v_ini ); mientras (|VISTOS| < |V|) hacer u:= MINIMO(D, uVVISTOS); VISTOS:= VISTOS{u}; para cada v suc(g,u) tal que v VVISTOS hacer si (D[v] > D[u] + valor(g,u,v)) entonces D[v]:= D[u] + valor( g,u,v ); ANT[v]:= u; fsi fpara; fmientras; dev (D, ANT) ffuncin

b) Coste computacional
Se supone que las operaciones sobre matrices estn implementadas en tiempo constante, excepto la creacin (p.ej., mediante un vector de 0s) Inicializacin: i. creacin de la matriz y ejecucin n veces de diversas operaciones constantes: (n)

Mientras: ii. iii. las instrucciones del interior del bucle son (1) n de ejecuciones del bucle: i. 1 vuelta: se consultan n-1 vrtices, ii. 2 vuelta: n-2, etc. iii. N DE EJECUCIONES TOTAL: n(n-1)/2-1 (n2)

Coste total: (n2)

~5~

Miguel ngel Cuenca Navarro Jos Antonio Lpez Molina

Metodologa de la Programacin

D. Bibliografa
Abad Soriano, M. T. (2007/2008). Algoritmos Voraces. Campos, J. Esquemas algortmicos - Algoritmos Voraces. Ponce Galindo, J. (s.f.). Caminos ms cortos a partir de mltiples fuentes en un grafo. Valderruten, A. (s.f.). Algoritmos: Algoritmos Voraces. A Corua.

~6~

You might also like