Certamen 1 - Departamento de Electrónica

Anuncio
UNIVERSIDAD TECNICA FEDERICO SANTA
MARIA
DEPARTAMENTO DE ELECTRONICA
ELO320 Estructuras de Datos y Algoritmos
7/6/2010
Segundo Examen
7
1. Para el siguiente árbol de búsqueda.
3
a) ¿Cuáles son todos los órdenes posibles en los que llegaron las claves
para formar el árbol?
739148, 739184, 739418, 739481, 739814, 739841,
793148, 793184, 793418, 793481, 793814, 793841
1
9
4
8
b) En un listado pre-orden quienes figuran antes y después del valor 4.
Pre orden: 7, 3, 1, 4, 9, 8 entonces son el 1 y el 9.
c) En un listado post-orden quienes figuran antes y después del valor 9.
Post orden: 1, 4, 3, 8, 9, 7 entonces son el 8 y el 7.
d) Dibujar el árbol, luego de: insertar el nodo con valor 5, y descartar los nodos con valores
4 y luego el 7.
5
7
7
8
3
3
9
9
3
3
9
9
1
4
8
1
5
1
8
8
o
1
5
5
Indicar alternativas de solución, si las hubiera.
20 puntos
2. a) Diseñe una función recursiva que cuente los nodos en un árbol binario en orden con
valores entre dos valores dados (inclusive) e imprima esos nodos a la pantalla. Retorne el
número de nodos contados.
int ContarNodos (pnodo t, char valor1, char valor2);
int ContarNodos(pnodo t, char valor1, char valor 2)
{
// dado que valor1 <= valor2
int total=0;
if (t != NULL)
{
total += ContarNodos(t->left);
if ((t->clave >= valor1) && (t->clave <= valor2))
total++;
total += ContarNodos(t->right);
}
return (total);
}
Tomás Arredondo Vidal.
22-07-2010
1
20 puntos
UNIVERSIDAD TECNICA FEDERICO SANTA
MARIA
DEPARTAMENTO DE ELECTRONICA
ELO320 Estructuras de Datos y Algoritmos
b) Diseñe una función que en un árbol binario inserte el nodo correspondiente a la clave.
Debe permitir que se almacenen múltiples copias de un nodo y resolver colisiones de
alguna manera razonable. Retorne cero si no hay error. Debe diseñar su nodo.
int InsertarMultiple(char clave, pnodo t);
20 puntos
typedef struct Node
{
char clave;
int cuenta; // cuenta el numero de veces
struct Node *left;
struct Node *right;
} nodo, *pnodo;
typedef enum {left, right, vacio} modo;
void InsertarMult(pnodo t, int valor)
{
pnodo q= t;
modo porlado=vacio;
while ( t != NULL) {
if ( t->clave == valor )
{ /* lo encontro, incrementa cuenta */
t->cuenta++;
return;
}
else
{
q=t ;
if (t->clave < valor)
{
t = t->right;
porlado=right;
}
else
{
t = t->left;
porlado=left;
}
}
}
/*Al salir del while q apunta al nodo en
el arbol donde se insertar el nuevo
nodo, y porlado la direccin */
Tomás Arredondo Vidal.
22-07-2010
2
UNIVERSIDAD TECNICA FEDERICO SANTA
MARIA
DEPARTAMENTO DE ELECTRONICA
ELO320 Estructuras de Datos y Algoritmos
/* El argumento t apunta a NULL */
t = CreaNodo(valor);
// podia asumir crea nodo
if (porlado==left)
q->left=t;
else if (porlado==right)
q->right=t;
// return (t); /* Apunta al recien insertado*/
}
main()
{
pnodo pRoot = NULL;
// Digamos que queremos almacenar 7, 8, 10, 11, 7, 9
// El primero tiene que ser creado con CreaNodo
pRoot = CreaNodo(7);
InsertarMult(pRoot, 8);
InsertarMult(pRoot,10);
InsertarMult(pRoot,11);
InsertarMult(pRoot, 7);
InsertarMult(pRoot, 9);
}
Cual es la complejidad T(n), O(n) y Θ(n) de la función en la parte b)?
20 puntos.
La suma de T(n) va a depender de la implementacion pero O(logn) = Θ(logn).
3. Para una tabla de hash cerrado de tamaño 8, implemente una función de hash: h(x).
Considere la siguiente secuencia de operaciones:
Insertar 13
Insertar 20
Descartar 4
Insertar 13
Insertar 5
Insertar 10
Insertar 6
Buscar 8
Insertar 10
Tomás Arredondo Vidal.
Indice
0
1
2
3
4
5
6
7
22-07-2010
Valor Estado
3
UNIVERSIDAD TECNICA FEDERICO SANTA
MARIA
DEPARTAMENTO DE ELECTRONICA
ELO320 Estructuras de Datos y Algoritmos
a) Muestre el contenido de la tabla después de realizadas las operaciones anteriores,
asumiendo linear probing para resolver colisiones. Indicando cuándo se producen
colisiones y la razón por la que se almacena en una posición determinada.
h(x) = x % 8
Indice
Valor Estado
h(13) = 5, h(20) = 4, h(5) = 5, h(10) = 2, h(6) = 6, h(8) = 0, h(10)
=2
b) Luego de lo anterior, indicar fundamentadamente qué casos de
inserciones o búsquedas tienen mayor costo, indicando el número
de comparaciones que son necesarias. 20 puntos
0
1
2
3
4
5
6
7
10
20
13
5
6
Vacio
Vacio
Ocupado
Vacio
Ocupado
Ocupado
Ocupado
Ocupado
De acuerdo a esta función de hash, hubo dos colisiones al insertar el 13 y el 10. Buscar el 8
requirió que se mirara la tabla completa lo mismo con descartar el 4. Insertar el 5 y 6
requirió incrementar indice para resolver colisiones.
Tomás Arredondo Vidal.
22-07-2010
4
Descargar