Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Algoritmos de Programación Dinámica: Ejercicios Resueltos, Diapositivas de Investigación de Operaciones

PPT DE EJERCICIOS DEL TEMA DE PROGRAMACION DINAMICA

Tipo: Diapositivas

2018/2019

Subido el 13/10/2019

Marleny150799
Marleny150799 🇵🇪

4.5

(4)

8 documentos

1 / 5

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Universidad de Alcalá
Departamento de Ciencias de la Computación
Algoritmia y Complejidad
Grado en Ingeniería Informática
Jesús Lázaro García Pág. 1 / 5
EJERCICIOS DE PROGRAMACIÓN DINÁMICA
Ejercicio 1). Se dispone de una matriz M de tamaño FxC (F es la cantidad de filas y C la
cantidad de columnas), cuyas celdas tienen un valor numérico entero positivo. Por ejemplo,
la matriz con 4 filas y 5 columnas siguiente
3
2
3
2
5
1
2
4
5
6
4
3
6
2
4
2
5
3
4
3
Un movimiento entre las casillas Mij y Mpq es válido solamente si (p=i && q=j+1) o bien
si (p=i+1 && q=j). Se denomina camino de la matriz como la sucesión de movimientos
que llevan de la casilla M11 a la casilla MFC y el coste de un camino es igual a la suma de los
valores de las casillas que recorre.
Diseñar un algoritmo de Programación Dinámica que obtenga el menor de los costes de
todos los caminos de una matriz dada como parámetro.
Ejercicio 2). Se tiene un sistema de billetes de distintos valores y ordenados de menor a
mayor (por ejemplo 1, 2, 5, 10, 20, 50 y 100 euros), que se representan mediante los valores
vi, con i {1, …, N} (en el caso anterior, N = 7) de manera que de cada billete se tiene una
cantidad finita, mayor o igual a cero, que se guarda en ci (siguiendo con el ejemplo, c3 = 6
representaría que hay 6 billetes de 5 euros).
Se quiere pagar exactamente una cierta cantidad de dinero D, utilizando para ello la menor
cantidad de billetes posible. Se sabe que
n
iiivcD
1
(es decir, que hay dinero suficiente
para poder devolver la cantidad requerida) pero puede que la cantidad exacta D no sea
obtenible mediante los billetes disponibles.
Diseñar un algoritmo con la metodología de Programación Dinámica que determine,
teniendo como datos los valores ci, vi y D,
si la cantidad D puede devolverse exactamente o no, y
en caso afirmativo, cuantos billetes de cada tipo forman la descomposición
óptima.
Ejercicio 3). Alí Babá ha conseguido entrar en la cueva de los ciento un mil ladrones, y
ha llevado consigo su camello junto con dos grandes alforjas; el problema es que se
encuentra con tanto tesoro que no sabe ni qué llevarse. Los tesoros son joyas talladas, obras
de arte, cerámica… es decir, son objetos únicos que no pueden partirse ya que entonces su
valor se reduciría a cero.
Afortunadamente los ladrones tienen todo muy bien organizado y se encuentra con una lista
de todos los tesoros que hay en la cueva, donde se refleja el peso de cada pieza y su valor
en el mercado de Damasco. Por su parte, Alí sabe la capacidad máxima de peso que tiene
cada una de las alforjas (las alforjas no son necesariamente iguales).
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Algoritmos de Programación Dinámica: Ejercicios Resueltos y más Diapositivas en PDF de Investigación de Operaciones solo en Docsity!

Departamento de Ciencias de la Computación

Algoritmia y Complejidad Grado en Ingeniería Informática

EJERCICIOS DE PROGRAMACIÓN DINÁMICA

Ejercicio 1). Se dispone de una matriz M de tamaño FxC (F es la cantidad de filas y C la cantidad de columnas), cuyas celdas tienen un valor numérico entero positivo. Por ejemplo, la matriz con 4 filas y 5 columnas siguiente

3 2 3 2 5 1 2 4 5 6 4 3 6 2 4 2 5 3 4 3 Un movimiento entre las casillas Mij y Mpq es válido solamente si (p=i && q=j+1) o bien si (p=i+1 && q=j). Se denomina camino de la matriz como la sucesión de movimientos que llevan de la casilla M 11 a la casilla MFC y el coste de un camino es igual a la suma de los valores de las casillas que recorre.

Diseñar un algoritmo de Programación Dinámica que obtenga el menor de los costes de todos los caminos de una matriz dada como parámetro.

Ejercicio 2). Se tiene un sistema de billetes de distintos valores y ordenados de menor a mayor (por ejemplo 1, 2, 5, 10, 20, 50 y 100 euros), que se representan mediante los valores vi , con i  {1, …, N } (en el caso anterior, N = 7) de manera que de cada billete se tiene una cantidad finita, mayor o igual a cero, que se guarda en ci (siguiendo con el ejemplo, c 3 = 6 representaría que hay 6 billetes de 5 euros).

Se quiere pagar exactamente una cierta cantidad de dinero D , utilizando para ello la menor

cantidad de billetes posible. Se sabe que 

n

i

D ci vi 1

(es decir, que hay dinero suficiente

para poder devolver la cantidad requerida) pero puede que la cantidad exacta D no sea obtenible mediante los billetes disponibles.

Diseñar un algoritmo con la metodología de Programación Dinámica que determine, teniendo como datos los valores ci , vi y D ,

 si la cantidad D puede devolverse exactamente o no, y  en caso afirmativo, cuantos billetes de cada tipo forman la descomposición óptima.

Ejercicio 3). Alí Babá ha conseguido entrar en la cueva de los ciento un mil ladrones, y ha llevado consigo su camello junto con dos grandes alforjas; el problema es que se encuentra con tanto tesoro que no sabe ni qué llevarse. Los tesoros son joyas talladas, obras de arte, cerámica… es decir, son objetos únicos que no pueden partirse ya que entonces su valor se reduciría a cero.

Afortunadamente los ladrones tienen todo muy bien organizado y se encuentra con una lista de todos los tesoros que hay en la cueva, donde se refleja el peso de cada pieza y su valor en el mercado de Damasco. Por su parte, Alí sabe la capacidad máxima de peso que tiene cada una de las alforjas (las alforjas no son necesariamente iguales).

Departamento de Ciencias de la Computación

Algoritmia y Complejidad Grado en Ingeniería Informática

Diseñar un algoritmo que, teniendo como datos los pesos y valor de las piezas, y la capacidad de las dos alforjas, permita obtener el máximo beneficio que podrá sacar Alí Babá de la Cueva de las Maravillas.

Ejercicio 4). ¡Llega el torneo de EscobaBall, y más salvaje que nunca! Este año, en el Colegio de Magia y Hechicería han decidido que los cuatro equipos (Grifos, Serpientes, Cuervos y Tejones) jueguen en cada partido todos contra todos, y como siempre que ningún partido termine en empate. El torneo acabará cuando un mismo equipo haya ganado un total de N partidos (no necesariamente consecutivos).

El aprendiz de mago Javi Potter quiere apostar algo de dinero por su equipo, los Grifos, así que se dirige a la casa de apuestas de los gnomos para ver cuánto le darían si gana su equipo: sus ganancias serían iguales a la cantidad de dinero apostado dividido por la probabilidad de que el equipo gane el campeonato (por ejemplo, si los Grifos tuviesen un 50% de ganar el campeonato y Javi apuesta 10 monedas de oro, sus posibles ganancias serían 10/0’5 = 20 monedas de oro; si tuviesen un 20% de ganar, el beneficio posible sería de 10/0’2 = 50 monedas de oro, mayor recompensa al ser más difícil de conseguir).

Para obtener esta probabilidad, la casa de apuestas tiene un Valor de Calidad asignado a cada equipo (que mide la habilidad de los jugadores, su motivación, etc, y que es un valor fijo para el equipo e independiente del partido que esté jugando) de manera que cuanto mayor es el VC de un equipo, más probabilidades tiene de ganar un partido. Por ejemplo, si los cuatro equipos tuviesen igual VC todos tendrían un 25% de ganar un partido. Si tres equipos tuviesen el mismo VC y el cuarto equipo tuviese el doble de esa cantidad, los primeros tendrían un 20% y el último un 40%. Como los partidos no pueden terminar en empate, la suma de las probabilidades siempre es el 100%.

Teniendo como datos los Valores de Calidad de los equipos, la cantidad de partidos N que debe ganar un equipo para conseguir ganar el torneo, y el dinero D apostado por Javi Potter, obtener cuáles serían las ganancias si ganasen los Grifos.

Ejercicio 5). Se tiene un grafo dirigido G = < N, A >, siendo N = {1, …, n } el conjunto de nodos y A  NxN el conjunto de aristas. Sea M la matriz de adyacencia del grafo G, es decir, M [ i , j ] = TRUE si existe la arista ( i , j ), y M [ i , j ] = FALSE en caso contrario.

Se está interesado en saber desde qué vértices se puede acceder a cualquier otro vértice (mediante un camino de cualquier longitud) mediante el algoritmo de Warshall, por lo que

 Hay que obtener una matriz de caminos C de manera que C [ i , j ] = TRUE si existe un camino (de cualquier longitud) entre los nodos i y j , y C [ i , j ] = FALSE si no existe forma de llegar de i a j.  Para ello, se utilizará un enfoque Bottom-Up considerando cada vez una cantidad mayor nodos. Se empieza intentando ir directamente de un nodo a otro, después se intenta encontrar los caminos que pueden “rebotar” en el vértice 1, a continuación los que pueden usar los vértices 1 y 2, los que se consiguen con los vértices 1, 2 y 3, etc., hasta llegar a obtener los caminos que pueden utilizar todos los vértices de 1 hasta n.

Departamento de Ciencias de la Computación

Algoritmia y Complejidad Grado en Ingeniería Informática

Por otra parte, la anchura de un camino formado por una sucesión de calles es la anchura mínima de todas ellas: suponiendo que la anchura de la calle de Aro a Ruido tiene el valor 8, y que la calle de Ruido a Osa tiene anchura 5, el desfile que empieza en Aro, pasa por Ruido y termina en Osa tiene un tope de 5 columnas de glifos (y como se ve es más estrecho que ir directamente de Aro a Osa).

Por motivos de seguridad para los glifos el ejército todavía no ha revelado las plazas de origen y destino para el desfile, por lo que el ayuntamiento deberá calcular todas las posibilidades. Diseñar un algoritmo eficiente que, teniendo como datos el callejero y las anchuras de todas las calles, permita obtener el camino de anchura máxima que las une, indicando las estructuras de datos que se utilicen.

Ejercicio 8). (Basado en el Examen Noviembre 2032. 3 puntos) En Abecelandia, ciudad famosa por sus bellas plazas y que ya conoces, ya se saben cuáles serán las N calles que serán limpiadas por los servicios mínimos, que están formados por M grupos de trabajo. Cada uno de los grupos de trabajo puede asignarse para limpiar cualquier calle.

Cada calle tiene unas características concretas (como su longitud, anchura, pendiente…) que hace que sea más o menos fácil su limpieza, dependiendo de la cantidad de grupos de trabajo que se dediquen a ello. El Ayuntamiento dispone de una matriz Limpieza con tamaño MxN donde cada casilla Limpieza[i, j] de la tabla es un valor entre 0 y 100 y que representa el tanto por ciento de la calle j que quedaría limpia al asignarse i grupos de trabajo para limpiarla, entendiendo como 0% que la calle no se ha limpiado nada y como 100% que la calle ha quedado completamente limpia. Así, Limpieza[3, 5] = 60 representa que si se asignan 3 grupos de trabajo a la calle número 5, quedaría limpia al 60%.

Como no hay efectivos suficientes para que todas las calles puedan ser limpiadas al 100%, el Ayuntamiento tiene que decir cuántos grupos de trabajo van a cada una de las calles, con el objetivo de que la suma de limpiezas sea lo mayor posible (se considera mejor limpiar dos calles al 60% que una sola al 100%).

Diseñar un algoritmo eficiente que teniendo como datos la cantidad de calles N , la cantidad de grupos de trabajo M y la tabla de porcentajes Limpieza , encuentre la asignación que maximice el total de las limpiezas de las calles, indicando las estructuras de datos que se utilicen.

Ejercicio 9). (Basado en el 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 años 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 mínimos de limpieza, proceso que debe comenzar con la retirada de los contenedores de las calles.

El proceso de retirar un contenedor consiste en vaciar de golpe todo su contenido en un camión sanitario de almacenaje de residuos, y así dejarlo listo para ser desinfectado

Departamento de Ciencias de la Computación

Algoritmia y Complejidad Grado en Ingeniería Informática

posteriormente. Hay un total de K contenedores que retirar, y cada uno de ellos tiene una capacidad pi (pueden ser distintas, y no están ordenadas de ninguna manera concreta). Debido a la huelga de limpieza, todos los contenedores están llenos de basura.

El Ayuntamiento solo dispone de dos camiones asignados a los servicios mínimos, de capacidades C 1 y C 2 (pueden ser iguales entre sí o distintas). Para evitar problemas con los posibles piquetes los camiones salen y regresan juntos al basurero, tardando una hora en hacer su ruta, que consiste en salir del basurero, cargar la basura, regresar al basurero y descargar la basura.

El peso total de la basura de los contenedores es muy superior a la capacidad de los dos camiones, así que se desea encontrar la forma de llenar los camiones con la mayor cantidad de basura posible en cada viaje.

Diseñar un algoritmo eficiente que, teniendo como datos la capacidad de los dos camiones y la cantidad de basura en cada uno de los K contenedores, permita obtener la cantidad de horas necesarias para la retirada completa de los contenedores.