Está en la página 1de 2

Escuela Superior de Cómputo del Instituto Politécnico Nacional

2do Examen de Análisis de Algoritmos


Profesor: Cristhian Alejandro Ávila-Sánchez

Fecha: 23 de Mayo del 2019

Alumno: ______________________________________________________________

Grupo: ____________ No. de Boleta: ______________________________________

Alas de Tormenta: Lluvia de fuego en el cielo. Ha sido el día más aciago para la Fuerza Aérea.
Un ataque enemigo ha reducido a cenizas y escombros tanto al complejo como a los poblados
aledaños. Usted junto con sus 33 compañeros han sido enviados como refuerzos para asistir en
la contienda que sigue llevándose a cabo. Todos sus conocimientos, experiencia y pericia serán
necesarios para contener y superar este embate. Las respuestas que proveerá serán sumamente
valiosas para derrotar a la armada enemiga. Admiramos su valor. Cuídense unos a los otros.
Todos confiamos en ustedes.

Instrucciones: Por favor lea cuidadosamente cada pregunta y resuelva 4 de los siguientes 6
problemas. Cada pregunta tiene un valor de 2.5 puntos (Total de 10 puntos). ¡Mucho éxito,
comencemos!

0. Usted y sus compañeros del escuadrón son arcángeles en la tempestad. Su primer objetivo
es esquivar audazmente los disparos de los destructores y derribar a los cazas velozmente,
los cuales aparecen en medio del caos y su número parece interminable. Cada caza puede
emerger con una probabilidad 𝑝. Sea 𝑋 la variable aleatoria que determina la aparición del
número de cazas, demuestre que el valor esperado del número de cazas es 𝐸[𝑋] = 𝜆 cuando
𝑁 → ∞ (Tip: 𝑁𝑝 → 𝜆, aproximando la distribución binomial a una distribución de Poisson).
𝑁
𝑋~𝐵𝑖𝑛(𝑁, 𝑝): 𝑏(𝑋 = 𝑘) = ( ) 𝑝𝑘 (1 − 𝑝)𝑁−𝑘 ∀𝑘 = 0,1,2 … , 𝑁
𝑘
𝜆𝑘
𝑋~𝑃𝑜𝑖(𝜆): 𝑓(𝑋 = 𝑘) = 𝑒 −𝜆
𝑘!

1. Conforme se acerca a los destructores se pueden interceptar mejor sus comunicaciones. Sea
𝑓[𝑛] una señal interceptada, divise un algoritmo para encontrar rápidamente, con una
complejidad 𝑂(𝑁𝑙𝑜𝑔𝑁), el espectro de frecuencias a partir de su transformación de Fourier
para una señal de 𝑁 muestras:
𝑁−1

𝐹[𝑚] = ∑ 𝑓[𝑛]𝑒 −𝑖2𝜋𝑚𝑛/𝑁


𝑛=0

Descomponiendo la transformación en:


𝑁 𝑁
−1 −1
2 2

𝐹[𝑚] = ∑ 𝑓[2𝑘]𝑊𝑁 2𝑘𝑚 + 𝑊𝑁 𝑚 ∑ 𝑓[2𝑘 + 1]𝑊𝑁 2𝑘𝑚


𝑘=0 𝑘=0
2. Dirija a un grupo de 𝐴 aviones de su escuadrón a detener el ataque de los bombarderos sobre
los poblados. Empleando el algoritmo de multiplicación de Karatsuba, proponga una estrategia
eficiente para derribar/desactivar todas las bombas lanzadas, considerando que hay 𝑁
bombarderos y cada uno lanza 𝑀 bombas. Obtenga la complejidad del algoritmo y finalmente
derribe a los bombarderos. (Tip: considere que la base empleada del algoritmo es el número
de aviones 𝐴).

3. Momento de despejar los cielos. Proponga un algoritmo voraz para combatir a los cazas que
aun sobrevuelan los cielos utilizando ráfagas de disparos (los mísiles hay que conservarlos
para los destructores). Hay 𝑀 aviones y 𝑁 cazas. Cada avión de su escuadrón cuenta con 𝑊
disparos. Los pilotos de los cazas son muy hábiles y experimentados y por cada avión se
necesita 𝑣𝑘 disparos para derribarlos (𝑘 = 1, … , 𝑁). (Tip: recuerde el problema Knapsack).

4. La batalla se torna feroz y es sumamente extensa y devastadora. Valerosamente su escuadrón


ha hecho frente a cada amenaza, pero el combustible pronto comenzará a agotarse. Hay una
base aérea abandonada en las cercanías. Diseñe un algoritmo, utilizando programación
dinámica, que planifique el orden de reabastecimiento si cada avión (𝑘 = 1, … , 𝑁) aterriza en
diferentes tiempos 𝑠𝑘 , despega en 𝑡𝑘 y se abastece de 𝑣𝑘 unidades de combustible; buscando
maximizar el total de combustible que puede abastecerse el escuadrón. (Tip: considere la
siguiente función de optimización: 𝑂𝑃𝑇(𝑘) = 𝑚𝑎𝑥{𝑣𝑘 + 𝑂𝑃𝑇(𝑝(𝑘)), 𝑂𝑃𝑇(𝑘 − 1)}).

5. Decodificando las señales interceptadas se ha logrado encontrar los puntos débiles


(𝑑1 , 𝑑2 , … , 𝑑𝑁 ) de los destructores. Hay 𝐷 destructores en el aire, e inteligencia ha enviado un
grafo 𝐺 = (𝑉, 𝐸) (cuyos conjuntos de vértices y aristas son 𝑉 y 𝐸, respectivamente) de
distancias entre los destructores. a) Proponga un algoritmo voraz, basado el algoritmo de
Dijkstra, para encontrar la ruta mínima de un destructor a otro; b) determine el plan de ataque
del escuadrón y c) una vez ubicado cerca del destructor dispare los misiles contra los puntos
débiles, acorde a su prioridad (i.e. ordene los puntos (𝑑1 , 𝑑2 , … , 𝑑𝑁 ) utilizando el algoritmo de
ordenamiento rápido de Quicksort). ¿Cuál es la complejidad de toda esta ofensiva?).

void buscarDistanciaMinima(Grafo G, Vertice s)


{ Conjunto S= {s}; Vertice v= NULL;
while(S!=V)
{ d= seleccionarDistanciaAcumuladaMasCercana(V, S, &v, &u, dist);
// 𝑣 ∈ 𝑉, 𝑣 ∉ 𝑆. 𝑢 ∈ 𝑆. 〈𝑢, 𝑣〉 ∈ 𝐸; 𝑑 = min{𝑑𝑖𝑠𝑡[𝑣], 𝑑𝑖𝑠𝑡[𝑢] + 𝑑𝑖𝑠𝑡(< 𝑢, 𝑣 >)};
dist[v]= d; agregar(S, v); } }

void ordenarRapidamente(int *arr, int inf, int sup)


{ int p= 0;
if (inf < sup)
{ p= particionar(arr, inf, sup);
ordenarRapidamente(arr, inf, p-1);
ordenarRapidamente(arr, p+1, sup); } }

6. El derribo de los destructores ha significado la conclusión de esta contienda. Después de 36


horas de combate, las fuerzas enemigas restantes se han retirado, el viento se ha detenido y
el cielo se ha despejado. Ha sido un golpe muy duro para ambas partes. Su valor y esfuerzo
han sido excepcionales. Un nuevo amanecer se avecina y con ello una nueva esperanza.

También podría gustarte