HASH

Anuncio
procedimiento AÑADIR (x:elemento; HASH1:HASH);
var
i,j:entero;
enc:booleano;
fvar
i:=0; enc:=falso;
mientras (i<=m-1) and no(enc) hacer
j:=hda(x,i);
si Libre(HASH1[j]) or (HASH1[j]=x) entonces
enc:=cierto;
si Libre(HASH1[j]) entonces HASH1[j]:=x fsi
sino
i:=i+1;
fsi
fmientras
si no(enc) entonces escribir ('Error Tabla Llena') fsi
fprocedimiento
{a,b,c,d}
h(a)=3
h(b)=5
h(c)= 4 3
d
a
c
b
h(d)=0
d
ELIMINAR
(a,HASH1)
d
AÑADIR
(c,HASH1)
c
b
c
c
b
2.3.2 Prueba cuadrática
hda(x,i)=( h(x)+C1*1+C2*i2) mod m
2.3.3 Doble Hashing
hda(x,i)=( h(x)+i*h'(x) ) mod m
h(x)=x mod m
h'(x)=1 + (x mod m') siendo m'<m
2.4 Conclusiones
- Encadenamiento Separado (HASHING ABIERTO) : Las
variables se duplican por lo que ocupan mucho espacio, además de tener
que gestionar todas esas variables dinámicas. La ventaja es que permite
aumentar el tamaño de la HASH y añadir elementos aunque esta esté
llena.
- Direccionamiento Abierto (HASHING CERRADO) : Las
eliminaciones son complicadas y una vez llena la tabla no se pueden
añadir más elementos, pero ocupa poco espacio en memoria.
* La estructura de tabla HASH es la más eficiente para resolver el
problema de los diccionarios, pues solo emplea las operaciones de
AÑADIR, ELIMINAR y PERTENENCIA.
Su principal inconveniente es que se trata de una estructura
estática fija y al implementar cualquier otra operación el coste es muy
elevado.
3. HEAPS
Es la estructura más eficiente para resolver el problema de colas de
prioridad ( planificadores de CPU, de dispositivos, etc.)
Operaciones asociadas:
- añadir elemento a la cola (AÑADIR)
- obtener elemento de valor máximo (mínimo)---> MAXIMO
(MINIMO)
- eliminar el elemento de valor máximo (mínimo) --->
ELIMINAR_MAX (ELIMINAR_MIN)
Propiedades:
- Es un arbol binario.
- Es completo ( o casi ).
- Para todos los nodos se cumple que:
Estructura MIN_HEAP: el valor de un nodo es menor o
igual que el de sus hijos.
Estructura MAX_HEAP: el valor de un nodo es mayor o
igual que el de sus hijos.
- Los subarboles de un HEAP son a su vez HEAPS.
- La altura h de un HEAP con n nodos está limitada inferior y
superiormente por LOG2 n.
- El número de nodos internos del HEAP es igual al número de
hojas o al número de hojas menos 1.
3.1. Representación.
Se utiliza un vector.
TIPO
HEAP:vector [1..maxnodos] de elementos
VAR
HEAP1:HEAP;
tam_heap:entero;
Con esta representación es sencillo obtener:
Padre(i)=i div 2
Hijo_izq (i)= 2i
Hijo_der (i)= 2i+1
3.2 Operaciones
3.2.1 Mantenimiento de la condicion de HEAP -----> HEAPIFY
Dado un vector de elementos y un indice a un nodo del vector, y
asumiendo que el nodo indice es el padre de 2 subarboles que son
HEAPS, esta operación convierte a todo el arbol (vector) en un HEAP.
Descargar