/  4
 
Universidad Diego PortalesFacultad de Ingenier´ıaEscuela de Inform´aticaCurso: Estructura de DatosAyudante: Jaime Guzm´an
Simulacro Solemne II Estructuras de datos
Duracin:
90 minutos.1. [
Pregunta 1
]El esquema de
hashing compuesto
consiste en usar una tabla de
hash 
primaria de tama˜no
, dondecada posici´on de la tabla contiene otra tabla de
hash 
de tama˜no
. De esta forma se tiene unatabla primaria, y a lo m´as
tablas secundarias.El esquema utiliza dos funciones de
hash 
,
h
1
y
h
2
. Para almacenar un elemento, se calcula laposici´on usando
h
1
, y luego, dentro de la tabla secundaria que se encuentra en esa posici´on, seaplica la funci´on
h
2
, y se almacena el valor en esa posici´on. Si dentro de esta tabla secundaria seproduce una colison, entonces se resuelve por encadenamiento.Considerando
= 7,
= 10,
h
1
(
x
) =
x
+ 5 mod
, y
h
2
(
x
) = (3
x
+ 2) mod
, inserte los sigu-ientes valores en una tabla de este tipo, y muestre el estado final de la tabla.
40
,
30
,
35
,
4
,
2
,
82
,
63
,
9
,
7
.
Solucion
En este esquema la tabla de
hash 
primaria tiene tama˜no
= 7, y cada tabla secundaria contieneuna tabla de tama˜no
= 10. Para saber en qu´e posiciones de cada tabla se debe ingresar el dato,se necesita calcular
h
1
y
h
2
para todos los valores de
x
:
x h
1
(
x
)
h
2
(
x
)40 3 230 0 235 5 74 2 42 0 882 3 863 5 19 0 97 5 3De esta manera la tabla de
hash 
construida queda de la manera que se muestra en la figura 1.2. [
Pregunta 2
]
a)
Considere un
heap
que contiene ms de 3 elementos. El valor m´as alto contenido en el
heap
siempre
se encuentra en la posici´on 0. En qu´e posiciones se puede encontrar el segundo valor m´asalto?, En qu´e posiciones puede encontrarse el tercer valor m´as alto?
Solucion
El segundo valor m´as alto en un
heap
tiene exactamente un valor mayor que ´el, por lo tanto tieneque ser un hijo directo de la ra´ız del
heap
. Puede ser el hijo izquierdo o el hijo derecho, por lo tantopuede estar en las posiciones 1 ´o 2.1
 
El tercer valor m´as alto tiene que tener exactamente dos valores mayores que ´el. Como no hayrelaci´on entre los hijos directos de la ra´ız, podr´ıa estar en la posici´on 1 o en la 2. Como no puedeestar a distancia mayor que 2 de la ra´ız, entonces tambi´en puede estar entre las posiciones 3 a la 6.
b)
Considere un arreglo de
elementos, ordenado de mayor a menor. Corresponde este arregloa
heap
?. Si la respuesta es s´ı, demuestre por qu´e (no sirve poner un ejemplo) ; si la respuesta es no,entonces muestre un contraejemplo y explique por qu´e no corresponde a un
heap
.
Soluci´on
La respuesta es s´ı. Por qu´e?, considere un arreglo de
elementos
A
=
a
1
,a
2
,a
3
,...,a
. Siel arreglo est´a ordenado de mayor a menor, entonces se cumple que
a
1
> a
2
> a
3
> ... > a
.La relaci´on de
heap
implica que todo elemento es mayor que sus hijos ; esto es
a
i
> a
2
i
+1
y
a
i
> a
2
i
+2
. Como el arreglo esa ordenado de mayor a menor, entonces la propiedad de
heap
secumple trivialmente.3. [
Pregunta 3
]Considere la siguiente estructura para representar un ´arbol binario de b´usqueda (ABB):
class ArbolBin {NodoBin raiz;ArbolBin() { raiz = null; }void insert(int k) { if(raiz != null) raiz.insert(k); else raiz = new NodoBin(k); }void delete(int k) { if(raiz != null) raiz.delete(k); }void modify(int k) { if(raiz != null) raiz.modify(k); }void maxDepth() { if(raiz != null) raiz.maxDepth(); }int previous() { if(raiz != null) return raiz.previous(); }}class NodoBin {int key;NodoBin hijos[2];NodoBin(int k) { key = k; hijos[0]=hijos[1]=null; }void insert(int k) { ... ... } // inserta un nodo con llave k en el rbolvoid delete(int k) { ... ... } // borra el nodo con llave k del rbol}
2
 
(a)
a)
Escriba el etodo
int previous()
, para la clase
NodoBin
. El m´etodo debe retornar elvalor de la llave del nodo que antecede a aqu´el sobre el cual se ejecuta el m´etodo. Indique lacomplejidad de su soluci´on.
Soluci´on
El predecesor de un nodo se puede dividir en dos casos: si el nodo tiene hijo izquierdo, entoncesel predecesor es el m´aximo nodo de esa rama ; si el nodo no tiene hijo izquierdo, entonces esel primer padre al que se puede llegar a traves de una rama derecha.
int previous() {if(hijo[0] != null) {return hijo[0].maximo();}p = padre();h = this;while(p != null) {if(p.hijo[1] == h) {return h.key;}p = p.padre();h = h.padre();}return -1;}int maximo() {NodoBin m = this;while(m.hijo[1] != null) { m = m.hijo[1];}return m.key;}
Esta soluci´on, suponiendo que el ´arbol esta balanceado, implica recorrer toda una rama com-pleta del ´arbol para encontrar el m´aximo, o bien subir por una rama llegando, en el peor caso,hasta la ra´ız. La complejidad por lo tanto es
O
(log
n
).(b)
b)
Escriba el etodo
void modify(int k)
, para la clase
NodoBin
. El m´etodo debe sumar elvalor
k
a cada una de las llaves almacenadas en el ´arbol. Indique la complejidad de su soluci´on.
Soluci´on
Para recorrer una sola vez cada una de las nodos del ´arbol, se puede utilizar uno de losalgoritmos de recorrido, por ejemplo,
inOrder
:
void modify(int k) {if(hijo[0] != null) {hijo[0].modify(k);}key += k;if(hijo[1] != null) {hijo[1].modify(k);}}
Esta soluci´on debe recorrer todos los nodos del ´arbol exactamente una vez, por lo tanto sucomplejidad es
O
(
n
).(c)
c)
Escriba el etodo
void maxDepth()
, para la clase
NodoBin
. El m´etodo debe imprimir enpantalla la llave de ´el o los nodos que tienen la mayor profundidad en el ´arbol.
Soluci´on
3

Share & Embed

More from this user

Add a Comment

Characters: ...