You are on page 1of 4

Universidad de Alcal

Departamento de Ciencias de la Computacin


Algoritmia y Complejidad
Grado en Ingeniera Informtica

EJERCICIOS DE ALGORITMOS VORACES


Ejercicio 1). Se tienen n nmeros naturales distintos, siendo n una cantidad par, que
tienen que juntarse formando parejas de dos nmeros cada una. A continuacin, de cada
pareja se obtiene la suma de sus dos componentes, y de todos estos resultados se toma el
mximo.
Disear un algoritmo voraz que cree las parejas de manera que el valor mximo de las
sumas de los nmeros de cada pareja sea lo ms pequeo posible, demostrando que la
funcin de seleccin de candidatos usada proporciona una solucin ptima.
Ejemplo: suponiendo que los datos se encuentran en el vector siguiente
5 8 1 4 7 9
vamos a ver un par de formas de resolver el problema (no necesariamente la ptima):

Seleccionamos como pareja los elementos consecutivos


De esta forma conseguimos las parejas (5, 8), (1, 4) y (7, 9); entonces, al sumar las
componentes tenemos los valores 15, 5 y 16, por lo que el resultado final es 16.

Seleccionamos como pareja los elementos opuestos en el vector


Ahora tenemos las parejas (5, 9), (8, 7) y (1, 4); sumando conseguimos 14, 15 y 5,
por lo que el resultado final es 15 (mejor que antes).

Habr una resultado mejor para este problema? Puede generalizarse un mtodo que nos
proporcione un algoritmo voraz correcto para cualquier cantidad de datos, y que adems sea
independiente del valor de los mismos?
Ejercicio 2). Se tiene que almacenar un conjunto de n ficheros en una cinta magntica
(soporte de almacenamiento de recorrido secuencial), teniendo cada fichero una longitud
conocida l1, l2, , ln. Para simplificar el problema, puede suponerse que la velocidad del
lectura es constante, as como la densidad de informacin en la cinta.
Se conoce de antemano la tasa de utilizacin de cada fichero almacenado, es decir, se sabe
la cantidad de peticiones pi correspondiente al fichero i que se van a realizar. Por tanto, el
n

total de peticiones al soporte ser la cantidad P =

p
i 1

. Tras la peticin de un fichero, al

ser encontrado la cinta es automticamente rebobinada hasta el comienzo de la misma.


El objetivo es decidir el orden en que los n ficheros deben ser almacenados para que se
minimice el tiempo medio de carga, creando un algoritmo voraz correcto.
Ejercicio 3). Demostrar, mediante contraejemplos, que el Ejercicio 2 no puede resolverse
de manera correcta (aunque s mediante un algoritmo que funcione) utilizando
los ficheros en orden creciente de longitudes li (los pequeos primero y los
grandes despus);
los ficheros en orden decreciente de peticiones pi (los ms solicitados primero y
los menos solicitados los ltimos).

Jess Lzaro Garca

Pg. 1 / 4

Universidad de Alcal
Departamento de Ciencias de la Computacin
Algoritmia y Complejidad
Grado en Ingeniera Informtica

Ejercicio 4). Se tiene un grafo dirigido G = < N, A >, siendo N = {1, , n} el conjunto
de nodos y A NxN el conjunto de aristas. Cada arista (i, j) A tiene un coste asociado cij
(cij > 0 i, j N; si (i, j) A puede considerarse cij = +). Sea M la matriz de costes del
grafo G, es decir, M[i, j] = cij.
Teniendo como datos la cantidad de nodos n y la matriz de costes M, se pide encontrar
tanto el camino mnimo entre los nodos 1 y n como la longitud de dicho camino usando el
algoritmo de Dijkstra, utilizando las siguientes ideas:
Crear un estructura de datos que almacene las distancias temporales conocidas
(inicializadas al coste de la arista del vrtice 1 a cada vrtice j, o + si no existe dicha
arista) para los vrtices no recorridos (inicialmente, todos salvo el 1).
Seleccionar como candidato el que tenga menor distancia temporal conocida,
eliminarle del conjunto de vrtices no recorridos, y actualizar el resto de distancias
temporales si pueden ser mejoradas utilizando el vrtice actual.
Se necesitar almacenar de alguna manera la forma de recorrer el grafo desde el
vrtice 1 al vrtice n (no necesariamente igual al conjunto de decisiones tomadas).
Ejercicio 5). Se tiene un grafo no dirigido G = < N, A >, siendo N = {1, , n} el
conjunto de nodos y A NxN el conjunto de aristas. Cada arista (i, j) A tiene un coste
asociado cij (cij > 0 i, j N; si (i, j) A puede considerarse cij = +). Sea M la matriz de
costes del grafo G, es decir, M[i, j] = cij. (al ser el grafo no dirigido se tiene que (i, j) = (j, i)
por lo que la matriz M es simtrica).
Teniendo como datos la cantidad de nodos n y la matriz de costes M, se pide encontrar el
rbol soporte mnimo del grafo G utilizando el algoritmo de Prim, utilizando las siguientes
ideas:
A diferencia del algoritmo de Kruskal (que crea el rbol utilizando componentes
conexas independientes que se van uniendo entre s), el algoritmo de Prim se basa en
la idea de ir construyendo un rbol cada vez ms grande, empezando por un nico
nodo y acabando por recubrir todo el grafo.
El algoritmo comienza con un rbol de un nodo, al que se le aade un segundo
nodo, luego un tercero, etc, hasta tener los n nodos unidos. La forma de escoger un
nodo es buscando el nodo ms cercano a todo el rbol, sin que se creen ciclos.
A medida que crece el tamao del rbol la bsqueda del nodo ms cercano se
complica, por lo que para que el algoritmo sea eficiente (el mtodo debe tener O(n2))
hay que crear un estructura de datos que almacene la mejor distancia de cada nodo al
conjunto de nodos del rbol.
Se necesitar almacenar de alguna manera la forma en que se ha creado el rbol,
por ejemplo indicando a qu nodo del rbol se est uniendo el nuevo candidato
seleccionado.

Jess Lzaro Garca

Pg. 2 / 4

Universidad de Alcal
Departamento de Ciencias de la Computacin
Algoritmia y Complejidad
Grado en Ingeniera Informtica

Ejercicio 6). Se dispone de un vector V formado por n datos, del que se quiere encontrar
el elemento mnimo del vector y el elemento mximo del vector. El tipo de los datos que
hay en el vector no es relevante para el problema, pero la comparacin entre dos datos para
ver cul es menor es muy costosa, por lo que el algoritmo para la bsqueda del mnimo y
del mximo debe hacer la menor cantidad de comparaciones entre elementos posible.
Un mtodo trivial consiste en un recorrido lineal del vector para buscar el mximo y
despus otro recorrido para buscar el mnimo, lo que requiere un total de aproximadamente
2n comparaciones entre datos. Este mtodo no es lo suficientemente rpido, por lo que se
pide implementar un mtodo con metodologa Voraz que realice un mximo de 32 n
comparaciones.
Ejercicio 7). Shrek, Asno y Dragona llegan a los pies del altsimo castillo de Lord
Farquaad para liberar a Fiona de su encierro. Como sospechaban que el puente levadizo
estara vigilado por numerosos soldados se han trado muchas escaleras, de distintas alturas,
con la esperanza de que alguna de ellas les permita superar la muralla; pero ninguna
escalera les sirve porque la muralla es muy alta. Shrek se da cuenta de que, si pudiese
combinar todas las escaleras en una sola, conseguira llegar exactamente a la parte de arriba
y poder entrar al castillo.
Afortunadamente las escaleras son de hierro, as que con la ayuda de Dragona van a
soldarlas. Dragona puede soldar dos escaleras cualesquiera con su aliento de fuego, pero
tarda en calentar los extremos tantos minutos como metros suman las escaleras a soldar.
Por ejemplo, en soldar dos escaleras de 6 y 8 metros tardara 6 + 8 = 14 minutos. Si a esta
escalera se le soldase despus una de 7 metros, el nuevo tiempo sera 14 + 7 = 21 minutos,
por lo que habran tardado en hacer la escalera completa un total de 14 + 21 = 35 minutos.
Disear un algoritmo eficiente que encuentre el mejor coste y la manera de soldar las
escaleras para que Shrek tarde lo menos posible en escalar la muralla, indicando las
estructuras de datos elegidas y su forma de uso. Se puede suponer que se dispone
exactamente de las escaleras necesarias para subir a la muralla (ni sobran ni faltan), es
decir, que el dato del problema es la coleccin de medidas de las miniescaleras (en la
estructura de datos que se elija), y que solo se busca la forma ptima de fundir las escaleras.
Ejercicio 8). (Examen Noviembre 2013. 3 puntos) En Abecelandia, ciudad famosa por sus
N bellas plazas y que puede que conozcas, debido a los despilfarros de los ltimos aos en
peajes, festejos y desfiles, el Ayuntamiento no tiene dinero para poder pagar a los servicios
de limpieza, que han iniciado una huelga. Para no afectar al turismo, se estudia instaurar
unos servicios mnimos que permitan a los turistas que visiten Abecelandia poder ir desde
cualquier plaza de la ciudad a cualquier otra plaza paseando por calles limpias.
Se dispone de las calles de la ciudad almacenadas en una matriz de adyacencia cuyo tamao
es NxN (las calles que existen entre las plazas pueden recorrerse a pie en cualquier sentido
indistintamente) y se ha calculado el coste de limpiar cada una de ellas, guardando esa
informacin en una tabla de costes.
Disear un algoritmo eficiente que, teniendo como datos el callejero y la tabla de costes de
las limpiezas, determine las calles que debern ser limpiadas de manera que los turistas
puedan ir desde una plaza a cualquier otra andando solo por calles limpias, y de forma que
el coste total de la limpieza sea mnimo, indicando las estructuras de datos que se utilicen.

Jess Lzaro Garca

Pg. 3 / 4

Universidad de Alcal
Departamento de Ciencias de la Computacin
Algoritmia y Complejidad
Grado en Ingeniera Informtica

Ejercicio 9). (Examen Junio 2014. 3 puntos) En la gestin de la red social PiensaQue
(www.piensaque.com, donde puedes escuchar qu piensan tus contactos) quieren
determinar el grado de conexin entre sus usuarios.
El grado de conexin es la cantidad de grupos de usuarios conectados entre s dividido por
el total de usuarios. Si este valor se acerca a 1 es que todos los usuarios se conocen, bien
directamente o bien a travs de amigos en comn (o amigos de amigos de un amigo, etc.)
mientras que si se aproxima a 0 quiere decir que los usuarios estn aislados y prcticamente
sin contactos comunes.
Entre los miles de usuarios de PiensaQue se escoge una poblacin aleatoria de cien
identificadores para obtener su grado de conexin. Cada uno de esos cien identificadores
representa a un usuario, del que se adems se tienen sus contactos almacenados en una lista.
Por ejemplo, se podra tener el siguiente caso de seis usuarios (en cursiva) y sus contactos
(separados por comas):
Antonio: Bea, Carlos, Emma

Carlos: Antonio, Emma

Emma: Bea

Bea: Emma, Carlos, Antonio

David: Fernando

Fernando: NINGUNO

Aunque Emma solo tiene por contacto a Bea, a travs de ella est relacionada con Carlos y
con Antonio. Por otra parte, Fernando y David tambin tienen una conexin entre ellos
(David tiene a Fernando entre sus contactos aunque el recproco no se cumpla). Sin
embargo, los dos grupos no tienen nexos en comn.
En este ejemplo el grado de conexin sera 2 grupos entre 6 usuarios, aproximadamente el
valor 033.
Disear un algoritmo eficiente que, teniendo como datos los usuarios elegidos (cada uno de
ellos con su identificador y la lista de sus contactos), obtenga el grado de conexin entre
ellos.

Jess Lzaro Garca

Pg. 4 / 4

You might also like