Ejercicios sobre tablas hash

Anuncio
Ejercicios de tablas hash, EDA, Universidad de Zaragoza
Ejercicios sobre tablas hash
Estructuras de Datos y algoritmos, Ingeniería Informática
Universidad de Zaragoza
Basados en los de [Weiss 93]:
1. Dada la entrada {4371, 1323, 6173, 4199, 4344, 9679, 1989} y una función hash
h(x)=x mod 10, dar la correspondiente a) tabla hash por encadenamiento b) tabla
hash por recolocación lineal (a=1) c) tabla hash por recolocación cuadrática d) tabla
hash con recolocación doble vía la función h2(x)=7-(x mod 7).
2. Dar el resultado de regenerar las tablas por recolocación del ejercicio 1.
3. Un gran número de borrados en una tabla hash por recolocación puede hacer que
esté bastante vacía, podemos regenerarla a una tabla de tamaño la mitad.
Implementar las tablas hash por recolocación teniendo en cuenta este hecho.
4. Tenemos un diccionario de 30000 palabras que queremos guardar en una tabla hash
por recolocación. Suponiendo que el tamaño medio de una palabra es siete letras y
que podemos guardar palabras de x letras en x+1 bytes, ¿cuánta memoria
necesitamos?
5. Queremos encontrar la primera ocurrencia de un string p1...pk en uno más largo
a1...an. Para ello podemos calcular hp=h( p1...pk) y comparar hp con h(a1...ak),
h(a2...ak+1), etc hasta que encontremos tal que h(ai...ai+k)=hp, y ene ese caso
comparar carácter a carácter.
Implementar esta estrategia de la forma más eficiente posible y calcular el coste en
tiempo.
Basados en los de [Franch 94]:
6. Sea h una función hash con h(sonia)=3, h(gema)=5, h(paula)=2, h(ana)=3,
h(ruth)=3, h(cris)=2. Insertar estas claves en una tabla hash con recolocación lineal
(a=1) en el siguiente orden: paula, ana, cris, ruth, sonia, gema. Buscar ruth.
Repetir el proceso en orden sonia, ana, ruth, gema, paula, cris. Buscar ruth.
Otros:
7. Se trata de buscar una estructura de datos adecuada para implementar polinomios
"esparsos", es decir, polinomios en los que la mayoría de los coeficientes son 0, por
ejemplo: x10000+24. En concreto, se trata de polinomios de cualquier grado, con
coeficientes reales y que tienen como máximo 1000 coeficientes distintos de 0.
Las operaciones que se quieren realizar son las siguientes (p es un polinomio, a es
un real distinto de 0, n un entero no negativo, b es un real):
añadir(p,a,n) = p+axn (suma a p el monomio axn)
consultar(p,n) = b (donde b es el coeficiente de p de grado n)
además de la suma y producto de polinomios. Queremos que las operaciones añadir
y consultar sean lo más rápidas posible.
1
Ejercicios de tablas hash, EDA, Universidad de Zaragoza
8. La librería Universal decide crear un sistema automático que aconseje sobre libros a
sus cliente. Para ello ha decidido crear una estructura de datos de libros a partir las
cifras de venta y las críticas especializadas. La información que quiere guardar sobre
cada libro es la siguiente: título, autor, ventas (un entero), nota de la crítica (otro
entero), especialidad y comentarios.
Las operaciones que pretende desarrollar, además de la consabida operación de
“crear”, son: “modificar” (que dada la estructura de datos y un libro, si el libro no
está en la estructura lo incluye y en otro caso cambia la antigua información por la
nueva), “compra segura” (que dada la estructura de datos y un autor devuelve el
libro con mejor crítica de ese autor), “listado” (que dada la estructura y una
especialidad devuelve la lista de todos los libros de esa especialidad por orden de
ventas).
Información adicional:
• “compra segura” y “listado” han de ser operaciones muy rápidas (si es posible,
de coste constante).
• “Modificar” no tiene por qué ser rápida.
• La especialidad de un libro no cambia nunca.
9. Se trata de diseñar e implementar un TAD para gestionar los vuelos de espera de un
aeropuerto que puede abrir hasta P pistas identificadas con un natural. Cada pista
sirve para el despegue de aviones a varios destinos asociados a la pista. Tanto los
destinos de los aviones que salen del aeropuerto como los vuelos se identifican con
una cadena.
También sabemos que:
• Hay muchos destinos y estos se conocen a priori.
• Puede haber muchos vuelos en espera.
• Hay pocas pistas asociadas a cada destino.
Las operaciones del TAD son las siguientes:
crea: listacadenas --> aeropuerto
{crea la estructura con los destinos dados}
parcial abre: aeropuerto listacadenas
{abre una pista y la asocia a los
pistas se abren empezando por la
pista i se abre la i+1. Sólo está
se han abierto las P pistas.}
--> aeropuerto
destinos dados. Las
1 y después de la
definida si aún no
parcial
asignaPista:
aeropuerto
cadena
cadena
-->
aeropuerto
{asignapista(a,v,d) asigna al vuelo v una pista válida
para despegar con destino d. El vuelo queda en espera.
La pista asignada es aquella que tiene menos vuelos en
2
Ejercicios de tablas hash, EDA, Universidad de Zaragoza
espera (cualquiera en caso de empate) de entre las que
están asociadas al destino. Sólo está definida si el
vuelo no existía, el destino está en la lista de
destinos y hay alguna pista asociada al destino.}
parcial despega: aeropuerto natural --> aeropuerto
{despega(a,n) elimina el vuelo que lleva más tiempo
esperando en la pista n. Sólo está definido si n está
abierta y tiene algún vuelo en espera.}
parcial cuántosDelante: aeropuerto cadena --> natural
{cuántosDelante(a,v) nos dice cuántos vuelos hay
esperando delante de v en la misma pista. Sólo está
definida si el vuelo existe.}
Se pide:
• Especificar algebraicamente el TAD descrito
• Dar una implementación del mismo que favorezca la eficiencia de todas las
operaciones y optimice el uso de memoria
3
Descargar