¡Descarga Ingeniería Infórmatica 02 2017 y más Exámenes en PDF de Ingeniería Infórmatica solo en Docsity!
Examen de Estructuras de Datos. Grado en Ing. Inform´atica. Febrero 2012.
- (1 punto) Rellenar la siguiente tabla con la eficiencia de las operaciones de las filas en las estructuras de datos de las columnas. El tipo de dato subyacente es siempre int.
vector ord. stack priority queue list avl tabla hash Buscar elemento Encontrar m´aximo Num. elem. en [a,b] a < b Insertar elemento Imprimir
- (1.5 puntos) Se quiere construir el tipo de dato vectorDisperso de string, que se caracteriza porque la mayor´ıa de los elementos toman un mismo valor (que llamaremos valor por defecto). Para representar dicho vector es m´as eficiente almacenar solo los elementos distintos al valor por defecto, por lo que se propone la siguiente representaci´on:
class vectorDisperso { .... private: map<int,string> M; // map donde se alojan los elementos no nulos. string v_def; // valor por defecto };
donde, para un vectorDisperso V, el elemento de la posici´on i-´esima del vector, V[i], ser´ıa: V [i] =
{ M [i] siM.f ind(i)! = M.end(). v def en caso contrario. (a) Dar una especificaci´on (sintaxis y semantica) de los 5 m´etodos que consideres m´as relevantes de ese nuevo TDA. Analizar la representaci´on propuesta y determinar la FA y el IR. (b) Implementar el m´etodo que cambie el valor por defecto del vector (hay que tener cuidado con los elementos del vector disperso anterior cuyo valor anterior fuese nv).
void vectorDisperso::cambiar_valor_defecto( const string & nv)
- (a) (2 puntos) Usando el TDA list, construir una funci´on template void dividir-lista (list & entrada, T k) que agrupe en la primera parte de la lista los elementos menores que k y en la segunda los mayores o iguales. Han de usarse iteradores, no se permite usar ninguna estructura auxiliar, no puede modificarse el tama˜no de la lista y la funci´on ha de ser O(n). P.ej. Si es una list entrada={1,3,4,14,11,9,7,16,25,19,7,8,9 } y k=8, entonces la lista quedar´ıa p.ej. como: entrada = { (^1) ︸ , 3 ,︷︷ 4 , 7 , (^7) ︸,9 ︸ , 11 , 16 , (^25) ︷︷, 19 , 14 , 8 , (^9) ︸}. (b) (1.5 puntos) Sea A un ´arbol binario con n nodos. Se define el ancestro com´un m´as cercano (AMC) entre 2 nodos v y w como el ancestro de mayor profundidad que tiene tanto a v como a w como descendientes (se entiende como caso extremo que un nodo es descendiente de si mismo). Dise˜nar una funci´on que tenga como entrada un ´arbol binario de enteros y dos nodos v y w y como salida el AMC de v y w.
- (a) (1 punto) Construir un AVL (especificando los pasos seguidos) a partir de las claves {100, 29, 71, 82, 48, 39, 101, 22}. Indicar cuando sea necesario el tipo de rotaci´on que se usa para equilibrar. (b) (1 punto) Insertar las claves {10, 39, 6, 32, 49, 18, 41, 37} en una Tabla Hash cerrada de tama˜no 11, usando como funci´on hash h(k)=(2k+5) % 11 y para resolver las colisiones rehash- ing doble usando como funci´on hash secundaria h 0 (k) = 7- (k % 7). ¿Cual es el rendimiento de la tabla? (c) (1 punto) Usando la clase set de la STL, construir una funci´on que divida un conjunto de enteros c en dos subconjuntos cpar y cimpar que contienen respectivamente los elementos pares e impares de c y que devuelva true si el n´umero de elementos de cpar es mayor que el de cimpar y false en caso contrario.
/** @brief Determina si un conjunto de enteros tiene mas elementos pares que impares @brief estableciendo su particion en dos subconjuntos @param c: conjunto de entrada @param cpar: subconjunto conteniendo los elementos pares @param cimpar: subconjunto conteniendo los elementos impares @return true si #cpar > #cimpar, false en caso contrario */ bool masparesqueimpares(const set & c, set & cpar, set & cimpar)
- (2 puntos) Dado un ´arbol binario de enteros, se dice que est´a sesgado a la izquierda si para cada nodo, se satisface que la etiqueta de su hijo izquierda es menor que la de su hijo derecha (en caso de tener un solo hijo, este ha de situarse necesariamente a la izquierda). Se pide
- (a) Implementar un m´etodo que compruebe si un Arbol binario A esta sesgado hacia la izquierda.
- (b) Implementar un m´etodo que transforme un Arbol binario en un Arbol sesgado hacia la izquierda. La transformaci´on debe preservar que si un nodo v es descendiente de otro w en A, tambi´en lo debe ser en el Arbol transformado, por lo que no es valido hacer un intercambio de las etiquetas de los nodos.
Notas
- En la pregunta 4, los apartados 4(a) y 4(b) son excluyentes. Solo se podr´a contestar a uno de ellos.
- El tiempo para realizar el examen es de 3 horas
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACI ON E INTELIGENCIA ARTIFICIAL´ ETSII Inform´atica y de Telecomunicaci´on, C/Periodista Daniel Saucedo Aranda s/n - 18071 - Granada (Espa˜na)
bool Extraer(list & L1, intervalo x, list & L2); Devuelve true si ha sido posible realizar la extracci´on (x debe pertenecer a un ´unico intervalo de L1). Por ejemplo, si L1 = [1,7], [10,14], [18,20], [25,26] ; L2 = [0,1], [14,16], [20,23] y x = [12,14] entonces las listas quedar´an como L1 = [1,7], [10,11], [18,20], [25,26] y L2 = [0,1], [12,16], [20,23]. De igual forma, si L1 = [1,7], [10,22], [25,26] ; L2 = [0,1], [14,16], [20,23] y x = [12,20] entonces las listas quedar´an como L1 = [1,7], [10,11], [21,22], [25,26] y L2 = [0,1], [12,23].
- (2 puntos) Un ´arbol de sucesos es un ´arbol binario donde cada nodo tiene asociada una etiqueta con un valor real en el intervalo [0,1]. Cada nodo que no es hoja cumple la propiedad de que la suma de los valores de las etiquetas de sus hijos es 1. Un suceso es una hoja y la probabilidad de que ´este ocurra viene determinada por el producto de los valores de las etiquetas de los nodos que se encuentran en el camino que parte de la raiz y acaba en dicha hoja. Se dice que un suceso es probable si la probabilidad de que ocurra es mayor que 0.5. Usando el TDA ´arbol binario: (a) Dise˜nar una funci´on que compruebe si un ´arbol binario A es un ´arbol de sucesos. Su prototipo ser´a bool check_rep (const bintree &A) (b) Dise˜nar una funci´on que indique si existe alg´un suceso probable en el ´arbol de probabilidades A. Su prototipo ser´a: bool probable (const bintree & A) Ejemplo: En el ´arbol de probabilidades de la derecha no existe un suceso probable porque los tres sucesos tienen probabilidad inferior a 0.5 (A: 1.00.60.3=0.18; B: 1.00.60.7=0.42; C: 1.00.4=0.4). En cambio, en el ´arbol de la izquierda hay un suceso probable: E, porque 1.00.7*0.8=0.
/ \ / \
/ \ / \
0.7 0.3 C 0.6 0.4 C
/ \ / \
/ \ / \
D 0.2 0.8 E A 0.3 0.7 B
- (2 puntos) Supongamos que en una Tabla Hash abierta hacemos uso en cada cubeta de ´arboles AVL en lugar de listas.
¿Cual es la eficiencia (en el caso peor) de la funci´on buscar? Mostrar la tabla resultante de insertar los elementos {16, 72, 826, 1016, 12, 42, 623, 22, 32}. x 16 72 826 1016 12 42 623 22 32 h(x) 6 2 6 6 2 2 3 2 2 Construir un APO a partir del anterior conjunto de claves y a continuaci´on elimina el ele- mento m´as peque˜no.
Notas
Tiempo para realizar el examen: 3 horas.
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
Estructuras de Datos
Curso 2012-2013. Convocatoria de Septiembre Grado en Ingeniería Informática.
- (2 puntos) Un videoclub está desarrollando una aplicación que permita un acceso rápido a las películas de las que disponen. No se tiene claro qué estructura de datos elegir para almacenar los registros (compuestos por código, título, año...). La búsqueda se hace por el título de la película. Para la inserción y borrado de películas, se usa un código único asociado a cada película. Además se necesita una función para imprimir de forma ordenada todas las películas. Analizar la eficiencia de las 4 operaciones si se usa como estructura de datos: 1) vector ordenado , 2) lista ordenada , 3) ABB , 4) AVL y 5) Tablas Hash. En función del resultado obtenido en el análisis de eficiencia realizado, decidir que estructura de datos resuelve mejor el problema.
- (2 puntos) Para gestionar un documento se utiliza un TDA Documento. Este TDA tiene en su representación una tabla hash, en la que cada palabra del documento tiene asociada una lista ordenada con las posiciones en las que aparece la palabra en el mismo. Implementa una función int Documento::min_distancia(string pal1, string pal2) que devuelva la distancia mínima en la que aparecen las palabras pal1 y pal2 en el documento. Para la representación de la tabla hash se usa hash abierto.
- (2 puntos) Dada una lista de enteros con elementos repetidos, diseñar (usando el TDA lista) una función que construya a partir de ella una lista ordenada de listas, de forma que en la lista resultado los elementos iguales se agrupen en la misma sublista. Por ejemplo si entrada ={1,3,4,5,6,3,2,1,4,5,5,1,1,7} entonces salida={ {1,1,1,1},{2},{3,3},{4,4},{5,5,5}, {6},{7} }
- (2 puntos) Un árbol binario se dice que es k-balanceado si, para cada nodo, la diferencia entre el número de nodos en el subárbol izquierdo y derecho no es mayor que k. Diseñar (usando el TDA Arbol Binario) una función que permita determinar si un árbol es k balanceado.
- (2 puntos) Disponemos del TDA Matriz de enteros (se almacenan los datos por filas) y se quiere definir un iterador que itere por columnas sobre los elementos pares de la matriz. Para ello hay que implementar los operadores ++ y *, así como las funciones begin() y end() en la clase Matriz. Por ejemplo si la matriz M tiene los siguientes datos :
Ejecutando el siguiente código
se imprimirá sobre la salida estándar: 2 8 4 0 2 2
Tiempo para realizar el examen:3 horas
Matriz M; …. Matriz:: iterator it; for (it=M.begin(); it!=M.end();++it) cout<<*it;
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
tabla hash, así como las funciones begin y end de la clase TH.
- (2 puntos) a) Dado un árbol binario de enteros (positivos y negativos) implementar una función que obtenga el número de caminos, en los que la suma de las etiquetas de los nodos que los componen sumen exactamente k. int NumeroCaminos(bintree & ab, int k) b) Construir el AVL y el APO que resultan de insertar (en ese orden) los elementos del conjunto de enteros {45,23,12,20,15,22,24,55,52}.
- (1 punto) Describid las similitudes y diferencias (razonando la respuesta) en el funcionamiento del método básico de inserción de un elemento el los siguientes tipos de datos abstractos : 1) vector, 2) list, 3) map, 4) set, 5) priority_queue, 6) tabla hash abierta (unordered_set).
Tiempo: 3 horas
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
Estructuras de Datos Curso 2013-2014. Convocatoria de Septiembre Grado en Ingeniería Informática. Doble Grado en Ingeniería Informática y Matemáticas
- (1.5 puntos) Se desea diseñar un TDA, que llamaremos colec-ord que representa a una colección ordenada (de menor a mayor) de enteros y donde las únicas operaciones permitidas son insertar , borrar-máximo , recuperar y cuantos- dentro-de-rango. La operaciones borrar-máximo y recuperar, respectivamente borran el elemento máximo y recuperan un entero en la colección, y la operación cuantos-dentro-de-rango tiene como parámetros un rango de valores enteros [a,b] (a<b) y devuelve un valor entero indicando cuantos de los enteros de la colección son mayores o iguales que a y menores o iguales que b. Analizar la eficiencia de las operaciones si se usa (a) vector de la STL (b) lista de la STL (c) un ABB, (d) un AVL. ¿Qué implementación escogerías para el TDA?
- (2.5 puntos) Se desea construir un traductor de un idioma origen a un idioma destino. Una palabra en el idioma origen puede tener más de un traducción en el idioma destino. - Dar una representación para el TDA Traductor - Implementar la función insertar que añade una palabra del idioma origen junto con las traducciones en el idioma destino. - Implementar la función c onsultar que obtiene las traducciones de una palabra en el idioma destino. - Implementar la clase iterador dentro de la clase Traductor para poder iterar sobre todas las palabras.
- (2 puntos) Construir una función que permita "postintercalar" dos listas (intercalar alternativamente todos los nodos que las integran de final a principio), con los siguientes requisitos: (a) Hay que comprobar que las dos listas no son vacías (b) Se empieza por el primer nodo de la primera lista (c) La segunda lista contendrá el resultado final y la primera quedará vacía. (d) Si una de ellas tiene un menor número de nodos que la otra, el exceso de nodos se incorporará a la lista resultante.
Ejemplo 1: Ejemplo 2: Antes de invocar al metodo Antes de invocar al metodo Primera lista : (100,200) Primera lista : (x,y,z) Segunda lista: (1,2,3,4,5,6) Segunda lista: (a,b,c,d,e,f) Despues de invocar al metodo Despues de invocar al metodo Lista segunda: (1,2,3,4,200,5,100,6) Lista segunda: (a,b,c,z,d,y,e,x,f) Lista primera: vacia Lista primera: vacia
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
Estructuras de Datos Curso 2014-2015. Convocatoria de Febrero Grado en Ingeniería Informática. Doble Grado en Ingeniería Informática y Matemáticas
- (1 punto) Razonar (en términos de eficiencia de las operaciones) qué TDA elegirías entre los que se indican para:
(a) Implementar una Cola con prioridad (con funciones básicas de insertar, borrar, y frente) de entre: un ABB (árbol binario de búsqueda), un APO (árbol parcialmente ordenado implementado mediante un heap ) y un Vector ordenado. (b) Implementar un Diccionario (con funciones básicas de insertar, borrar y buscar) de entre: una lista ordenada , un vector ordenado y un AVL. (c) Implementar un Conjunto no ordenado (con funciones básicas de insertar, borrar y buscar) de entre: un AVL , un ABB , y una Tabla hash abierta.
- (1.5 puntos) Dada una lista que contiene pilas con enteros y que se encuentra ordenada de menor a mayor por el tope de cada pila, implementar una función borrar , que elimina el tope de cada pila en la lista, con valores iguales al dado como parámetro. La cabecera de la función sería:
void Borrar(list<stack > & L, int elemento)
Así por ejemplo:
Nota: la lista tiene que quedar ordenada por el tope de las pilas tras la ejecución de la función.
- (1.5 puntos) Implementar una función que muestre las etiquetas de los nodos de un árbol binario de enteros que estén entre dos niveles dados n1 y n2 (0<=n1<n2) ambos inclusive
L =
L =
Antes de la llamada a la función con elemento=
Después de la llamada
tope tope
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
- (1 punto) Se dice que un árbol binario de enteros es inferior a otro si (teniendo la misma estructura de ramificación), los elementos del primero, en los nodos coincidentes en posición, son menores que los del segundo. Diseñar una función booleana que dados dos árboles binarios, devuelva true si el primero es inferior al segundo
bool es_inferior(bintree & ab1, bintree & ab2)
5.- (1 punto) Implementar un iterador que itere sobre las claves que sean números primos en una clase Diccionario definida como:
class Diccionario{ private: map<int, list > datos; ….......... ….......... }
Han de implementarse (aparte de las de la clase iterador) las funciones begin() y end(). Se supone implementada una función bool primo (int x) que devuelve true si el entero x es primo.
Tiempo: 3 horas
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
3.- (2 puntos) Dada una lista de enteros con elementos repetidos, diseña (usando el TDA list ) una función que construya a partir de ella una lista ordenada de listas, de forma que en la lista resultado los elementos iguales se agrupen en la misma sublista. La lista original no se ve modificada. Por ejemplo: si entrada= {1,3,4,5,6,3,2,1,4,5,5,1,1,7}, salida= {{1,1,1},{2},{3,3},{4,4},{5,5,5},{6},{7}
4.- (2 puntos) Sea T un árbol binario con n nodos cuyas etiquetas (de tipo string) son todas diferentes. Se define un k-nodo como un nodo v que cumple la condición de que el número de descendientes en el subárbol izquierdo de v difiere del número de descendientes del subárbol derecho al menos en k elementos. Usando el TDA bintree, diseña una función que tenga como entrada un árbol binario de string y como salida el listado de las etiquetas de los 5-nodos que posee
list cinconodos(bintree & ab)
5.- (2 puntos) Implementa un iterador que itere sobre las claves que sean números pares en una clase Diccionario definida como:
class Diccionario{ private: map<int, list > datos; ….......... ….......... }
Han de implementarse (aparte de las de la clase iterador) las funciones begin() y end().
Tiempo: 3 horas
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
Estructuras de Datos Curso 2015-2016. Convocatoria de Febrero Grado en Ingeniería Informática. Doble Grado en Ingeniería Informática y Matemáticas
- (1 punto) Construye una clase agenda que de soporte al manejo de información del tipo persona: <nombre, num_telefono, direccion>. Los nombre son todos distintos y se tiene que poder buscar de forma eficiente tanto por nombre como por número de teléfono o dirección. Además de en tiempo también debe ser eficiente en espacio. Implementa las funciones: persona buscar_nombre (string nom), persona buscar_telefono (string num), void insertar (persona p)
- (1.5 puntos) Implementa una función bool sumaIgual (const list<list > &L) que devuelve true si todas las sumas por filas y por columnas da el mismo resultado (se asume que todas las listas tienen igual longitud). Por ejemplo, en la siguiente lista si se suma cada fila y cada columna siempre se obtiene 3
L=< <0,1,1,1>,
- (1.5 puntos) Una secuencia guiada sobre un árbol binario de enteros comienza por la raíz para a continuación, en cada paso, seleccionar el nodo con etiqueta más pequeña de entre los nodos disponibles en ese momento que no hayan sido listados. Se entiende por nodo disponible aquel cuyo padre ya ha sido procesado (excluyendo la raíz). a) ¿Qué estructura auxiliar utilizarías para almacenar el conjunto de nodos disponibles? Razona tu respuesta. b) Implementar una función que permita obtener una secuencia guiada de un árbol binario.
Ejemplo: 21 /
6 5 / \ /
10 1 7 3
2
Recorrido guiado: 21, 5, 3, 6, 1, 7, 2, 10
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
Estructuras de Datos Curso 2015-2016. Convocatoria de Septiembre Grado en Ingeniería Informática. Doble Grado en Ingeniería Informática y Matemáticas
- (2 puntos) Un almacén está desarrollando una aplicación que permita un acceso rápido a los productos de los que disponen y no se tiene claro qué estructura de datos elegir para almacenar los registros (nombre, código, año...). Las operaciones que son críticas para el almacén son: a) Inserción; b) búsqueda, que se hace por el nombre del producto; c) borrado, a partir del código único asociado a cada producto; d) imprimir de forma ordenada todos los productos. Analizar la eficiencia de las 4 operaciones si se usa como estructura de datos: Un vector ordenado, una lista ordenada, un ABB, un AVL y una Tabla hash. ¿Qué representación utilizarías para garantizar la mejor solución al problema?.
- (2 puntos) Se dispone de un conjunto de claves de gran tamaño, que se almacenan de forma ordenada. La particularidad de este conjunto es que las claves pueden aparecer de forma consecutiva un numero indefinido de veces. Por ej:
{ 1,1,1,1,1,3,3,3,6,6,6,6,6,6,6,6,9,9,9,9,9,.....}
a) Para el acceso a las claves se pretende diseñar un TDA con la misma especificación del vector de la STL, sin embargo se busca una representación que almacene los datos con un espacio de memoria proporcional al número de claves distintas existentes. ¿Qué representación propondrías? b) Considerando dicha representación, construye una función que dada una posición i del vector original devuelva el valor almacenado en esa posición.
- (2 puntos) Usando la clase list, construye la siguiente función que permite "duplicar" una lista (intercalando alternativamente tras cada elemento en la posición i, el elemento que está en la posición n-i-1 (i=0,1,...,n-1).
template void duplicar(const list & inicial, list & final)
Ejemplo 1:
Lista inicial: (a,b,c,d) Lista final: (a,d,b,c,c,b,d,a)
Ejemplo 2:
Lista inicial: (1,2,3,4,5) Lista final: (1,5,2,4,3,3,4,2,5,1)
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
- (2 puntos) Usando el TDA bintree, diseña una función para calcular la potencia externa PE de un ABB definida como:
PE = Σ 2^{profundidad(n)} n ε {hojas}
P.ej. El árbol mostrado a continuación tiene una potencia externa de 58.
50 /
/
30 65 / \ A /
10 40 PE= A+B+C+D+E+F= / \ /\ 2^1+2^3+2^3+2^3+2^4+2^4= / \ /
5 20 34 43 B / \ C D /
12 23 E F
5.- (2 puntos) Implementa un iterador que itere sobre las claves que sean números impares en una clase diccionario definida como:
class diccionario{ private: map<int, list > datos; ….......... ….......... }
Además de los métodos de la clase iterador, debes implementar begin y end de la clase diccionario.
Tiempo: 3 horas
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
- (1.5 puntos) Se define un árbol RV a un árbol binario en el que cada nodo tiene una etiqueta que puede tomar los valores Rojo (R) o Verde (V). Un nodo V indica que se puede pasar por dicho nodo, mientras que un nodo R bloquea el paso. Se pide diseñar un método que devuelva una lista con aquellos nodos verdes, v, del árbol que cumplan la propiedad de que: o v es hoja o sus dos descendientes son rojos (R)
- (a) (0.5 puntos) Insertar las siguientes claves en un AVL :
44, 29, 47, 64 ,48 ,50, 80, 36, 05, 61, 51, 72 Borrar el elemento 48 del árbol (b) (0.5 puntos) Insertar los elementos anteriores en una tabla hash cerrada con resolución de colisiones lineal ¿Qué valor del tamaño de la tabla considerarías?
- (1 punto) Implementar un método que chequee si un bintree que representa un árbol binario de búsqueda (ABB) es correcto
- (1 punto) Un tipo de dato pila_doble es un tipo que permite insertar y borrar por ambos extremos. Implementar las operaciones push y pop de este tipo de dato usando como representación un vector. Las operaciones tienen un parámetro que indica la pila sobre la que se hacen las operaciones: a) void pila_doble::push(int numpila, const T & elem) b) void pila_doble::pop(int numpila)
- (1 punto) Se define una matriz bilineal simétrica como una matriz nxn en la que todos los elementos significativos (distintos de un valor por defecto) están situados en las 2 diagonales principales y tal que al recorrer ambas diagonales en orden creciente de filas, presentan los mismos elementos. Un ejemplo de este tipo de matrices es la matriz del ejemplo. Es una matriz 6x6 de valores enteros y con el 0 como valor por defecto. 2 0 0 0 0 2 0 4 0 0 4 0 0 0 7 7 0 0 0 0 1 1 0 0 0 9 0 0 9 0 6 0 0 0 0 6 Proponer una representación eficiente para la matriz e implementar: a) el método int at(int fil, int col) que devuelva el elemento en la fila fil, columna col. b) un iterador que itere sobre los elementos significativos. Irían primero todos los elementos significativos de la primera fila, a continuación los elementos significativos de la segunda fila y así sucesivamente. Han de implementarse (aparte de las de la clase iteradora) las funciones begin() y end().
Duración 3 horas
DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIA ETSII Informática y de Telecomunicación, C/ Periodista Daniel Saucedo Aranda s/n- 18071- Granada (España)
Estructuras de Datos Curso 2016-2017. Convocatoria de Julio Grado en Ingeniería Informática. Doble Grado en Ingeniería Informática y Matemáticas
- (1 punto) Razonar detalladamente (en términos de eficiencia de las operaciones) qué TDA elegirías entre los que se indican para: (a) Implementar un conjunto ordenado de enteros (con funciones básicas de insertar, borrar, y buscar ) de entre: un ABB (árbol binario de búsqueda no balanceado), un APO (árbol parcialmente ordenado implementado mediante un heap ) y un v ector ordenado. (b) Implementar un conjunto no ordenado de enteros (con funciones básicas de insertar, borrar y buscar ) de entre: un AVL , un vector ordenado , y un APO (árbol parcialmente ordenado implementado mediante un heap ).
- (2.5 puntos) Una lista L se dice que está ordenada de forma ascendente por índices (orden indexado) si la secuencia {L(indices(0)),L(indices(1)),...L(indices(indices.size()-1))}. (siendo L(i) el elemento en la posición i-ésima), es una secuencia ordenada de forma ascendente. Necesariamente indices debe ser una lista de enteros que indica una secuencia de índices en L. Implementa una función booleana que reciba L (L puede contener cualquier tipo de dato) y un índice I y devuelva true si L está ordenada de forma ascendente con respecto al índice. Ejemplo: Para L= {2.2, 7.1, 3.4, 9.0, 6.2, 5.1} e I={0, 2, 5, 4, 1, 3}, la función devolvería true.
- (2.5 puntos) Implementa una función booleana que devuelva true si un árbol binario de enteros ab2 coincide con un subárbol de otro ab1 (deben coincidir también los valores de las etiquetas)
bool es_subarbol(const bintree & ab1, const bintree & ab2)
4.- (1.5 punto) Implementa un TDA cola usando dos pilas.
5.- (2.5 puntos) Se dispone de un TDA indice donde para cada palabra se almacenan los números de página en los que aparece en un libro. Se desea recorrer el índice considerando únicamente las ocurrencias en páginas impares de las palabras del contenedor. Para implementar el índice se ha seleccionado la siguiente estructura:
class indice{ private: map<string, set > datos; ….......... ….......... } Se pide implementar el TDA indice::iterator deseado, de forma que el operator* devuelva tanto la palabra como el número de página (que ha de ser necesariamente impar). Además de los métodos de la clase iterador, se deben implementar las funciones begin() y end().
Tiempo: 3 horas