Está en la página 1de 14

Problemas Resueltos de Analisis y Dise no de

Algoritmos
Conrado Martnez
8 de abril de 2007

Indice general
1. Analisis de Algoritmos 2
2. Algoritmos de Divide y Venceras 3
3. B usqueda Exhaustiva 8
1
Captulo 1
Analisis de Algoritmos
2
Captulo 2
Algoritmos de Divide y
Venceras
Problema 17
1
La correccion del algoritmo se demuestra por induccion. Para los casos de
base, cuando n 2, el algoritmo es correcto por denicion. . . .
La recurrencia que describe el coste de este algoritmo es
Q(n) = (1) + 3Q(2n/3).
Siendo a = 3, b = 3/2, puesto que = log
b
a = log
3/2
3 > k = 0, la solucion es
Q(n) = (n
log
3/2
3
) = (n
2,70
)!!
1
Problema 33 de la edicion 18/2/2005.
3
Problema 18
2
El problema se resuelve trivialmente para vectores de 0, 1 y 2 elementos.
En los dos primeros casos el vector no contiene ninguna inversion, y si el vector
contiene dos elementos, habra una inversion (y solo una) cuando se hallen en
orden decreciente.
Supongamos que inversiones(v, i, j) nos proporciona la respuesta correcta
para un el subvector de v delimitado por los ndice i y j. Sea n
1
el n umero de
inversiones en el subvector v[i..k] y n
2
el n umero de inversiones en el subvector
v[k + 1..j] para i k j. Entonces el n umero total de inversiones en v[i..j] es
n
1
+ n
2
+ n(i, k, j) donde n(i, k, j) es . . .
El coste de la parte no recursiva del algoritmo es claramente (j i + 1).
Por lo tanto, el coste I(n) de inversiones para un vector de tama no n viene
dado por la recurrencia
I(n) = (n) + 2 I(n/2),
cuya solucion es I(n) = (nlog n).
2
Problema 38 de la edicion 18/2/2005.
4 c _ADA, LSI-UPC
Problema 22
3
1. Inicializamos con coste (n) una tabla pos de manera que pos[i] = i.
Ordenamos la tabla t[1..n] con un algoritmo de coste (nlog n) (p.e. mer-
gesort), pero cada vez que se realice un intercambio t[i] t[j], tam-
bien hacemos el correspondiente intercambio en la tabla pos. Al terminar,
si pos[k] = i signicara que t[k] es el elemento que inicialmente se en-
contraba en la posici on i de la tabla t, cosa que expresaremos diciendo
t[k] = t
0
[i] = t
0
[pos[k]]. Puesto que t
0
[i] = t[k] ha acabado en la posicion
k eso signica que existen k1 elementos menores que el, y el ndice i hay
que contabilizarlo si y solo si i = k 1. En otras palabras, si recorremos
la tabla pos de izquierda a derecha, tendremos un elemento del conjunto
pedido cada vez que pos[k] = k 1.
2. La condicion para que un ndice i sea contabilizado es que t
0
[i] = t[k] =
k 1. Basta recorrer la tabla ordenada t y contabilizar para cuantas com-
ponentes se da la condicion.
3. Aqu la dicultad estriba en conocer cuantos elementos t[j] son menores
y ocupan una componente de ndice menor que un elemento t[i] dado.
En el apartado a) utilizamos un procedimiento de ordenacion para eva-
luar indirectamente el n umero de elementos menores que un elemento t[i],
1 i n. Ahora lo haremos de manera explcita. Nuestro objetivo sera re-
llenar una tabla c de manera que c[k] sea el n umero de elementos menores
que t[k] que ocupaban componentes de ndice menor en la tabla origi-
nal. Si logramos hacer esto, el resto del problema se resuleve razonando
de manera analoga a como hicimos en el apartado a); en concreto, solo
necesitamos detectar cuando pos[k] = c[k].
Para rellenar la tabla c[i..j] cuando n = j i + 1 > 2, dividimos la
tabla t[i..j] en dos partes t[i..m] y t[m+1..j]. Ordenamos y obtenemos la
correspondiente tabla de contadores c[i..m] y c[m+1..j] de cada mitad por
separado. Con coste (n) haremos la fusion (merge) de las dos mitades de
t, actualizando al tiempo los contadores correspondientes a c[m+1..j]. En
concreto, supongamos que fusionamos las subtablas t[i..m] y t[m + 1..j]
sobre una tabla aux[1..n]. Cuando un elemento t[k] con m + 1 k j se
a nade a aux en el procedimiento de fusion de manera que aux[] = t[k],
tomaremos debida nota con pos[i + 1] = k y c[i + 1] = c[k] + r,
siendo r un contador del n umero de elementos t[k

] con i k

m que
se han a nadido en aux. Esto ultimo reeja que el elemento t[k] que va a
pasar a estar en la posicion t[i +1] tena un cierto n umero de elementos
c[k] menores que el en t[m + 1..j] a los cuales habremos de a nadir los r
elementos de t[i..m] que tambien son menores que el. Cunado un elemento
t[k

] con i k

m se a nade a aux se actualizara pos (como en el caso


previo) y se incrementara r.
3
Problema 37 de la edicion 18/2/2005.
5 c _ADA, LSI-UPC
El algoritmo que acabamos de describir es una simple variacion de merge-
sort y su coste es (nlog n).
4. Se calcula la tabla c[1..n] como en el apartado anterior y despues bas-
tara recorrer t, contabilizando los ndices k para los cuales t[k] = c[k].
6 c _ADA, LSI-UPC
Problema 23
4
Sean A = (a
0
, . . . , a
n1
) y B = (b
0
, . . . , b
n1
) los dos vectores dados y sean
px y py dos enteros positivos tales que px+py = k 1. Sean x = a
px
e y = b
py
.
Es decir, que hay px elementos de A menores o iguales que x y py elementos
de B menores o iguales a y. Si x = y entonces x (o y) es el elemento buscado,
puesto que existen px + py = k 1 elementos en A B menores que x.
Nuestro algoritmo mantendra el invariante px+py = k1 y en todo momento
x = a
px
e y = b
py
. En cada paso, px y py se modicaran, uno al alza y el otro a la
baja, en una cierta cantidad 0 < d (k1)/2|, que ira siendo progresivamente
menor, hasta que eventualmente x = y, px+d > k1, pxd < 0, py+d > k1,
py d < 0 o d = 0.
Supongamos que x < y. Sea I(x, y) = z AB[ x z y y n(px, py) =
[I(x, y)[. La denicion de I(x, y) y n(x, y) es analoga si x > y. Continuemos con
la hipotesis de que x < y. Por denicion todos los elementos de I(x, y) pertene-
cen al subvector (a
px
, . . . , a
k1
) o al subvector (b
0
, . . . , b
py
). Mas concretamente
I(x, y) = (a
px
, . . . , a
s
) (b
t
, . . . , b
py
),
donde a
s
es el mayor elemento de A menor o igual a y, y b
t
es el menor elemento
de B mayor o igual que x. Observese que si x < y entonces n(x, y) < 2 py + 1.
Consideremos x

= a
px
e y

= b
py
, donde px

= px + d y py

= py d.
Entonces I(x

, y

) I(x, y) y n(x

, y

) n(x, y). En particular, si px

< s
o py

> t entonces claramente n(x

, y

) n(x, y) d. Si px

s y py

t
entonces n(x

, y

) = n(x, y) 2d.
El razonamiento es analogo si x > y y entonces tomamos px

= px d y
py

= py + d.
Si en cada etapa de nuestro algoritmo d se divide por la mitad, y original-
mente haba N = n(x
0
, y
0
) elementos entre x = x
0
e y = y
0
, de la propiedad
anterior se desprende que en las siguientes etapas tendramos ND, N3D/2,
N 7D/4, etc. siendo D el valor inicial de la variable d. Tras log k, el conjunto
I(x, y) contiene como mucho N 2D elementos. Si inicializamos px = k 1,
py = 0 y d = (k 1)/2| en O(log k) pasos habremos conseguido determinar el
elemento buscado: o bien x = y, o bien px + d > k 1 (entonces el elemento
buscado es x), o px d < 0 (entonces el elemento buscado sera y) o d = 0, en
cuyo caso el elemento buscado es mn(x, y).
4
Problema 39 de la edicion 18/2/2005.
7 c _ADA, LSI-UPC
Captulo 3
B usqueda Exhaustiva
Problema 21
Escena 1
Si denimos el grafo G cuyos vertices representan a los n colegas, y donde
existe una arista (u, v) si u esta enfadado con v (y viceversa), el problema de la
escena 1 (sentar a los n colegas en una mesa redonda, de manera que no se sienten
juntos dos enemistados) es equivalente al problema de Graf-Hamiltoni` a.
Escena 2
En este caso, si identicamos colores con mesas, el problema de asignar una
mesa a cada comensal (hay tres posibles mesas), de manera que no haya dos
enemistados en la misma mesa, es equivalente al problema de 3-Colorabilitat,
sobre el mismo grafo del apartado anterior.
Escena 3
Si consideramos el grafo dual de G (i.e., hay una arista de u a v si no estan
enemistados), el problema es equivalente al problema de Conjunt-Dominador.
Escena 4
Nuevamente tenemos un problema de Graf-Hamiltoni` a; los vertices son
las plazas donde hay los restaurantes, y las calles son las aristas.
Escena 5
Este problema es equivalente al de Conjunt-Dominador, siendo m el
n umero de vertices que ha de tener el subconjunto dominador.
8
Escena 6
Este problema es equivalente al de Bin-Packing. Cada contenedor se iden-
tica con una de las k sillas. La capacidad m de los contenedores se identica
con el tiempo que queda hasta el cierre del restaurante. Cada pieza se identica
con un comensal; si la medida de la pieza i es d
i
, esta se identica con el tiempo
t
i
que tarda en cenar el comensal correspondiente.
Escena 7
Este problema es quivalente al de Tripartite-Matching. Haremos la supo-
sicion de que hay n chicos, n chicas y n mesas. Identicamos C
1
con el conjunto
de chicos, C
2
con el conjunto de chicas y C
3
con el conjunto de mesitas. El
subconjunto S representa las restricciones: (u, v, t) S si y solo si el chico u y
la chica v estan dispuestos a sentarse juntos en la mesa t. Buscamos un subcon-
junto de S (i.e., una distribucion de las parejas en las mesitas que cumpla las
restricciones) de manera que cada chico, chica y mesa aparece exactamente una
vez en alguna de las ternas escogidas.
Escena 8
Escena 9
9 c _ADA, LSI-UPC
Problema 23
Dado x = G, k) construmos f(x) = K
k
, G), siendo K
k
el grafo completo
de orden k. Obviamente f(x) es computable en tiempo polinomico. Y
x Clique f(x) Subgraf-Indut
Por otra parte, dados dos grafos G
1
y G
2
el algoritmo indeterminista solo ne-
cesita adivinar la correspondencia f : V
1
V
2
de tama no [V
1
[, y vericar,
en tiempo polinomico, que (u, v) E
1
si y solo si (f(u), f(v)) E
2
. Por ejem-
plo, si los grafos se representan mediante matrices de adyacencia, el coste de la
vericacion es ([V 1[
2
).
10 c _ADA, LSI-UPC
Problema 24
Dado un grafo G, sea n su n umero de vertices. Denimos f(G) = C
n
, G),
donde C
n
es el grafo ciclo de orden n. La transformacion f es claramente compu-
table en tiempo polinomico y si G contiene un ciclo hamiltoniano entonces po-
dremos borrar todas las aristas que no formen parte del ciclo, obteniendo como
resultante un subgrafo isomorfo a C
n
. Y viceversa. Luego Graf-Hamiltoni` a
Subgraf-Esborrat. Por otro lado, es facil determinar que Subgraf-Esborrat
NP. Sea m
2
= [E
2
[ y supongamos, sin perdida de generalidad, que m
2
m
1
=
[E
1
[. El algoritmo indeterminista adivina que m
2
m
1
aristas de G
2
debe
borrar, obteniendo G

2
, y a continuacion una biyeccion entre los n
1
vertices de
G
1
y los n
1
vertices de G

2
(el borrado de una arista provoca el borrado de los
vertices que no sean ya adyacentes a ning un otro?); si hubiera un n umero de
vertices en G

2
distinto de n
1
entonces no pueden ser isomorfos. Finalmente, se
verica en tiempo polinomico que (u, v) E
1
si y solo f(u), f(v)) E

2
.
11 c _ADA, LSI-UPC
Problema 25
Una formula en forma normal conjuntiva (CNF) es de la forma:
= C
1
C
2
C
3
C
m
,
donde C
i
=
(i)
1

(i)
2

(i)
ni
, 1 i m, y cada literal
(i)
j
x
1
, . . . , x
n
, x
1
, . . . , x
n
.
. . .
12 c _ADA, LSI-UPC
Problema 26
Dada una formula
= C
1
C
2
C
3
C
m
,
donde C
i
=
(i)
1

(i)
2

(i)
3
, 1 i m, y cada literal
(i)
j
x
1
, . . . , x
n
, x
1
, . . . , x
n
,
obtenemos un sistema de inequaciones donde cada clausula C
i
origina una ine-
cuacion
y
1
+ y
2
+ y
3
1
siendo y
j
la variable x
j
correspondiente al literal
(i)
j
si no esta negado e y
j
=
1 x
j
si el literal aparece negado.
Dicho de otro modo, la matriz del sistema de inecuaciones es A = (a
ij
)
nn
con a
ij
= 1 si la variable x
j
aparece sin negar en la clausula i-esima, a
ij
= 1
si la variable x
j
aparece negada en la clausula i-esima, y a
ij
= 0 si la variable
x
j
no aparece en la clausula i-esima, y el vector

b = (b
i
)
n
se dene de manera
que b
i
= 1 el n umero de literales negados de la clausula i-esima.
Entonces 3-SAT si y solo si Ax

b tiene solucion entera. En efecto,
si es satisfactible, entonces tomando x
i
= 1 si x
i
es cierto en la asignacion y
x
i
= 0 si x
i
es falso tenemos una solucion al sistema de inecuaciones lineales.
En sentido contrario, supongamos que Ax

b tiene solucion. Entonces . . .


13 c _ADA, LSI-UPC

También podría gustarte