Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

21
Primer Ex´amenParcial Algoritmos y Estructura de Datos 3 9 de Septiembre de 2015 1. (20%) Dado el siguiente grafo dirigido: (a) escribir su definici´ on matem´ atica, (b) identificar todos los componentes fuertemente conectados, (c) indicar los n´ umeros de preorden y postorden de cada v´ ertice. A B C D E F 2. (15%) Dar una descripci´ on del funcionamiento de un Heap binario con una explicaci´ on de sus operaciones b´ asicas y sus correspondientes complejidades asint´ oticas. 3. (15%) Dar una descripci´ on del funcionamiento de un estructura de datos Union-Find con una explicaci´ on de sus operaciones b´ asicas y sus correspondi- entes complejidades asint´ oticas. 4. (50%) Un grafo bipartito es un grafo G =(V,E) tal que el conjunto de v´ ertices V puede particionarse en dos conjuntos (esto es, V = A B y A B = Ø) tal que no existen aristas entre v´ ertices de un mismo conjunto (esto es, si u, v A entonces (u, v) / E, o si u, v B entonces (u, v) / E). Escribir un algoritmo de tiempo lineal que determine si un grafo no dirigido es bipartito o no.

Transcript of Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Page 1: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Primer Examen Parcial

Algoritmos y Estructura de Datos 3

9 de Septiembre de 2015

1. (20%) Dado el siguiente grafo dirigido:

(a) escribir su definicion matematica,

(b) identificar todos los componentes fuertemente conectados,

(c) indicar los numeros de preorden y postorden de cada vertice.

A

B C D

E

F

2. (15%) Dar una descripcion del funcionamiento de un Heap binario con unaexplicacion de sus operaciones basicas y sus correspondientes complejidadesasintoticas.

3. (15%) Dar una descripcion del funcionamiento de un estructura de datosUnion-Find con una explicacion de sus operaciones basicas y sus correspondi-entes complejidades asintoticas.

4. (50%) Un grafo bipartito es un grafoG = (V,E) tal que el conjunto de verticesV puede particionarse en dos conjuntos (esto es, V = A ∪ B y A ∩ B = Ø) talque no existen aristas entre vertices de un mismo conjunto (esto es, si u, v ∈ Aentonces (u, v) /∈ E, o si u, v ∈ B entonces (u, v) /∈ E).

Escribir un algoritmo de tiempo lineal que determine si un grafo no dirigidoes bipartito o no.

Page 2: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Segundo Examen Parcial

Algoritmos y Estructuras de Datos 3

4 de Noviembre de 2015

1. (15%) Dado el siguiente grafo, indicar el conjunto independiente mas grande.

A

B C D

E

F

2. (30%) Dado el algoritmo recursivo de abajo, (1) indicar la complejidad temporal asintotica en su formarecursiva, y (2) resolver la recursion indicando paso a paso como se llego a la solucion.

1: procedure IMPRIME(n)2: if n = 0 then3: return null4: for i← 1 to n do

5: PRINT(“hola mundo”)

6: IMPRIME("n/2#)

3. (30%) Dado el algoritmo recursivo de abajo, (1) indicar la complejidad temporal asintotica en su formarecursiva, y (2) resolver la recursion indicando paso a paso como se llego a la solucion.

1: procedure IMPRIME2(n)2: if n = 0 then

3: return null4: PRINT(“hola mundo”)5: IMPRIME2(n− 1)6: IMPRIME2(n− 1)

4. (25%) El problema de la subsecuencia comun mas larga consiste en, dadas dos cadenas x = x1 · · ·xn ey = y1 · · · ym, encontrar la longitud de la subsecuencia mas larga contenida en x e y.

Define L(i, j) como la longitud de la subsecuencia comun mas larga contenida en los prefijos x = x1 · · ·xi

e y = y1 · · · yj . Utilizando programacion dinamica tenemos que

L(i, j) =

{

L(i− 1, j − 1) + 1 si xi = yjmax{L(i− 1), L(j − 1)} si xi %= yj .

(1) Identifica los casos bases de L(i, j) y (2) escribe un algoritmo que compute L(i, j) y demuestra que sucomplejidad asintotica es O(nm).

Page 3: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Primer Examen Final

Algoritmos y Estructuras de Datos 3

4 de Diciembre de 2015

En todos los temas del examen cada respuesta requiere de (1) pseudocodigo bien escrito, (2) una explicaciondel pseudocodigo en un castellano claro y simple, (3) el analisis de complejidad, y (4) una justificacion de lacorrectitud del algoritmo solicitado.

1. (30%) Dado un numero de n bits en base 10, construir un algoritmo de tiempo lineal que retorne en base10 la potencia de 2 mas pequena que sea mayor o igual a x. Por ejemplo, si la entrada del algoritmo es elnumero 6, entonces la salida del algoritmo debera de ser 8; otro ejemplo, si la entrada es 9, la salida debeser 16.

2. (30%) Dado un grafo no dirigido G = (V,E) y una arista e ∈ E, disenar un algoritmo que en tiempolineal determine si G tiene un ciclo que contiene a e.

3. (40%) Dado un grafo no dirigido G = (V,E), un triangulo es un subgrafo conexo de G con exactamentetres vertices. Decimos que G es libre de triangulos si no contiene ningun triangulo. Disenar un algoritmoque determine si un grafo G es libre de triangulos. El algoritmo debe de retornar “No hay triangulos” si noexiste ningun triangulo, o si existe un triangulo, retorna los vertices del triangulo.

Page 4: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Segundo Examen FinalAlgoritmos y Estructuras de Datos 3

18 de Diciembre de 2015

En todos los temas del examen cada respuesta requiere de

(1) pseudocodigo bien escrito y detallado,

(2) una explicacion del pseudocodigo en un castellano claro y simple,

(3) el analisis de complejidad paso por paso, y

(4) una justificacion de la correctitud del algoritmo solicitado.

1. (30%) Disena un algoritmo de tiempo lineal que resuelva la siguiente tarea. Dado un grafo G = (V,E)

conexo, el algoritmo debe decidir si existe una arista e 2 E que pueda ser removida de G de tal forma que

el grafo resultante G0= (V,E � {e}) siga siendo conexo. En particular, el algoritmo retorna 1 si tal arista

existe, y 0 en caso contrario.

2. (30%) Dado un grafo G (que puede ser conexo o no), definimos la distancia mınima �(u, v) entre dos

vertices u y v de G como el numero de aristas en el camino mas corto entre u y v. El diametro de G se

define como D = maxu,v �(u, v). Escribe un algoritmo que compute el diametro de G.

3. (40%) Sea A un arreglo en el cual las primeras n celdas contienen enteros ordenados ascendentemente y

el resto de las celdas contienen NULL. No se conoce el valor de n. Escribir un algoritmo de tiempo O(log n)

que toma un entero x como entrada y encuentra la posicion en el arreglo A que contiene a x, si es que existe.

Ejemplo. Si A = [2, 5, 7, 9, NULL,NULL, . . .], entonces n = 4. Si la entrada es x = 5, el algoritmo debe

de retornar 1, porque A[1] = 5; si la entrada es x = 6, entonces el algoritmo debe retornar NULL.

Observacion. Recuerda que n NO es un parametro del algoritmo y que algoritmo debe de ser en tiempo

O(log n).

Page 5: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Segundo Examen Parcial

17 de Noviembre de 2016

1. (30%) Dado el grafo no dirigido de abajo:

(a) Identificar un conjunto independiente de tamano maximo. Un conjunto independiente

es un subconjunto S de vertices tal que para cualquier u, v ∈ S tenemos que {u, v} /∈ E.(un grafo puede tener mas de un conjunto independiente de tamano maximo).

(b) Identificar un corte de tamano mınimo. Dado una particion A,B de los vertices, uncorte de un grafo es un subconjunto de aristas C tal que {u, v} ∈ C si y solo si u ∈ Ay v ∈ B. El corte mınimo es el corte de menor tamano (un grafo puede tener mas deun corte mınimo).

(c) Identificar una cobertura de tamano mınimo. Una cobertura de un grafo es un sub-conjunto de vertices S tal que si {u, v} ∈ E entonces u ∈ S o v ∈ S, esto es, S es unsubconjunto de vertices donde cada arista del grafo es incidente a algun vertice en S.(un grafo puede tener mas de una cobertura de tamano mnimo)

A

B C D

E

F

G H

2. (35%) Escribir un algoritmo de tiempo lineal para el siguiente problema. Dado un grafoG = (V,E) y una arista e ∈ E, determinar si e pertenece a un ciclo en G o no. En particular,el algoritmo debera retornar como respuesta “e pertenece a un ciclo” en caso afirmativo,y “e no pertenece a un ciclo” en caso negativo. Hacer el calculo de la complejidad yargumentar la correctitud del algoritmo.

3. (35%) Escribir un algoritmo de tiempo lineal para el siguiente problema. Dado un grafono dirigido conexo G = (V,E), determinar si existe una arista que pueda removerse de G detal forma que el grafo resultante siga siendo conexo. El algoritmo debera retornar “si” encaso afirmativo, y “no” en caso negativo. Hacer el calculo de la complejidad y argumentarla correctitud del algoritmo.

Page 6: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Facultad Politecnica Universidad Nacional de Asuncion

Algoritmos y Estructuras de Datos 3

Primer Examen Final

2 de Diciembre de 2016

1. (30%) Recursiones

Para las dos subrutinas de abajo, IMPRIME e IMPRIME2, (a) escribir la recursion T (n) que caracteriza lacomplejidad temporal, y (b) resolver las recursiones obtenidas detallando el metodo utilizado.

1: procedure IMPRIME(int n)2: if n = 0 then3: return null4: for i← 1 to n do5: PRINT(“hola mundo”)

6: IMPRIME("n/2#)

1: procedure IMPRIME2(int n)2: if n = 0 then3: return null4: PRINT(“hola mundo”)5: IMPRIME2(n− 1)6: IMPRIME2(n− 1)

2. (30%) Programacion Dinamica y Fibonacci

Una secuencia de Fibonacci es una secuencia de numeros naturales donde el n-esimo elemento Fn de lasecuencia es igual a la suma de los dos elementos anteriores en la secuencia (se define F0 = F1 = 0).

(a) Escribir la formulacion de programacion dinamica para calcular Fn. (10%)

(b) Construir un algoritmo (pseudocodigo) que tome como entrada un entero positivo n y retorne Fn entiempo lineal en n. Hacer el analisis de complejidad y argumentar su correctitud. (20%)

3. (20%) Matchings Perfectos

(a) Dado el grafo de la Figura 1, indicar un matching perfecto. Un matching perfecto es un conjunto dearistas que toca cada vertice del grafo exactamente una vez. (10%)

(b) Dado un arbol (grafo conexo no dirigido y acıclico), construir un algoritmo (pseudocogico) de tiem-po lineal que determine si el arbol tiene un matching perfecto. Hacer el analisis de complejidad yargumentar su correctitud. (10%)

A

B C D

E

F

G H

Figura 1: Grafo no dirigido.

4. (20%) Cuadrados de Grafos Dirigidos

El cuadrado de un grafo dirigido G = (V,E) es un grafo dirigido G2 = (V,E2) tal que (u, v) ∈ E2 si y solosi G contiene un camino a lo sumo de longitud dos entre u y v (esto es, a lo sumo dos arcos). Construir unalgoritmo (pseudocodigo) que compute G2 a partir de una representacion de lista de adyacencia de G. Hacerel analisis de complejidad y argumentar su correctitud.

Page 7: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Facultad Politecnica Universidad Nacional de Asuncion

Algoritmos y Estructuras de Datos 3Segundo Examen Final

16 de Diciembre de 2016

1. (30%) Induccion

Demostrar por induccion los siguientes dos hechos.

(a)Pn

i=1 i · 2i = (n� 1)2n+1 + 2.

(a) El numero de hojas en un arbol de aridad b y altura h es bh.

2. (20%) Estructuras de Datos

Indicar el estado de la estructura de datos Union-Find (o conjuntos disjuntos del ingles disjoint-sets) luegode la secuencia de operaciones de abajo, comenzando con los conjuntos {1}, {2}, . . . , {8}. En caso de empates,hacer que la raız con menor valor siempre apunte a una raız de mayor valor.

union(1,2), union(3,4), union(5,6), union(7,8), union(1,4), union(6,7), union(4,5), find(1)

3. (20%) Duplicados

Sea A un arreglo de n numeros naturales, donde algunos numeros son duplicados; esto es, algunos numerosaparecen mas de una vez en el arreglo. Escribir un algoritmo (pseudocodigo) de tiempo O(n log n) que tomecomo entrada A y retorne un arreglo nuevo con todos los duplicados removidos.

4. (30%) Caminos Cortos en Grafos

(a) Construir un grafo dirigido con pesos positivos y mostrar en ese grafo como el algoritmo de Dijkstraencuentra el camino mas corto y como una estrategia “greedy” falla en encontrar el camino mas corto.Explicar porque el algoritmo de Dijkstra funciona y porque el algoritmo “greedy” no funciona.

(b) Sea G = (V,E) un grafo dirigido fuertemente conectado con arcos de costos positivos y sea v0 unvertice. Construir un algoritmo (pseudocodigo) que tome como entrada G y v0 y que encuentre todoslos caminos cortos entre cada par de vertices, con la restriccion que todos los caminos deben de pasarpor v0.

Page 8: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Primer Examen Parcial

15 de Septiembre de 2017

1. (20%) Un bacterıa X se reproduce creando dos copias identicas y luego se destruye. Sabemos que al

colocar la bacterıa X en un jarro, este se llena luego de 30 minutos. ¿En cuantos minutos se llena un jarro

del mismo tamano si colocamos dos bacterıas X identicas? Explique su respuesta.

2. (30%) Dado un grafo G = (V,E), una cobertura de vertices (del inges vertex cover) es un subconjunto

V0de V donde cada arista uv 2 E tiene una punta u 2 V

0o v 2 V

0.

(a) Construir un ejemplo de un grafo conexo simple de 6 vertices que tenga una cobertura de vertices de

tamano exactamente 3.

(b) Dar un algoritmo que tome como entrada el grafo G como lista de adyacencia y un entero positivo k

y retorne una cobertura de tamano exactamente k si existe; si no existe tal cobertura que retorne “no

existe una cobertura de tamano k”. (1) Dar una descripcion textual del algoritmo acompanado de un

pseudocodigo; (2) por lo menos un ejemplo o diagrama que ilustre como funciona el algoritmo; y (3)

un analisis de la complejidad temporal del algoritmo.

(d) ¿Hay una diferencia en la complejidad si G se representa con una matriz de adyacencia? Explique.

3. (30%) Dado un vector v de n elementos donde cada elemento es un numero natural. Un pico es una

posicion i del vector donde v[i � 1] v[i] y v[i + 1] v[i]. Utiliza divide y conquistaras para escribir

un algoritmo de tiempo O(log n) para encontrar un pico en el vector v. (1) Dar una descripcion textual

del algoritmo acompanado de un pseudocodigo; (2) por lo menos un ejemplo o diagrama que ilustre como

funciona el algoritmo; y (3) un analisis de la complejidad temporal del algoritmo.

Page 9: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Facultad Politecnica Universidad Nacional de Asuncion

Algoritmos y Estructuras de Datos 3Primer Examen Final

24 de Noviembre de 2017

1. (25%) La Plaza Cuadrada. La plaza de la ciudad de Berland tiene una forma rectangular de tamanon⇥m metros. En el aniversario de la ciudad, se decidio pavimentar la plaza con piedras de granito de formacuadrada. Cada piedra tiene un tamano de a⇥ a metros.

¿Cual es el numero mınimo de piedras necesarias para pavimentar la plaza? Esta permitido cubrir unasuperficie mayor a la plaza, pero toda la plaza debe cubrirse. No se puede romper las piedras y los lados decada piedra deben ser paralelos a los lados de la plaza.

Dar un algoritmo que tome como entrada n,m y a como enteros positivos y retorne el numero necesariode piedras que cubren la plaza. Presentar (1) un pseudocodigo del algoritmo, (2) un diagrama o ejemplo quemuestre como el algoritmo funciona, y (3) un analisis de la complejidad temporal del algoritmo.

2. (25%) El diametro de un arbol T = (V,E) se define como maxu,v2V �(u, v), donde �(u, v) es el costodel camino mas corto entre u y v; entonces, el diametro es el costo maximo entre todos los caminos cortos.Construir un algoritmo eficiente que tome como entrada un arbol T con costos (posiblemente negativos) ycompute (retorne) el diametro de T . Presentar (1) un pseudocodigo del algoritmo, (2) un diagrama o ejemploque muestre como el algoritmo funciona, y (3) un analisis de la complejidad temporal del algoritmo.

3. (25%) Supongamos que un patron P contiene ocurrencias de un caracter 3 que puede emparejarse concualquier cadena de caracteres (incluso con cadenas de longitud cero). Por ejemplo, el patron ab3ba3cocurre en el texto cabccbacbacab como

c ab cc ba cba c abab 3 ba 3 c

y tambien como

c ab ccbac ba c abab 3 ba 3 c

El caracter 3 puede ocurrir un numero arbitrario de veces en el patron P pero no debe de aparecer enel texto. Dar un algoritmo de tiempo polinomial que tome como entrada un texto T y un patron P con unnumero arbitrario de 3 y que retorne si el texto T contiene al patron P . Presentar (1) un pseudocodigodel algoritmo, (2) un diagrama o ejemplo que muestre como el algoritmo funciona, y (3) un analisis de lacomplejidad temporal del algoritmo.

4. (25%) Supongase que se debe elegir entre uno de los tres algoritmos siguientes:

• El algoritmo A resuelve problemas al dividirlos en cinco subproblemas de la mitad de tamano, resol-viendo cada subproblema recursivamente, y luego combinando las soluciones en tiempo lineal.

• El algoritmo B resuelve problemas de tamano n al resolver recursivamente dos subproblemas de tamanon-1 y luego combinando las soluciones en tiempo constante.

• El algoritmo C resuelve problemas de tamano n al dividirlos en nueve subproblemas de tamano n/3,resolviendo cada subproblema recursivamente, y luego combinando las soluciones en tiempo O(n2).

¿Cuales son los tiempos de ejecucion de cada uno de estos algoritmos (en notacion big-O), y cual de elloselegirıa en funcion a cual es mas rapido? Argumente su respuesta.

Page 10: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Facultad Politecnica Universidad Nacional de Asuncion

Algoritmos y Estructuras de Datos 3Segundo Examen Final

22 de Diciembre de 2017

1. (25%) Grafos I. Tenemos tres contenedores de 10 litros, 7 litros, y 4 litros, respectivamente. Los con-

tenedores de 7 y 4 litros comienzan llenos de agua, pero el contenedor de 10 litros comienza vacıo. Solo

tenemos un tipo de operacion: poner el contenido de un contenedor en otro, parando solo cuando el conte-

nedor que tenıa agua se vacio o el contenedor de destino se lleno. Queremos saber si hay o no una secuencia

de operaciones que deja exactamente 2 litros en el contenedor de 7 litros o de 4 litros (o en ambos).

(a) Modela este problema como un problema de grafos. Escribe una definicion formal del grafo involucrado

y escribe la pregunta especıfica sobre este grafo que debe responderse.

(b) ¿Cual es la respuesta del problema? En terminos del grafo construido y la especificacion de arriba.

(c) ¿Que algoritmo se deberıa de utilizar para resolver este problema? Justifique su respuesta.

2. (25%) Divide y Venceras. Dado un arreglo ordenado de enteros A[1 . . . n] queremos saber si hay o no

un ındice i tal que A[i] = i.

(a) Construye un algoritmo que utilice divide y venceras y que corra en tiempo O(log n). Presentar un

pseudocodigo del algoritmo y un analisis de la complejidad temporal.

3. (25%) Grafos II. Tenemos un grafo no dirigido G = (V,E) donde el conjunto de vertices son ciudades

y las aristas representan autopistas. Cada autopista e 2 E conecta dos ciudades, y conocemos la distancia

en kilometros ke. Queremos llegar de una ciudad s a una ciudad t. Pero hay un problema: el tanque de

combustible de nuestro automovil solo tiene capacidad hasta K kilometros. Hay una gasolinera en cada

ciudad, pero no hay gasolineras en las autopistas. Entonces, solo podemos tomar una autopista si su arista

tiene ke K.

(a) Considerando la capacidad del automovil, construye un algoritmo de tiempo lineal que determine si

hay un camino entre s y t. Presentar un pseudocodigo del algoritmo y un analisis de la complejidad

temporal.

4. (25%) Arbol de Busqueda Binario (BST). Contesta las preguntas de abajo.

(a) Para el conjunto de claves {1, 4, 5, 10, 16, 17, 21}, dibuja arboles binarios de busqueda de altura 2, 3, 4,

5, y 6.

(b) ¿Cual es la diferencia entre la propiedad de un BST y la propiedad de un min-heap?

(c) ¿Se puede utilizar la propiedad del min-heap para imprimir claves de forma ordenada en tiempo O(n)

si el arbol tienen n nodos? Explique por que si o por que no.

Page 11: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3

Primer Examen Parcial

14 de Septiembre de 2018

1. (25%) Arboles de Expansion Mınimos (MST)Contesta los ıtems de abajo con falso o verdadero. En cada caso, si la respuesta es verdadera dar una

demostracion, y si es falsa dar un contraejemplo. En todos los casos suponer que el grafo G = (V,E) es nodirigido.

(a) Si G tiene mas de |V | − 1 aristas y su arista mas costosa es unica, entonces esta arista no puede serparte de un MST.

(b) Si G tiene un ciclo que contiene a la unica arista e mas costosa de G, entonces e no puede ser parte deningun MST.

(c) Sea e una arista de peso mınimo en G. Entonces e es parte de algun MST.

(d) Si la arista mas barata de G es unica, entonces es parte de cada MST.

(e) El arbol de caminos cortos computados por el algoritmo de Dijkstra es necesariamente un MST.

(f) El camino mas corto entre dos vertices es necesariamente parte de un MST.

2. (25%) Un matching perfecto en un grafo es un conjunto de aristas que toca cada vertice del grafoexactamente una vez. Dar un algoritmo de tiempo lineal que tome como entrada un arbol T y responda “si”si T tiene un matching perfecto y “no” si T no tiene un matching perfecto.

Puntuacion del ejercicio. 75% correctitud del algoritmo dentro del tiempo requerido, 15% analisis decomplejidad, 5% explicacion breve del algoritmo, 5% claridad en la presentacion.

3. (25%) Hay k arreglos ordenados, cada arreglo con n numeros. Escribir un algoritmo para “fusionar”todos estos arreglos en un solo arreglo ordenado de numeros en tiempo O(nk log k).

Puntuacion del ejercicio. 75% correctitud del algoritmo dentro del tiempo requerido, 15% analisis decomplejidad, 5% explicacion breve del algoritmo, 5% claridad en la presentacion.

4. (25%) Heaps

1. Dibuja el arbol binario min-heap que resulta al insertar 11, 9, 12, 14, 3, 15, 7, 8, 1 en ese orden en unheap binario inicialmente vacıo.

2. Dibuja el arbol binario min-heap que resulta luego de hacer dos operaciones delete-min en el heapque creaste en el punto 1.

Page 12: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Segundo Examen Parcial

9 de Noviembre de 2018

1. (20%) Programacion Dinamica I. Sean x = x1 . . . xn e y = y1 . . . ym dos cadenas de longitud n y m,respectivamente. Escribir la formulacion de programacion dinamica que calcula la distancia de edicion (editdistance) entre x e y. Luego escribir la tabla de memoizacion completa para x = fisica e y = logica.

2. (20%) Programacion Dinamica II. El problema de la subsecuencia incremental de suma maximaconsiste en, dado un vector de numeros enteros A[1..n] = [a1, a2, . . . , an], encontrar una subsecuencia in-cremental ai1 , ai2 , . . . aik donde 1 i1 < · · · < ik n cuya suma ai1 + · · · aik sea maxima. Escribir laformulacion de programacion dinamica y dar un algoritmo de tiempo O(n2) para este problema basado enesa formulacion.

Puntuacion del ejercicio. 50% formulacion de programacion dinamica, 50% correctitud del algoritmodentro del tiempo requerido de acuerdo a la formulacion de programacion dinamica.

3. (20%) Reconocimiento de Patrones I. En clases se vio que el algoritmo naıve de reconocimiento depatrones tiene un tiempo de ejecucion O(nm) donde n es la longitud del texto T y m la longitud del patronP que se busca. Si suponemos que todos los sımbolos del patron P son diferentes, escriba un algoritmo quemodifique el algoritmo naıve para que su tiempo de ejecucion sea O(n) para un texto T de longitud n.

Puntuacion del ejercicio. 75% correctitud del algoritmo dentro del tiempo requerido, 15% analisis decomplejidad, 5% explicacion breve del algoritmo, 5% claridad en la presentacion.

4. (20%) Reconocimiento de Patrones II. Si trabajamos modulo q = 11, ¿cuantos aciertos espurios(spurious hits) encuentra el algoritmo de Karp-Rabin en el texto T = 3141592653589793 cuando busca elpatron P = 26?

5. (20%) Arboles AVL. Reproducir de forma completa la demostracion por induccion vista en clase endonde se prueba que la altura de un arbol AVL con n nodos es O(log n). Puedes utilizar, sin necesidad

de demostrar, el hecho que Fk = ((1+p5)/2))k�((1�

p5)/2)k

2 donde Fk es el k-esimo numero en la sucesion deFibonacci.

Page 13: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Primer Examen Final

30 de Noviembre de 2018

1. (20%) Contesta los ıtems de abajo con falso o verdadero. En cada caso, justifique su respuesta.

1. El siguiente arreglo es un max-heap binario: [10, 3, 5, 1, 4, 2].

2. Dado un grafo dirigido G = (V,E), construimos un grafo G0= (V

0, E

0) como sigue. Cada vertice

u0 2 V

0representa un componente fuertemente conectado (CFC) de G. Hay un arco (u

0, v

0) 2 E

0si

existe un arco en G desde el CFC que corresponde a u0al CFC que corresponde a v

0. Entonces, el

grafo G0es un grafo dirigido acıclico.

3. Sean G = (V,E,w) y G0= (V,E,w

0) dos grafos no dirigidos y con pesos positivos que tienen los

mismos vertices y aristas donde para cada arista e se cumple w0(e) = w(e)

2. Para cualesquiera

u, v 2 V , cualquier camino corto entre u y v en G0es tambien un camino corto en G.

2. (20%) Programacion Dinamica. El problema del cambio de moneda consiste en lo siguiente. Dado un

objetivo de n guaranıes y una lista de denominaciones de moneda m1, . . . ,mk, encontrar el numero mınimo

de monedas que se debe usar para representar n. Escribir la formulacion de programacion dinamica para

este problema y dar un algoritmo de tiempo O(n2) basado en esa formulacion.

Puntuacion del ejercicio. 50% formulacion de programacion dinamica, 50% correctitud del algoritmo

dentro del tiempo requerido de acuerdo a la formulacion de programacion dinamica.

3. (20%) Dar un algoritmo que encuentra el segundo elemento mas pequeno en un vector de n elementos

utilizando a lo sumo n+ dlog ne comparaciones. Pista: utiliza divide y conquistaras ¿Donde esta el segundo

elemento mas pequeno?

Puntuacion del ejercicio. 75% correctitud del algoritmo dentro del tiempo requerido, 15% analisis de

complejidad, 5% explicacion breve del algoritmo, 5% claridad en la presentacion.

4. (20%) Sea G = (V,E) un grafo dirigido y ponderado con pesos positivos. La gordura de un camino P

en G es el peso maximo de cualquier arco en P . Dados G y dos vertices u y v, muestra como modificar el

algoritmo de Dijkstra presentando un pseudocodigo para que encuentre un camino de gordura mınima de u

a v en G.

Puntuacion del ejercicio. 75% correctitud del algoritmo, 15% analisis de complejidad, 5% explicacion

breve del algoritmo, 5% claridad en la presentacion.

5. (20%) En un arbol binario de 26 vertices cada vertice esta etiquetado con una letra del alfabeto. Las

secuencias de preorden y postorden de los vertices son las siguientes:

preorden: M N H C R S K W T G D X I Y A J P O E Z V B U L Q Fpostorden: C W T K S G R H D N A O E P J Y Z I B Q L F U V X M

Dibujar el arbol binario.

Page 14: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Segundo Examen Final

14 de Diciembre de 2018

1. (20%) Induccion

Demostrar por induccion los siguientes dos hechos.

(a)Pn

i=1 i · 2i = (n� 1)2n+1 + 2.

(a) El numero de hojas en un arbol de aridad b y altura h es bh.

2. (20%) Estructuras de Datos

Indicar el estado de la estructura de datos Union-Find (o conjuntos disjuntos del ingles disjoint-sets) luego dela secuencia de operaciones de abajo, comenzando con los conjuntos {1}, {2}, . . . , {8}. En caso de empates,hacer que la raız con menor valor siempre apunte a una raız de mayor valor.

union(1,2), union(3,4), union(5,6), union(7,8), union(1,4), union(6,7), union(4,5), find(1)

3. (20%) Duplicados

Sea A un arreglo de n numeros naturales, donde algunos numeros son duplicados; esto es, algunos numerosaparecen mas de una vez en el arreglo. Escribir un algoritmo (pseudocodigo) de tiempo O(n log n) que tomecomo entrada A y retorne un arreglo nuevo con todos los duplicados removidos.

4. (20%) Recursiones

Para las dos subrutinas de abajo, IMPRIME e IMPRIME2, (a) escribir la recursion T (n) que caracteriza lacomplejidad temporal, y (b) resolver las recursiones obtenidas detallando el metodo utilizado.

1: procedure IMPRIME(int n)2: if n = 0 then3: return null4: for i 1 to n do5: PRINT(“hola mundo”)

6: IMPRIME(bn/2c)

1: procedure IMPRIME2(int n)2: if n = 0 then3: return null4: PRINT(“hola mundo”)5: IMPRIME2(n� 1)6: IMPRIME2(n� 1)

5. (20%) Arbol de Busqueda Binario (BST). Contesta las preguntas de abajo.

(a) Para el conjunto de claves {1, 4, 5, 10, 16, 17, 21}, dibuja arboles binarios de busqueda de altura 2, 3, 4,5, y 6.

(b) ¿Cual es la diferencia entre la propiedad de un BST y la propiedad de un min-heap?

(c) ¿Se puede utilizar la propiedad del min-heap para imprimir claves de forma ordenada en tiempo O(n)si el arbol tienen n nodos? Explique por que si o por que no.

Page 15: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Primer Examen Parcial

13 de Septiembre de 2019

1. (25%) Contesta los ıtems de abajo con falso o verdadero. En cada caso, justifica tu respuesta.

(a) El orden topologico de un grafo dirigido acıclido G = (V,E) puede ser computado en tiempo lineal.

(b) El camino mas corto entre dos vertices es unico si los costos de las aristas son distintos.

(c) Un grafo no dirigido G = (V,E), con |E| = |V | es un arbol.

(d) Un grafo dirigido es fuertemente conexo si y solo si DFS puede comenzar desde un vertice cualquieray visitar todos los vertices del grafo sin la necesidad de reiniciar DFS.

(e) En un grafo no dirigido se puede determinar en tiempo lineal si el grafo contiene ciclos o no.

(f) La complejidad del algoritmo de Dijkstra es lineal utilizando un heap binario.

2. (25%) Dar un algoritmo que encuentra el segundo elemento mas pequeno en un vector de n elementosutilizando a lo sumo n+ dlog ne comparaciones. Pista: utiliza divide y conquistaras ¿Donde esta el segundoelemento mas pequeno?

Puntuacion del ejercicio. 75% correctitud del algoritmo dentro del tiempo requerido, 15% analisis decomplejidad, 5% explicacion breve del algoritmo, 5% claridad en la presentacion.

3. (25%) Dado un grafo conexo G y un par de vertices de origen s y destino d de G. Dar un algoritmo detiempo lineal que imprima en pantalla todos los caminos entre s y d.

Puntuacion del ejercicio. 75% correctitud del algoritmo dentro del tiempo requerido, 15% analisis decomplejidad, 5% explicacion breve del algoritmo, 5% claridad en la presentacion.

4. (25%) En un arbol binario de 26 vertices cada vertice esta etiquetado con una letra del alfabeto. Elrecorrido en profundidad es el siguiente:

M N H C R S K W T G D X I Y A J P O E Z V B U L Q F

Dibujar el arbol binario.

Page 16: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Segundo Examen Parcial

29 de Noviembre de 2019

1. (20%) Union-Find. Dado un grafo simple G = (V,E) no dirigido (que puede ser conexo o no)y que esta representado por su matriz de adyancencia, dar un algoritmo que toma como entradala matriz de adyacencia de G y que utilice la estructura Union-Find para determinar si G tiene unciclo o no. ¿Cual es la complejidad temporal de su algoritmo?

Obs.: Se puede suponer que ya se tiene a disposicion las subrutinas de Union-Find, makeSet paracrear la estructura, union para unir conjuntos, y find para encontrar raıces de los conjuntos.

2. (20%) Programacion Dinamica I.

El monstruo come-flores es un monstruo que le gusta comer flores. En cada comida el monstruocome-flores come flores blancas (B) y flores rojas (R). Entonces una comida puede representarsecomo una secuencia de n flores rojas y blancas. Pero el monstruo come-flores solo come unasecuencia de flores si y solo si las flores blancas en la secuencia estan agrupadas en subcadenas detamano k. Por ejemplo,

• Para k = 2 y n = 1, el monstruo come-flores puede comer solo R; no puede comer B porquek = 2 y solo hay una flor blanca.

• Para k = 2 y n = 2, el monstruo come-flores puede comer RR y BB porque k = 2; no puedecomer RB o BR.

• Para k = 2 y n = 5, el monstruo come-flores puede comer BBRBB, RBBBB, BBBBR; nopuede comer comer ninguna otra secuencia, por ejemplo BRBBB, porque las flores blancasno son subcadenas de tamano k = 2.

Notar que si en una secuencia no hay flores blancas (son todas rojas las flores), entonces elmonstruo come-flores siempre puede comer esa secuencia. Decimos que una secuencia es valida siel monstruo come-flores puede comer esa secuencia de flores.

Dado una secuencia de flores blancas y rojas de longitud n � 1 y dado k � 1, ¿cuantas secuenciasvalidas hay? Este es un problema de programacion dinamica cuya formulacion es:

M [i] = M [i� 1] +M [i� k],

donde M [i] es el numero de secuencias validas de longitud i.

1. Identificar los casos bases. Dado k, ¿cuales son los valores de M [i] para i k?.

2. Para n = 8 y k = 3, escribir la tabla de memoizacion.

3. Escribir un pseudocodigo que tome como entrada n y k y retorne el numero de secuenciasvalidas para n y k.

1

Page 17: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

3. (20%) Programacion Dinamica II.

En el problema de distancia de edicion supusimos que el costo de cada insercion, borrado oreemplazo tenıa un costo de 1. Si suponemos ahora que los costos son c1 para insercion, c2 paraborrado, y c3 para reemplazo, ¿cual es la formulacion de programacion dinamica ahora?

1. Escriba la formulacion de programa dinamica con los nuevos costos de las operaciones.

2. Identifique los casos bases.

4. (20%) Arboles AVL. Reproducir de forma completa la demostracion por induccion vista enclase en donde se prueba que la altura de un arbol AVL con n nodos es O(log n). Puedes utilizar, sin

necesidad de demostrar, el hecho que Fk = ((1+p5)/2))k�((1�

p5)/2)k

2 donde Fk es el k-esimo numeroen la sucesion de Fibonacci.

5. (20%) Redes de Flujos. En la red de flujo de abajo, con fuente A y sumidero E:

1. Realizar tres iteraciones del algoritmo de Ford-Fulkerson, indicando en cada iteracion el graforesidual, el camino de aumentacion elegido, y el flujo en esa iteracion.

2. ¿Cual es el valor del flujo maximo del grafo? ¿Como llegaste a ese valor?

A

B

C D

E

5

3

5

33

3

7

2

Page 18: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Primer Examen Final

13 de Diciembre de 2019

1. (25%) Un hipercubo de orden n es un grafo H = (V,E) donde V es un conjunto de cadenas de

bits de longitud n y hay una arista entre dos vertices u y v si y solo u y v difieren exactamente en

un bit. (Por ejemplo, para n = 3, 101 y 111 difieren solamente en el bit del medio, y por lo tanto

habrıa una arista entre 101 y 111; sin embargo, 101 y 100 difieren en dos bits y por lo tanto no

habrıa una arista entre ellos.)

Figura 1: Hipercubos de orden 1, 2 y 3.

Para un hipercubo de orden n � 2 determinar:

1. El numero de vertices.

2. El grado de cada vertice. ¿Es el hipercubo un grafo regular?. Explique su respuesta.

3. El diametro. (El diametro de un grafo es la longitud del camino mas largo en el grafo.)

Explique su respuesta.

4. La cintura. (La cintura de un grafo es la longitud de su ciclo mas corto.) Explique su respuesta.

2. (25%) Programacion Dinamica. Sean A[1..m] y B[1..n] dos vectores. Una subsecuenciacomun de A y B es una secuencia que es una subsecuencia de A y B. El problema de la subse-cuencia comun mas larga consiste en determinar la longitud de la subsecuencia comun de A y

B de mayor longitud.

1. Dar una formulacion de programacion dinamica.

2. Dar un algoritmo basado en la formulacion de programacion dinamica que toma como entrada

A y B y retorna la subsecuencia comun mas larga de A y B.

3. Hacer el analisis de la complejidad temporal del algoritmo del punto anterior.

1

Page 19: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

3. (25%) Sea G un grafo dirigido acıclico con una unica fuente s y un unico sumidero t. Un

vertice v /2 {s, t} es un vertice-corte-(s, t) si cada camino desde s a t pasa a traves de v, o

equivalententemente, si borrar v hace que t sea inalcanzable desde s. Describe y analiza un algoritmo

que toma como entrada la lista de adyacencia de G y vertices s y t e imprime en pantalla cada

vertice-corte-(s, t) en G.

Figura 2: Un grafo dirigido acıclico con tres vertice-corte-(s, t).

1. Escribir un pseudocodigo de un algoritmo que identifica los vertice-corte-(s, t).

2. Hacer el analisis de complejidad temporal del algoritmo dado en el punto anterior.

4. (25%) Sea G un grafo simple no dirigido y conexo en donde cada vertice tiene un peso positivo.

1. Dar un algoritmo que toma como entrada G y encuentra un arbol de expansion de peso

mınimo. (El peso de un arbol de expansion es la suma de los pesos de sus vertices.)

2. Dar un algoritmo que toma como entrada G y dos vertices s y t de G y encuentra un camino

de costo mınimo en G desde s a t. (El costo de un camino es la suma de los pesos de sus

vertices.) Pista: Dar una modificacion del algoritmo de Dijkstra para este problema.

2

Page 20: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Algoritmos y Estructuras de Datos 3Segundo Examen Final

10 de Enero de 2020

1. (25%) Una caminata en un grafo dirigido G = (V,E) es una secuencia arbitraria de verticesv0 ! v1 ! · · · ! vk, tal que (vi�1, vi) 2 E para todo ındice i. Un camino es una caminata endonde ningun vertice aparece mas de una vez.

Dado un grafo dirigido G = (V,E) y dos vertices s y t, describe y analiza un algoritmo paradeterminar si existe una caminata desde s a t cuya longitud es un multiplo de 3.

Por ejemplo, en el grafo de abajo, tu algoritmo debe de retornar “SI”, porque la caminatas ! w ! y ! x ! s ! w ! t tiene longitud 6.

1. Escribir un pseudocodigo de un algoritmo que retorna “SI” si un grafo tiene caminatas conlongitud un multiplo de 3, y retorna “NO” en caso contrario.

2. Hacer el analisis de complejidad temporal del algoritmo dado en el punto anterior.

2. (25%) Programacion Dinamica. Una subsecuencia es palindromica si se puede leer de lamisma forma de izquierda a derecha y de derecha a izquierda. Por ejemplo, la secuencia

A,C,G, T,G, T, C,A,A,A,A, T, C,G

tiene muchas subsecuencias palindromicas como A,C,G,C,A y A,A,A,A. (Contrariamente, lasubsecuencia A,C, T no es palindromica.)

1. Escribir una formulacion de programacion dinamica para calcular la longitud de la subse-cuencia palindromica mas larga.

2. Escribir un pseudocodigo que implemente la formulacion de programacion dinamica.

3. Hacer el analisis de complejidad temporal.

3. (25%) Sea G un grafo dirigido donde cada vertice tiene una altura h(v), y por cada arco u ! vse tiene que h(u) > h(v). Suponer que todas las alturas son distintas. La altura de un camino de ua v es la diferencia en altura h(u)� h(v).

1

Page 21: Primer Exa´men Parcial Algoritmos y Estructura de Datos 3

Describe y analiza un algoritmo para encontrar el valor de un camino de altura maxima en Gcon a lo sumo k arcos. La entrada es G, la altura de los vertices h(·), y un entero k. Por ejemplo,en el grafo dirigido de abajo con k = 3, tu algoritmo debe de retornar 8, el cual es la altura delcamino 9 ! 6 ! 5 ! 1.

1. Escribir un pseudocodigo del algoritmo para el problema de arriba.

2. Hacer el analisis de complejidad temporal del algoritmo dado en el punto anterior.

4. (25%) Escribir un algoritmo recursivo que toma como entrada un arreglo X[1..n] de enterospositivos y un entero t, y computa el numero de subconjuntos de X cuyos elementos suman t.

1. Escribir un pseudocodigo del algoritmo para el problema de arriba.

2. Hacer el analisis de complejidad temporal del algoritmo dado en el punto anterior escribiendode forma precisa la recurrencia resultante.

2