Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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
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]) xiyj
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
Problema 5
La función de Ackerman se define recursivamente del modo siguiente:
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.
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.
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:
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]
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) + 𝑓(𝑛 − 𝑚, 𝑚), 𝑠𝑖 𝑛 > 𝑚
Problema 9
Considere la conocida secuencia de Fibonacci con valores iniciales a y b
definida de la siguiente manera:
𝐹𝑛 = 𝐹𝑛−1 + 𝐹𝑛−2
𝐹0 = 𝑎
𝐹1 = 𝑏
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:
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:
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
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 𝑘
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
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
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