Você está na página 1de 12

Universidad Católica del Norte

Facultad de Ingeniería y Ciencias Geológicas


Departamento de Ingeniería de Sistemas y Computación

Guía para la Tercera Prueba


Análisis de Algoritmos
DAIS-00772 / DAIS-77227

Programación Dinámica
Problema 1
El problema de la Mochila_01 consiste en decidir entre n objetos de pesos
p1, p2,..., pn y beneficios b1, b2,..., bn, cuáles hay que incluir en una
mochila de capacidad C sin superar dicha capacidad y de forma que se
maximice la suma de los beneficios de los objetos escogidos. El problema se
define en términos de las siguientes variables:
 C: capacidad de la mochila;
 n: número de ítems.
 p = <p1, p2,…,pn>: vector de pesos de los objetos;
 b = <b1, b2,…, bn>: vector de valores de los objetos;
 g[i,c]: valor máximo de la mochila con capacidad c cuando se consideran
i ítems, 1≤c≤C, 1≤i≤n.

La subestructura óptima de este problema está dada por la siguiente formula


recursiva:

0 Si i=0 o c=0
g[i-1,c] Si c < p[i]
g[i,c]=
Max{g[i-1,c],g[i-
En otro caso.
1,c-p[i]]+b[i]}
a) Escriba un procedimiento usando programación dinámica, que dado C, p y
b, calcule la tabla g[0..n,0..C] de beneficios máximos y la tabla
s[0..n,0..C] tal que s[i,c] contiene los índices de los objetos
asociados a g[i,c]. Determine el comportamiento asintótico del tiempo de
ejecución de su algoritmo.
b) Construya la tabla g y s para el caso C = 15, p = <9,6,5> y b=<38,40,24>
determine el beneficio óptimo g[n,C] y los ítems a llevar s[n,C] en este
caso,
c) Escriba una versión recursiva top-down memoizada del procedimiento para
calcular g[0..n, 0..C]. Determine el comportamiento asintótico del
tiempo de ejecución de su algoritmo para este caso.

Problema 2
Dada una secuencia de caracteres X=<x1x2…xm>, la secuencia Z=<z1z2…zk> es una
subsecuencia de X si existe una cadena <i1,i2,…,ik> estrictamente creciente
de índices de X, tal que xij=zj, j=1,2,…,k. Por ejemplo, si X=<ABCBDAB>,
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

entonces Z=<BCDB> es una subsecuencia de X, pues existe la secuencia de


índices <2,3,5,7>,tal que x2,1=z1, x3,2=z2, x5,3=z3, x7,4=z4.

Considere el problema de determinar la subsecuencia común más larga (LCS)


de dos cadenas de caracteres X=<x1x2…xm> e Y=<y1y2…yn>. Por ejemplo, si
X=<ABCBDAB> e Y=<BDCABA> entonces la LCS(X,Y) es <BCBA>.

Este problema presenta una subestructura óptima, dada por la siguiente


formula recursiva:

0 Si i=0 o j=0
Si i,j>0 y
C[i-1,j-1]+1
C[i,j]= xi=yj
Max(C[i,j-1], C[i- Si i,j>0 y
1,j]) xiyj

Donde C[i,j] corresponde a la longitud de una LCS de las secuencias Xi e Yj.


a) Escriba un procedimiento LCS-LONGITUD(X,Y), usando programación
dinámica, que calcule las tablas C[0..m,0..n] y B[1..m,1..n]. B[i,j]
almacena una D, U, o L, dependiendo si C[i,j] se calcula en base al
elemento de la Diagonal, de Arriba (UP), o de la Izquierda (LEFT), en la
tabla C. La tabla C se llena por filas, de izquierda a derecha. C[m,n]
contiene el largo de la LCS de X e Y.
b) Calcule las matrices C y B que resultan de LCS-LONGITUD(X,Y), donde
X=<ABCBDAB> e Y=<BDCABA>

Problema 3
Encontrar una parentización óptima del producto de una cadena de matrices
de dimensiones p=<5, 10, 3, 12, 5, 50, 6>. Determine las matrices m[i,j] y
s[i,j] generadas por el procedimiento MATRIX-CHAIN-ORDEN(p) e indique cual
es el orden en que deben ser multiplicadas las matrices.

Problema 4
Sean A=a1a2…an y B=b1b2…bm dos strings sobre un alfabeto finito de símbolos
(n, m >=0). Se desea determinar el número mínimo de cambios para
transformar el string A en el string B, usando las siguientes funciones:
- Insertar(c, k): inserta el símbolo c en la posición k del string
- Borrar(k): borra el símbolo en la posición k del string
- Sustituir(c, k): sustituye el símbolo en la posición k por el símbolo c
del string
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

Para ello se define la función cambios(i,j) como el número mínimo de


cambios para transformar el string a1a2…ai en el string b1b2…bj, con 1<=i<=n
y 1<=j<=m, y donde:
=i si j=0, para i=1,…,n
=j si i=0, para j=1,…,m
Cambios(i,j) =cambios(i-1,j-1) si ai=bj
=minimo {cambios(i-1,j)+1, cambios(i,j-
1)+1, cambios(i-1,j-1)+1} si aibj

a) Escriba un algoritmo para determinar el número mínimo de cambios para


transformar el string A=a1a2…an en el string B=b1b2…bm usando programación
dinámica. El algoritmo, además de generar la matriz Cambios[i,j], debe
generar la matriz Op[i,j], donde Op[i,j] almacena una ‘I’, ‘B’, o ‘S’,
dependiendo de la operación seleccionada (Insertar, Borrar, Sustituir)
como óptima para calcular cambios[i,j].
b) Calcule las matrices Cambios y Op para transformar el string “laser” en
“sabe”.

Problema 5
La función de Ackerman se define recursivamente del modo siguiente:

Se le pide confeccionar un algoritmo utilizando programación dinámica, que


permita obtener el valor de Ack(m,n). Luego, estime sólo el costo de su
algoritmo (O).

Problema 6
Una agencia de turismo realiza planificaciones de viajes aéreos. Para ir de
una ciudad A a una ciudad B pueden existir distintas formas de hacerlo y
puede ser necesario coger varios vuelos distintos. El tiempo de un vuelo
directo, si existe, para ir de la ciudad i a la ciudad j se almacena en la
entrada T[i,j] de la matriz T (T[i,j] puede ser distinto de T[j,i]).
Además, considerar que un vuelo para ir de la ciudad i a la ciudad j,
haciendo escala en la ciudad k, tiene asociado un tiempo de escala en el
aeropuerto de la ciudad k indicado por la entrada E[i,j,k] de la matriz E.

a) Escriba un procedimiento que, utilizando programación dinámica,


determine la ruta de tiempo mínimo para ir de una ciudad A a una ciudad
B.
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

b) Mostrar la ejecución y resultados de su algoritmo sobre la matriz T


siguiente, suponiendo que E[i,j,k]=1 para todo i,j,k.

T[i,j] A B C D
A - 2 1 3
B 7 - 9 2
C 2 2 - 1
D 3 4 8 -

Problema 7
La empresa LCA produce automóviles en una fábrica que tiene dos líneas de
ensamblaje (i=1,2). Cada línea tiene n estaciones (j=1,2,…,n). Un chassis
de automóvil ingresa a una línea de ensamblaje, se le agregan partes en
cada estación, y una vez finalizado el proceso el automóvil sale de la
línea. Si,j denota la j-ésima estación de la línea i. La estación S1,j
realiza exactamente la misma función que la estación S2,j (j=1,2,…,n), pero
tienen diferente tecnología dado que fueron construidas en diferentes
tiempos.

 ai,j denota el tiempo requerido por un automóvil en la estación Si,j.


 ei denota el tiempo requerido por un automóvil en ingresar a la línea i,
antes de ingresar a su primera estación.
 xi denota el tiempo requerido por un automóvil en abandonar la línea i,
después de pasar por su última estación.

En algunos casos (pedidos especiales), se requiere que un automóvil pase


por el proceso de manufactura tan rápido como sea posible. En esos casos,
el administrador puede transferir un automóvil parcialmente completado
desde una línea a la otra.

 ti,j denota el tiempo requerido para transferir un chassis desde la línea


i después de completar la estación j (i=1,2; j=1,2,…,n-1).
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

El problema es determinar cuáles estaciones elegir desde la línea 1 y


cuales elegir de la línea 2, tal que el tiempo total de permanencia de un
automóvil en la fábrica sea el mínimo posible. Este problema exhibe
subestructura optima: la solución óptima al problema (encontrar el camino
más rápido pasando por la estación Si,j) contiene dentro de ella una
solución óptima a subproblemas (encontrar el camino más rápido pasando ya
sea por S1,j-1 o S2,j-1). Si fi[j] denota el menor tiempo posible para que un
chassis vaya desde el punto inicial hasta la estación Si,j, entonces una
solución recursiva a este problema está dada por las siguientes ecuaciones:

e1 + a1,1 Si j=1
f1[j] =
Min (f1[j-1]+a1,j; f2[j-1]+t2,j-1+a1,j) Si j>=2
e2 + a2,1 Si j=1
f2[j] =
Min (f2[j-1]+a2,j; f1[j-1]+t1,j-1+a2,j) Si j>=2
La solución al problema de ir por la fábrica completa con n estaciones está
dada por:

 f* = min (f1[n] + x1; f2[n] + x2)


 l* = línea usada cuya estación n es usada en el camino más rápido a
través de la fábrica completa.

li[j] (i=1,2; j=2,3,…n) es el número de línea (1 o 2), cuya estación j-1 es


usada en el camino más rápido a través de la estación Si,j. Considere lo
siguiente:

a1,j=[9, 4, 8, 6, 4, 8]
a2,j=[7, 3, 9, 8, 3, 7]
e=[3, 4]; x=[5, 4]
t1,j=[4, 3, 3, 3, 5]
t2,j=[4, 2, 4, 1, 2]

a) Plantee un algoritmo utilizando un enfoque de “fuerza bruta” recursivo


top-down para minimizar el tiempo en la fábrica de un automóvil. Pruebe
que esta solución es (2n).
b) Plantee un algoritmo, utilizando programación dinámica, para determinar
la forma más rápida para un automóvil de pasar a través de la fábrica
con 2 líneas de ensamblaje: FASTEST-WAY( a, t, e, x, n)
c) Determine la salida (vectores f1, f2, l1, l2, y valores de f* y l*) del
algoritmo FASTEST-WAY para el caso mostrado en la Figura 1 (n=6).
d) Determine el comportamiento asintótico del tiempo de ejecución de
FASTEST-WAY( a, t, e, x, n)
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

e) Plantee una versión “memoizada” del algoritmo recursivo top-down y


determine el comportamiento asintótico de su tiempo de ejecución.

Problema 8
Sea f(n, m) la cantidad de particiones de n en que los sumandos forman una
sucesión decreciente de números positivos enteros menores o iguales a m. Se
conoce que:
𝑓(1, 𝑚) = 1, ∀𝑚
𝑓(𝑛, 1) = 1, ∀𝑛
𝑓(𝑛, 𝑛) = 𝑓(𝑛, 𝑛 − 1) + 1, 𝑠𝑖 𝑛 = 𝑚
𝑓(𝑛, 𝑚) = 𝑓(𝑛, 𝑚 − 1) + 𝑓(𝑛 − 𝑚, 𝑚), 𝑠𝑖 𝑛 > 𝑚

Se sabe que determinar f(n, m) es de orden exponencial. Escriba un


algoritmo de programación dinámica para calcular f(n, m) para n y m dados
(ambos enteros positivos). ¿Cuántas sumas realiza en total el algoritmo?

Problema 9
Considere la conocida secuencia de Fibonacci con valores iniciales a y b
definida de la siguiente manera:

𝐹𝑛 = 𝐹𝑛−1 + 𝐹𝑛−2
𝐹0 = 𝑎
𝐹1 = 𝑏

a) Escriba una versión recursiva simple para calcular Fibonacci(n, a, b).


b) Plantee la recurrencia que describe el tiempo de ejecución de su versión
recursiva.
c) ¿Cuál es el orden asintótico del algoritmo anterior? No es necesario
resolver formalmente su recurrencia.
d) Escriba una versión del algoritmo que utilice programación dinámica para
calcular Fibonacci(n, a, b), considere la utilización de un vector
auxiliar F tal que almacene los valores de cálculo intermedio.
e) Analice el tiempo de ejecución del algoritmo basado en programación
dinámica.

Problema 10
Dados n huevos y k pisos. Se desea determinar la menor cantidad de huevos
que deben ser lanzados para determinar, en todos los casos, desde cuantos
pisos se puede dejar caer un huevo de forma segura (i.e. que no se rompa).
Se tienen los siguientes supuestos:

 Un huevo que sobrevive a la caída puede ser utilizado nuevamente.


Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

 Un huevo roto debe ser descartado.


 El efecto de la caída es igual para todos los huevos.
 Si un huevo se rompe, entonces se rompería si cayese de un piso más
alto.
 Si un huevo sobreviva una caída, entonces sobrevivirá una caída más
pequeña.

Notar que una caída desde el primero piso puede romper huevos, como también
es posible que sobrevivan una caída desde el más alto (eso es justamente lo
que se quiere averiguar, en qué piso se rompe exactamente). La relación de
recurrencia en función de la cantidad de huevos y la cantidad de pisos es
la siguiente:

𝑊(𝑛, 𝑘) = 1 + min(max(𝑊(𝑛 − 1, 𝑥 − 1), 𝑊(𝑛, 𝑘 − 𝑥)) , 𝑥 = 1, … , 𝑘


𝑊(𝑛, 0) = 0, 𝑊(1, 𝑘) = 𝑘

a) Escriba un algoritmo memoizado para resolver este problema.


b) Si se tiene un único piso, pero varios huevos, determinar el valor de
𝑊(𝑛, 1) mediante un algoritmo de programación dinámica.
c) Construya la tabla de programación dinámica para 𝑛 = 7 huevos.
d) ¿Por qué funciona el enfoque de programación dinámica?

Problema 11
La siguiente función expresa el valor óptimo para un problema de
optimización que requiere como parámetros de entrada los valores iniciales
a y b:

𝑎, si 𝑛 = 0
𝑏, 𝑠𝑖 𝑛 = 1
𝑂𝑝𝑡𝑛 = 𝑂𝑝𝑡𝑛−1 + 𝑂𝑝𝑡𝑛−2 , si 𝑛 es par
max {min {𝑂𝑝𝑡𝑛−⌊𝑥⌋ , 𝑂𝑝𝑡𝑛−𝑥 − 𝑂𝑝𝑡⌊𝑛−𝑥⌋ } , 𝑥 = 1, … , 𝑛} , si 𝑛 es impar
{ 2 2

a) Escriba una versión recursiva simple para calcular Opt(n, a, b).


b) Construya el árbol de llamados recursivos para calcular Opt(3, a, b).
c) Calcule el valor óptimo 𝑂𝑝𝑡3 con 𝑎 = 1 y 𝑏 = 3.
d) ¿Cuál es el orden asintótico del algoritmo anterior? Fundamente.
e) Escriba una versión del algoritmo que utilice programación dinámica para
calcular Opt(n, a, b).
f) Analice el tiempo de ejecución del algoritmo basado en programación
dinámica.
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

Problema 12
El cálculo de los coeficientes binomiales es un aspecto importante en la
resolución de varios problemas de combinatoria. La fórmula para los
coeficientes binomiales es la siguiente:
𝑛 𝑛!
( )=
𝑚 (𝑛 − 𝑚)! 𝑚!
No obstante, utilizando un planteamiento recursivo llamado la Fórmula de
Pascal, se tiene la siguiente identidad:
1, si 𝑚 = 0
𝑛 1, si 𝑛 = 𝑚
( )={
𝑚 𝑛−1 𝑛−1
( )+( ), 𝑚<𝑛
𝑚 𝑚−1
Una forma de mostrar los resultados de esta recurrencia es el conocido
Triángulo de Pascal. Donde cada número en el triángulo es la suma de los
dos números inmediatamente arriba de éste. Por otra parte, los números de
Catalán son una secuencia de números naturales que surge en muchos
problemas que involucran árboles y recursión. El objetivo de este problema
es calcular el k-ésimo número de catalán utilizando la siguiente fórmula:

1 2𝑘
𝐶𝑘 = ( ), 𝑘≥0
𝑘+1 𝑘

a) Desarrolle un algoritmo que permita calcular el k-ésimo número de


Catalán. Considere codificar un algoritmo para calcular los valores de
los coeficientes binomiales utilizando:
a. Un enfoque recursivo.
b. Un enfoque memoizado.
c. Un enfoque de programación dinámica.
b) Construya la tabla de DP para calcular el coeficiente binomial con 𝑛 = 7
y 𝑚 = 7.
c) Dada la siguiente formulación alternativa de los números de Catalán,
construya un algoritmo por programación dinámica que calcule el n-ésimo
número en la secuencia:
𝑛

𝐶0 = 1; 𝐶𝑛+1 = ∑ 𝐶𝑖 𝐶𝑛−𝑖 , 𝑛≥0


𝑖=0
d) Defina una fórmula alternativa para el cálculo de los números de
Catalán.
e) Determine el tiempo de ejecución de los algoritmos construidos para el
cálculo de los números de Catalán. ¿Cuál es la mejor opción bajo la
definición clásica de eficiencia?
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

Problemas NP-Completos e Intratabilidad


Problema 1
El problema de las palabras aceptables LETTERS-ACEPT es como sigue: dado un
conjunto de palabras formado por letras mayúsculas y minúsculas, en que si
una forma de una letra aparece en una palabra entonces no aparece la otra
en la misma palabra, ¿es posible seleccionar una letra de cada palabra sin
seleccionar a la vez una mayúscula y minúscula de la misma letra (se pueden
repetir)? Por ejemplo: para {AbC, Ac, aBc, bC} una solución posible es: A,
A, B y C. Pero para {ab, aB, Ab, AB} no hay solución. Se pide probar que el
problema LETTERS-ACEPT es NP-completo. Indicación: Probar que SAT-FNC es
reducible a LETTERS-ACEPT.

Problema 2
Un conjunto dominante de un grafo no dirigido G es un subgrafo en que cada
nodo del grafo, o bien está en el subgrafo o es un vecino de al menos un
nodo en el subgrafo. Demostrar que decidir cuando un grafo tiene un
conjunto dominante formado por k nodos (llamado DOM) es NP-completo.
Indicación: reduzca VERTEX-COVER a DOM.

Problema 3
Se dice que una falacia es una ecuación booleana en que cualquier
asignación de valores de verdad a los literales que la componen producen un
resultado FALSO. Por ejemplo: a  (ã v e)  ē es una falacia. Sea FBF el
problema de determinar las fórmulas booleanas que son falacias. Demuestre
que FBF es NP-completo. Indicación: reduzca SAT a FBF.

Problema 4
El problema ISO, de isomorfismos entre grafos, es tal que dados dos grafos
G1 y G2 determinar si G2 es un subgrafo de G1. Pruebe que este problema es
NP-completo. Indicación: reduzca k-CLIQUE a ISO.

Problema 5
Defina formalmente problema NP-completo y entregue un ejemplo. ¿Por qué es
importante el estudio de estos problemas en las ciencias de la computación?

Problema 6
Defina las clases de problemas P, NP y NPC según la eficiencia de sus
soluciones (¿a qué se refiere una solución eficiente?); de un ejemplo de
cada clase y explique por qué dicho ejemplo pertenece a tal clase. Explique
en qué consiste la conjetura P ≠ NP y comente sobre la importancia que
tiene dicha afirmación desde un punto de vista práctico.

Problema 7
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

a) ¿Cuál es la definición clásica de eficiencia? Explique una de las


falencias de esta definición.
b) Enuncie la definición de un problema intratable, indique las
implicaciones a nivel práctico.
c) ¿Cuál es la diferencia entre la teoría de la computabilidad y la teoría
de la complejidad?
d) Explique el concepto de complejidad parametrizada y entregue un ejemplo.
e) ¿Cuáles son las ventajas/desventajas de usar algoritmos de aproximación
para problemas intratables?
f) ¿Qué implica en términos prácticos que un problema tiene una complejidad
parametrizada?
g) Explique las condiciones que deben cumplirse para que aplicar un enfoque
de programación dinámica sea factible en el diseño de un algoritmo.
h) Defina problema pseudopolinómico. Entregue un ejemplo de un problema con
tiempo de ejecución pseudopolinómico y uno con tiempo de ejecución
polinómico.
i) ¿Qué condiciones deberían cumplirse para que aplicar un algoritmo de
aproximación a un problema intratable sea una solución apropiada?

Problema 8
El problema KNAPSACK pregunta si existe un subconjunto de {a1,...,an}
(enteros no negativos) que sume K. Demuestre que KNAPSACK es NP-completo.
Problema 9
Dado un grafo dirigido G, al problema de si existe un circuito dirigido que
pase por todos sus vértices una sola vez lo llamamos DIRECTED-HAMILTON-
CIRCUIT. Al mismo problema en un grafo no dirigido lo llamamos HAMILTON-
CIRCUIT. Demuestre que este problema es NP-completo.
Problema 10
G=(V,E) es un grafo completo con un costo c(e) definido sobre E. Existe un
circuito hamiltoniano cuyo costo no supera a B? A este problema lo llamamos
TSP DECISION. Demostrar que este problema es NP-completo.
Problema 11
Un camino hamiltoniano en un grafo G es un camino que pasa por todos los
vértices una sola vez. El problema HAMILTON-PATH pregunta si un grafo tiene
un camino hamiltoniano. Demostrar que este problema es NP-completo.

Problema 12
Sea U un conjunto finito y F una familia de subconjuntos de U. Llamamos
EXACT-COVER al problema: Existe una subfamilia de F que forme una partición
de U. Demuestre que este problema es NP-completo.

Problema 13
En función de la definición de problema tratable, indique cuál de los
siguientes problemas es tratable:
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

1. Encontrar el camino más corto desde un nodo 1 a un nodo 2 en un grafo


G.
2. Buscar un elemento en un arreglo ordenado.
3. Determinar una ruta óptima en un grafo ponderado G que pase por todos
los vértices una única vez volviendo al nodo inicial.
4. Ordenamiento topológico de un DAG arbitrario.
5. Determinar el árbol de expansión mínima de un DAG arbitrario.

Problema 14
Bajo la perspectiva clásica de eficiencia, ¿cuáles de los siguientes
tiempos de ejecución son eficientes? Fundamente.
1. 𝑇(𝑛) = 𝑛2 + 𝑛!/(𝑛 − 1)!
2. 𝑇(𝑛) = 𝑛3 + 3𝑛
3. 𝑇(𝑛) = 3−𝑛 + lg(𝑛)
4. 𝑇(𝑛) = 𝑛𝑛 /𝑛!
5. 𝑇(𝑛) = 5lg(𝑛) + 𝑛
Algoritmos en Grafos
Problema 1
Aplique el algoritmo de Bellman-Ford al siguiente grafo, muestre todos los pasos utilizando el esquema de las
diapositivas.

Problema 2
Aplique el algoritmo de Floyd-Warshall al siguiente grafo, muestre todos los pasos utilizando el esquema de
las diapositivas.
Universidad Católica del Norte
Facultad de Ingeniería y Ciencias Geológicas
Departamento de Ingeniería de Sistemas y Computación

Você também pode gostar