Está en la página 1de 6

Solemne 2 PAUTA - Diseo y Anlisis de Algoritmos

Profesores: Irene Zuccar Parrini, Carlos Gmez-Pantoja (Sede Santiago)


Fecha: 29 de Octubre de 2015
Pregunta 1
Para el siguiente grafo, calcule:
a) rbol de Cobertura Mnimo: Aplique
Kruskal.
b) Todos los caminos mnimos desde el
nodo 1. Aplique Dijkstra.
NOTA: Para a) no considere las direcciones de
los arcos.

Desarrollo
a) rbol de Cobertura Mnimo: Aplique Kruskal.
Considerando el grafo no dirigido de la derecha:
Sus aristas ordenadas en forma creciente son:
Q = {(5,6)5, (3,5)6, (1,4)7, (1,2)8, (3,6)9, (2,3)10,
(4,5)11, (2,5)12, (3,4)14}

Extrayendo cada arista de Q, desde la primera posicin, y agregndola al siguiente esquema,


el ACM (de costo total 36) ser:
10
8
6

b) Todos los caminos mnimos desde el nodo 1. Aplique Dijkstra.


Considerando el grafo dirigido original:

18 (2)
21 (4)
(1)

8 (1)

(1)
27 (3)
23 (5)

(1)
18 (4)

7 (1)

Reconstruyendo los caminos:


Caminos:

Costos:

12

12

13

123

18

14

14

15

145

18

16

1456

23

Pregunta 3
Parte 1. A continuacin se presenta un algoritmo para encontrar la distancia ms corta
existente en un conjunto de puntos en dos dimensiones.
DistanciaMasCortaEntrePuntos(P)
dmin
for i=1 to n-1 do
for j i + 1 to n do
d sqrt((xi xj)2 + (yi yj)2)
if (d < dmin)
dmin d

Indique la complejidad de este algoritmo, justificando los clculos.


Desarrollo
DistanciaMasCortaEntrePuntos(P)
k
dmin
k
k
for i=1 to n-1 do 2k (por el i++ implcito en el for)
k k
k
for j = i+1 to n do 2k (por el j++ implcito en el for)
k
k
k
k
k
k
d sqrt((xi xj)2 + (yi yj)2)
k
k
if (d < dmin)
dmin d k

La complejidad T(n) es:


1

() = 2 + (3 + + (12) + ) +
=1

=+1
1

() = 3 + (5 + 12( ))
=1

() = 3 + 5( 1) + 12( 1)
=1

( 1)
() = 3 + 5 5 + 12 12
2
2

() = 122 7 2

2
+
2 2
3

() = (12 ) 2 + (7 + ) 2
2
2
Parte 2. Considere ahora la siguiente versin del algoritmo de la (Preg 1) para puntos sobre
una recta (i.e. una sola dimensin)
DistanciaMasCortaEntrePuntos (P)
dmin
for i 1 to n-1 do
for j i + 1 to n do
d sqrt ((xi xj) 2)
if d < dmin
dmin d

Proponga un algoritmo que ocupe una estrategia dividir y conquistar que permita encontrar
la distancia ms corta entre pares de puntos en una dimensin.

Desarrollo
Inicialmente:
inicio = 1
fin = n
P: Arreglo con los n puntos.
P = QuickSort(P); //Se ordenan los n puntos
function MasCercanos(Num P[n], Num inicio, Num fin)
{
SI (fin == inicio) ENTONCES // Si es el mismo punto, su distancia 0 no puede contar:
RETORNAR ;
// Por eso se castiga el resultado con un valor muy
// grande (es decir, ).
SI

(fin inicio == 1) ENTONCES


RETORNAR P[fin]-P[inicio]; // Como P est ordenado, esto siempre es > 0.

SINO
{
m = (inicio+fin)/2;
d1 = MsCercanos(P, inicio, m); // (DIVSIN)
d2 = MsCercanos(P, m+1, fin);
d = min(d1, d2);
// Abajo, clculo de d3: Los puntos ms cercanos podran estar en subconjuntos
distintos: por esto se escoge al mayor de los menores (puntos de la izquierda) que
corresponde a P[m] y el menor de los mayores (puntos de la derecha), que corresponde
a P[m+1], y se calcula su distancia.
d3 = P[m+1] - P[m];
SI d3 < d ENTONCES
// Luego se escoge la menor distancia. (CONQUISTA)
RETORNAR d3;
SINO
RETORNAR d;
}
}

Pregunta 3
Se dispone de una memoria cach con capacidad para almacenar k datos. Cuando la cach
recibe una solicitud di, puede que el dato ya est en la cach [hit] o que se deba buscar en
memoria [miss], en cuyo caso reemplazaremos alguno de los datos ya almacenados en la
cach por el dato que se acaba de obtener. Si se conoce de antemano el conjunto de solicitudes
que se deben atender d1, d2, , dm, disee un algoritmo greedy que minimice el nmero de
fallos de cach.
Desarrollo

Entrada: Cach[k], Solicitudes[m]


Salida: S, Conjunto que posee los componentes de la solucin al problema.
//Se asume que m > k.
AsignaEnCache()
{
SI (la Cach est sin datos) ENTONCES
Buscar en RAM las k primeras solicitudes distintas.
SINO
{
i=k+1;
MIENTRAS (i <= m) HACER
{
SI (Est_En_Cache(Cach, Solicitudes[i])) ENTONCES
Atender Solicitud i.
// Caso hit
SINO
{
// Se escoge la mejor opcin para desalojar un dato de la cach
// (Caso miss). Esa mejor opcin est en Pos dentro de la Cach,
// y corresponde a aquel dato de la cach que no ser nuevamente
// solicitado, o que ser solicitado pero en mucho tiempo ms.
Pos = Posicion_Dato_Ms_Lejano_En_Ser_Solicitado(Cache, Solicitudes);
Cach[Pos] = Solicitudes[i];
}
i++;
}
}
}

También podría gustarte