Ar Boles

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

Estructuras de Datos - Curso 02/03 I. T.

Informtica Gestin

rboles Definiciones

Arbol: Un arbol consiste en un nodo (r, llamado nodo raiz) y una lista o
coleccin de subrboles (A1, A2, ... , Ak). Si el orden de los subrboles
importa, entonces se representan como una lista, y se denomina rbol
ordenado. En caso contrario se representan como una coleccin y se
denomina arbol no ordenado.

Se definen como nodos hijos de r a los los nodos raices de los subrboles
A1, A2, ... , Ak

Si b es un nodo hijo de a entonces a es el nodo padre de b.

Un nodo puede tener cero o ms hijos, y uno o ningn padre. Si no tiene


nodo padre entonces es el nodo raiz del rbol.

Un nodo sin hijos se denomina nodo hoja.

Se define un camino en un arbol como cualquier secuencia de nodos del


arbol, n1 ... np, que cumpla que cada nodo es padre del siguiente en la
secuencia (es decir, que ni es el padre de ni+1). La longitud del camino se
define como el nmero de nodos de la secuencia menos uno (p-1).

La altura de un nodo en un arbol se define como la longitud del camino


ms largo que comienza en el nodo y termina en una hoja. La altura de un
nodo hoja ser de cero, y la altura de un nodo se puede calcular sumando
uno a la mayor altura de sus hijos.

La altura de un rbol se define como la altura de su raiz.

La profundidad de un nodo se define como la longitud del camino (nico)


que comienza en la raiz y termina en el nodo. La profundidad de la raiz es
cero, y la profundidad de un nodo se puede calcular como la profundidad
de su padre mas uno.

A la profundidad de un nodo tambin se la denomina nivel del nodo en el


rbol.

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 34


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Representacin de rboles

Salvo casos particulares, un rbol se almacena mediante nodos con


referencias al nodo padre y a la lista de nodos hijos, o bien con referencias
al nodo padre, al primer hijo y al nodo hermano. Se suele utilizar un acceso
basado en cursor.

Las operaciones principales son el acceso al nodo padre, a los nodos hijos,
la insercin y borrado de subrboles hijos y el cambio del cursor.

Ejemplo:

Raiz

a /
a /

b c d

b c d /
e f / /

g
e f /
/

Cursor

g /
/

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 35


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Recorridos sobre rboles (ordenados)

Recorrido Preorden: Se actua sobre la raiz y luego se recorre en preorden


cada uno de los subrboles.

Recorrido Postorden: Se recorre en postorden cada uno de los subrboles


y luego se actua sobre la raiz.

Recorrido Inorden: Se recorre en inorden el primer subrbol (si existe). A


continuacin se actua sobre la raiz y por ltimo se recorre en inorden cada
uno de los subrboles restantes.

Recorrido por Niveles: Se etiquetan los nodos segn su profundidad


(nivel). Se recorren ordenados de menor a mayor nivel, a igualdad de nivel
se recorren de izquierda a derecha.

Variantes de rboles
rbol binario: rbol que consta de un nodo raiz y de dos subrboles,
llamados subrbol izquierdo y subrbol derecho. Se permite que existan
rboles vacos (sin ningn nodo, ni siquiera el raiz). Los subrboles vacos
tienen altura 1.

Cada nodo de un rbol binario puede tener cero (subrbol izquierdo y


derecho vacos), uno (subarbol izquierdo o derecho vaco) o dos hijos.
Dependiendo de si son la raiz del subarbol izquierdo o derecho se
denominan hijo izquierdo e hijo derecho.

rbol binario estricto: No se permite que un subrbol est vaco y el otro


no lo est. Por lo tanto cada nodo puede tener cero o dos hijos.

rbol binario perfectamente equilibrado (rbol lleno): La altura del


subarbol izquierdo es igual a la altura del subarbol derecho y adems
ambos subrboles tambin estn perfectamente equilibrados. Un arbol
perfectamente equilibrado tiene 2h+1 nodos (h es la altura del rbol).

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 36


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Variantes de rboles (II)

rbol binario completo: Un rbol perfectamente equilibrado hasta el


penltimo nivel, y en el ltimo nivel los nodos se encuentran agrupados a
la izquierda.

En un rbol completo se pueden indexar los nodos mediante un recorrido


por niveles, y a partir de ese ndice es posible conocer el ndice del nodo
padre y los ndices de los nodos hijos. Esta propiedad permite almacenar un
rbol completo en un vector sin necesidad de informacin adicional
(referencia al nodo padre y a los nodos hijos), simplemente almacenando
cada nodo en la posicin del vector que indica el recorrido por niveles.
1

i div 2

2 3

i
4 5 6 7

2i 2i+1
8 9 10 11 12

Montculo: Un rbol binario completo que almacena elementos con campo


clave y donde los nodos cumplen la propiedad de montculo: Todo nodo
del arbol almacena un elemento cuya clave es menor que las claves de sus
descendientes en el arbol.

Los descendientes de un nodo son aquellos nodos accesibles por un


camino que comienze en el nodo. La definicin anterior es de un montculo
cuya raiz es el elemento mnimo. Alternativamente, podemos definir un
montculo cuya raiz sea el elemento mximo con slo cambiar la palabra
menor por mayor.

Los montculos sirven de base a una representacin muy til para


operaciones de acceso y borrado del elemento mnimo e insercin de
elementos, y por lo tanto para el TAD Cola de Prioridad.

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 37


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Variantes de rboles (III)

rbol binario de bsqueda: Un rbol binario que almacena elementos con


campo clave y donde los nodos cumplen la propiedad de ordenacin:
Todo nodo del arbol almacena un elemento cuya clave es mayor (o igual)
que las claves de los nodos de su subrbol izquierdo, y menor (o igual)
que las claves de los nodos de su subrbol derecho.

Los rboles binarios de bsqueda sirven de base a una representacin donde


las operaciones de acceso y borrado por valor e insercin de elementos se
pueden hacer de manera eficiente (en promedio). Por lo tanto sirven para
representar los TADs Lista ordenada y Diccionario.

Arbol binario equilibrado: Un arbol binario en el que la altura del


subrbol izquierdo y la del subrbol derecho o son iguales o se diferencian
en una unidad, y adems ambos subrboles son equilibrados. Se define
factor de equilibrio de cada nodo como el resultado de restar la altura del
subarbol izquierdo a la altura del subarbol derecho. Slo puede tomar los
valores 1, 0 y +1 para un rbol binario equilibrado. Ejemplos:

1
0

1 1
-1 +1

0 0 1
0 0

Arbol AVL: Un arbol binario de bsqueda equilibrado. Comparten las


caractersticas de los rboles binarios de bsqueda pero el orden de las
operaciones de acceso (bsqueda), insercin y borrado es estricto (no es un
caso promedio).

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 38


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

TAD Arbol / Directorio

ESPECIFICACIN ARBOL
USA LISTA_INDEXADA
PARMETROS
GENEROS nodo
OPERACIONES
: nodo { Nodo nulo }
= , : nodo, nodo booleano { Relacin de igualdad }
FIN_PARMETROS
GENEROS arbol
OPERACIONES
: nodo, lista[arbol] arbol { creacin de un arbol }
raiz : arbol nodo { nodo raiz de un arbol }
PARCIAL subarbol : arbol, natural nodo { subarbol n-simo de un arbol }
PARCIAL padre : arbol, nodo nodo { nodo padre de un nodo del arbol }
PARCIAL hijos : arbol, nodo lista[nodo] { nodos hijos de un nodo del arbol }
AUXILIAR : nodo, arbol booleano { pertenencia de un nodo a un arbol }
VARIABLES
a : arbol; x, y : nodo; i : natural; l, l1, l2 : lista[arbol];
DEFINIBILIDAD
(x a) DEF [ padre( a, x ) ]
(x a) DEF [ hijos( a, x ) ]
ECUACIONES
raiz( x l ) == x
subarbol( x l, i ) == l @ i
x (x l) == T
( x y ) x (y [ ]) == F
( x y ) x (y a >> l) == ( x a ) ( x (y l) )
padre( x l, x ) ==
padre( y (x l1) >> l2, x ) == y
( x y ) ( x a ) padre( y a >> l, x ) == padre( a, x )
( x y ) ( x a ) padre( y a >> l, x ) == padre( y l, x )
hijos( x [ ], x ) == [ ]
hijos( x a >> l, x ) == raiz(a) >> hijos( x l, x )
( x y ) ( x a ) hijos( y a >> l, x ) == hijos( a, x )
( x y ) ( x a ) hijos( y a >> l, x ) == hijos( y l, x )

FIN_ESPECIFICACIN

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 39


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Operaciones sobre rboles

ESPECIFICACIN ARBOLES_OPERACIONES
USA ARBOL
OPERACIONES
altura : arbol natural
PARCIAL altura_nodo : arbol, nodo natural
PARCIAL profundidad : arbol, nodo natural
PARCIAL hoja : arbol, nodo booleano
VARIABLES
a : arbol; x,y : nodo; l : lista[arbol]
DEFINIBILIDAD
(x a) DEF [ altura_nodo( a, x ) ]
(x a) DEF [ profundidad( a, x ) ]
(x a) DEF [ hoja( a, x ) ]
ECUACIONES
altura( x [ ] ) == 0
altura( x a >> l ) == max( 1+altura( a ), altura( x l ) )
altura_nodo( x l, x ) == altura( x l )
( x y ) ( x a ) altura_nodo( y a >> l, x ) == altura_nodo( a, x )
( x y ) ( x a ) altura_nodo( y a >> l, x ) == altura_nodo( y l, x )
profundidad( x l, x ) == 0
( x y ) ( x a ) profundidad( y a >> l, x ) == 1+profundidad( a, x )
( x y ) ( x a ) profundidad( y a >> l, x ) == profundidad( y l, x )
hoja( x [ ], x ) == T
hoja( x a >> l, x ) == F
( x y ) ( x a ) hoja( y a >> l, x ) == hoja( a, x )
( x y ) ( x a ) hoja( y a >> l, x ) == hoja( y l, x )

FIN_ESPECIFICACIN

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 40


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Montculos: Operaciones auxiliares

Elevacin de un nodo:
Mdulo Elevar
{ Reorganiza un montculo en el que, al cambiar de valor un nodo, es
posible que ya no se cumpla la propiedad de monticulo para los
ascendientes de ese nodo. El algoritmo consiste en intercambiar el
nodo con sus ascendientes hasta restablecer la propiedad. }
Entradas
{ El montculo se representa por un vector que almacena sus elementos
en el orden de un recorrido por niveles. El vector tiene una
capacidad mxima de Max elementos, y en un momento dado almacena
nicamente N elementos en los ndices 1..N }
V : vector[1..Max] de tipo_elemento
N : entero
I : entero { ndice del nodo que ha cambiado. 1 I N }
Salidas
V : vector[1..Max] de tipo_elemento
Variables
Padre, Hijo : enteros
Seguir : booleano
Inicio
Hijo I
Seguir Cierto
Mientras (Hijo > 1) Y Seguir hacer
Padre Hijo div 2
Si V[Padre].Clave < V[Hijo].Clave entonces
{ Intercambiar nodo padre con el nodo hijo y seguir comprobando }
V[Hijo] V[Padre]
Hijo Padre
Sino
Seguir Falso
Fin_Si
Fin_Mientras
Fin

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 41


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Reestructuracin de un (sub)montculo:
Mdulo Reestructurar
{ Reorganiza un montculo en el que, al cambiar de valor un nodo, es
posible que ya no se cumpla la propiedad de monticulo para los
descendientes de ese nodo. Alternativamente, esta operacin se
puede contemplar como reorganizar un (sub)montculo cuya raiz es
el nodo I, donde todos los nodos excepto la raiz cumplen la
propiedad de montculo. El algoritmo consiste en intercambiar el
nodo con sus descendientes hasta restablecer la propiedad. }
Entradas
{ El montculo se representa por un vector que almacena sus elementos
en el orden de un recorrido por niveles. El vector tiene una
capacidad mxima de Max elementos, y en un momento dado almacena
nicamente N elementos en los ndices 1..N }
V : vector[1..Max] de tipo_elemento
N : entero
I : entero { ndice del nodo raiz del submontculo. 1 I N }
Salidas
V : vector[1..Max] de tipo_elemento
Variables
Padre, Hijo : enteros
Seguir : booleano
Inicio
Padre I
Hijo 2*Padre { Hijo izquierdo }
Seguir Cierto
Mientras (Hijo N) Y Seguir hacer
{ Comprobar cual es el hijo con clave mayor }
Si Hijo < N entonces { existe hijo derecho }
Si V[Hijo+1].Clave > V[Hijo].Clave entonces
Hijo Hijo+1
Fin_Si
Fin_Si
{ Comprobar si el hijo mayor tiene una clave mayor que el padre }
Si V[Hijo].Clave > V[Padre].Clave entonces
{ Intercambiar nodo padre con el nodo hijo y seguir comprobando }
V[Padre] V[Hijo]
Padre Hijo
Hijo 2*Padre
Sino
Seguir Falso
Fin_Si
Fin_Mientras
Fin

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 42


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Operaciones sobre montculos


Insercin de un nodo:
Mdulo Insertar
Entradas
V : vector[1..Max] de tipo_elemento
N : entero { Nmero de elementos del montculo }
E : tipo_elemento { Elemento que se va a insertar }
Salidas
V : vector[1..Max] de tipo_elemento
N : entero
Inicio
N N+1 { Se incrementa el nmero de elementos }
V[N] E { Se inserta al final }
Ascender(V,N,N ; N) { Se reorganiza el montculo }
Fin

Borrado del nodo raiz (el elemento con clave mxima):


Mdulo Borrar
Entradas
V : vector[1..Max] de tipo_elemento
N : entero { Nmero de elementos del montculo }
Salidas
V : vector[1..Max] de tipo_elemento
N : entero
Inicio
V[1] V[N] { Se intercambia el raiz con el ltimo }
N N-1 { Se borra el ltimo elemento }
Reestructurar(V,N,1 ; N) { Se reestructura todo el montculo }
Fin

Implementacin de Colas de prioridad

Listas no ordenadas Listas ordenadas Montculos


Acceder al mximo O(n)* O(1) O(1)
Insertar O(1) O(n) O(lg n)
Borrar el mximo O(n) O(1) O(lg n)
Modificar O(1) O(n) O(lg n)
*
O(1) llevando una referencia al elemento mximo y actualizandola adecuadamente en el resto de
operaciones. Esto supone que modificar pasa a ser O(n).

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 43


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Modificacin de un nodo:
Mdulo Modificar
Entradas
V : vector[1..Max] de tipo_elemento
N : entero { nmero de elementos del montculo }
I : entero { ndice del elemento que cambia }
E : tipo_elemento { nuevo valor del elemento }
Salidas
V : vector[1..Max] de tipo_elemento
Inicio
Si E.Clave > V[I].Clave entonces
{ Slo puede afectar a los ascendientes del nodo que cambia }
V[I] E
Ascender(V,N,I; V)
Sino
{ Slo puede afectar a los descendientes del nodo que cambia }
V[I] E
Reestructurar(V,N,I; V)
Fin-Si
Fin

Creacin de un montculo:
Mdulo Crear
{ Reorganiza un vector desordenado de forma que pueda representar
a un montculo. Eficiencia: O(n) }
Entradas
V : vector[1..Max] de tipo_elemento
N : entero { nmero de elementos del vector }
Salidas
V : vector[1..Max] de tipo_elemento
Variables
I : entero
Inicio
{ Realiza una secuencia de reestructuraciones desde los niveles
inferiores (comenzando por el padre del ltimo nodo) hasta
la raiz. }
Para I N div 2 hasta 1 incr -1
Reestructurar(V,N,I; V)
Fin-Para
Fin

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 44


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Ordenacin por montculos:


Mdulo Ordenar
{ Ordena el vector V[1..N] reorganizndolo para que represente
un montculo y "extrayendo" los elementos mximos. }
Entradas
V : vector[1..Max] de tipo_elemento
N : entero { nmero de elementos del vector }
Salidas
V : vector[1..Max] de tipo_elemento
Variables
I : entero
Inicio
{ Reorganiza el vector como montculo }
Crear(V,N; V)
{ Extraccin de los elementos mximos, que se depositan
en orden al final del vector, fuera de la parte que
representa el montculo }
Para I N hasta 2 incr -1
{ Se intercambia el mximo actual con el ltimo del montculo }
V[1] V[I]
{ Se reestructura el montculo, que ahora tiene un
elemento menos (el mximo) }
Reestructurar(V,N,I-1:; V)
Fin-Para
Fin

Comparacin de algoritmos avanzados de ordenacin:

Eficiencia Ctes. de proporcionalidad


Tiempo Espacio Movimientos Comparaciones
*
Fusin O(n lg n) O(n lg n) 2.00 0.92
2 ** **
Rpida O(n ) O(n) 0.75 1.35
Montculos O(n lg n) O(1) 2.80 1.80
*
O(n) si se pueden utilizar variables globales o vectores dinmicos. O(1) con listas enlazadas.
**
En el caso promedio, el tiempo es O(n lg n) y el espacio O(lg n)

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 45


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Arboles AVL - Rotaciones

2
x 0
y
1 0
y x
h A h+3 h+2

C h+1
h B C h+1 A h B

2
x -1
y
0 1
y x
h A h+3 h+3

C h+1
B h+1 C h A h+1
B

2 0
x z

-1/0 0/1
-1 x y
y
h+2
A h

-1/0/1
z
h+3 D h A h B C h D

B h C

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 46


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Arboles AVL Rotaciones simtricas

-2 0
x y
0
-1
x
y
C h h+3 h+2

A h+1
A B h
B h C
h+1

-2
1
x y

0 -1
x
y
C h
h+3 h+3

A h+1
A B B h+1 C h
h+1

-2 0
x z

-1/0 0/1
1
y x
y
h+2
h D
-1/0/1
z
h A h+3 A h B C h D

B h C

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 47


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Tablas de Dispersin

Representacin de datos especialmente diseada para que las operaciones


de acceso, insercin y borrado por valor o campo clave sean eficientes
(tiempo promedio constante, independiente del nmero de elementos).

Una primera aproximacin es utilizar la clave (k) como ndice de un vector


que contiene referencias a elementos. Este enfoque se denomina vector
asociativo (lookup array). Problemas:
o No todos los tipos de clave sirven de ndice de vectores (por ejemplo, cadenas de
caracteres).
o El tamao del vector (m) es igual al del rango de la clave (nmero de posibles
valores distintos que pueda tener). Este tamao es independiente del nmero de
elementos almacenados (n), y puede ser muy grande.

Las tablas de dispersin resuelven el problema definiendo una funcin de


dispersin que traduzca la clave a un valor numrico que luego se reduce
al rango deseado. El mtodo ms comn para reducir el valor es hallar el
resto de su divisin por el tamao de la tabla (m).
o Si m es el tamao elegido para la tabla y h(k) la funcin de dispersin, un elemento
cuya clave sea k se almacenar en la posicin i de la tabla: (i [0..m-1] es el ndice
del elemento)
i = h(k) mod m

o La funcin de dispersin se disea teniendo en cuenta el tipo de datos de la clave y


otras caractersticas (uniformidad sobre el conjunto de datos). Si la clave es de tipo
entero, la funcin de dispersin ms sencilla es devolver el propio valor de la clave:

h(k) = k

o Si la clave es una cadena de caracteres, podemos tratarla como una secuencia de


enteros k k0kl-1 (tomando como el valor asociado a cada carcter su posicin en
la tabla de cdigos. Una funcin de dispersin muy utilizada es la siguiente:

h(k) = ki31i (i = 0l-1)

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 48


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Tablas de Dispersin Abierta


El enfoque anterior sufre del problema de las colisiones: La funcin de
dispersin puede asignar el mismo ndice a claves distintas.

h(k1) = h(k2), k1 k2

Las tablas de dispersin abierta utilizan como estrategia de resolucin del


problema de las colisiones el permitir que varios elementos se encuentren
almacenados en la misma posicin de la tabla: Es decir, el contenido de la
tabla no son elementos, sino listas de elementos.

Las listas suelen implementarse mediante representacin enlazada, con


enlaces simples y sin mantener un orden entre los elementos.

Se define el factor de carga (L) de la tabla como el valor L = n/m, donde n


es el nmero de elementos almacenados. Si la funcin de dispersin se
comporta de manera uniforme para el conjunto de datos utilizado, entonces
L representa el tamao promedio de las listas.

Algoritmos de las operaciones de acceso, insercin y borrado:

Acceso Insercin Borrado


i h(k) mod m i h(k) mod m i h(k) mod m
lista tabla[i] lista tabla[i] lista tabla[i]
bsqueda secuencial en insercin al principio bsqueda secuencial en
lista de un elemento de la lista del elemento. lista de un elemento
cuya clave sea k cuya clave sea k y
borrado del elemento.
O(L) O(1) O(L)

Nota: La tabla se define como un vector de listas indexado de 0 a m-1.

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 49


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Propiedades de la dispersin abierta


El nmero de elementos almacenados puede ser mayor que el tamao de la
tabla. No es necesario (aunque si puede ser conveniente) realizar
operaciones de reestructuracin (cambio de tamao) de la tabla.

Las operaciones de acceso y borrado se convierten en operaciones de


bsqueda y borrado en listas: La eficiencia depende del tamao de las
listas, para que se considere que el tiempo es constante se debe cumplir:
o El tamao de las listas debe ser uniforme: No debe darse el problema de que unas
pocas listas contengan la mayora de los elementos (problema de agrupamiento
primario). Para conseguirlo se debe cumplir que la funcin de dispersin sea
uniforme para los conjuntos de datos que se van a utilizar.
o Si se cumple la condicin anterior, el tamao promedio de las listas ser de L = n/m
(factor de carga). No se debe permitir que L sea muy grande, por lo que el tamao
de la tabla debe ser del mismo orden que el mximo nmero de elementos que se
van a almacenar.

Ejemplo de agrupamiento primario


Se almacenan datos de 177 personas en un tabla de tamao m = 150 y
usando como clave el DNI. El factor de carga es de L = 1.18. Se utilizan
dos funciones de dispersin, la primera es uniforme y la segunda no:
h(dni) = dni:

Tamao de la lista 0 1 2 3 4 5

N de listas de ese tamao 52 43 38 11 5 1

Porcentaje de elementos que


24 % 43 % 19 % 11 % 3%
estn en listas de ese tamao

h(dni) = dni div 100000: (Usa los 3 primeros dgitos del DNI)

Tamao de la lista 0 1 2 5-9 14-18 65

N de listas de ese tamao 125 11 5 4 4 1

Porcentaje de elementos que


6% 6% 14 % 37 % 37 %
estn en listas de ese tamao

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 50


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Tablas de Dispersin Cerrada


Las tablas de dispersin cerrada utilizan como estrategia de resolucin del
problema de colisiones el asignar otra posicin en la tabla al elemento cuya
posicin est ocupada.

Se define una funcin adicional, la funcin de exploracin, que calcula


una nueva posicin para un elemento a partir de su posicin inicial y del
nmero de intentos de realojamientos (n de colisiones sufridas) en el
proceso de hallar una posicin vaca.

El contenido de las tablas de dispersin cerrada son referencias a


elementos: A diferencia de la dispersin abierta, slo se puede almacenar
un elemento (o ninguno) en cada celda.

Algoritmos de las operaciones de acceso, insercin y borrado:

i0 h(k) ; i fm (i0,0) ; j 1
MIENTRAS tabla[i] no vaca Y tabla[i].clave k HACER
Acceso

i fm (i0 , j) ; j j + 1
FIN_MIENTRAS

SI tabla[i] vaca ENTONCES no encontrado SINO elem tabla[i]


i0 h(k) ; i fm (i0,0) ; j 1
tabla[i] no vaca Y tabla[i] no borrada HACER
Insercin

MIENTRAS
i fm (i0 , j) ; j j + 1
FIN_MIENTRAS
tabla[i] elem ; quitar marca de borrado (si existe)
i0 h(k) ; i fm (i0,0) ; j 1
MIENTRAS tabla[i].clave k O tabla[i] borrada HACER
Borrado

i fm (i0 , j) ; j j + 1
FIN_MIENTRAS
marcar tabla[i] como borrada

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 51


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Descripcin de las operaciones


Cuando se busca un elemento en la tabla se sigue el mismo camino de
exploracin que se ha seguido en la insercin. La aparicin de una posicin
vaca indica que no existe el elemento en la tabla, ya que en caso contrario
se hubiera insertado en esa posicin.

La estrategia anterior implica que no se debe permitir que la tabla est


completamente llena, ya que impedira detectar que un elemento no existe.
Por lo tanto se debe exigir que n < m. Si al insertar un elemento se llena la
tabla se debe reestructurar (crear una nueva tabla de tamao mayor e
insertar todos los elementos en la nueva tabla).

Adems se plantea el problema de que borrar un elemento cambiando su


posicin en la tabla a vaca puede impedir el hallar otros elementos que
sufrieron una colisin en esa posicin, ya que aparece una posicin vaca
en su ruta de exploracin.

La solucin ms utilizada es la estrategia perezosa de borrado: Los


elementos no se borran marcando su posicin como vaca, sino que se
marca es posicin como borrada. Una casilla borrada se puede usar para
insertar un elemento (al igual que una posicin vaca), pero no indica el
final de una exploracin (a diferencia de una posicin vaca).

Funciones de Exploracin
Las funciones de exploracin ms utilizadas son la exploracin lineal,
cuadrtica y con desplazamiento cociente (tambien llamada doble
dispersin):

Exploracin lineal: fm(i0 , j) = (i0 + j) mod m

Exploracin cuadrtica: fm(i0 , j) = (i0 + j2) mod m

Exploracin por desplazamiento cociente:


d i0 div m ; si d = 0 entonces d 1
fm(i0 , j, d) = (i0 + jd) mod m

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 52


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Propiedades de las Funciones de Exploracin

La funcin de exploracin lineal es la estrategia ms sencilla: Cada intento


de realojamiento explora la casilla siguiente de la tabla.

Se tiene la garanta de que si existe una posicin libre esta estrategia la va a


encontrar: Se explora toda la tabla.

Sin embargo es vulnerable al problema del agrupamiento secundario: Si


se insertan elementos cuyos claves generen ndices correlativos, que
comprendan una regin de la tabla donde ya existen algunos elementos,
podemos tener una tabla donde la mayora de los elementos estn
desplazados de su posicin original aunque gran parte de la tabla est vaca.

Para resolver ste problema es conveniente que las funciones de


exploracin recorran posiciones alejadas de la original.

La exploracin cuadrtica resuelve el problema explorando posiciones


cada vez ms alejadas de la original. Pero a diferencia de la exploracin
lineal no tenemos garanta de que se recorra toda la tabla: La exploracin
recorre un ciclo de posiciones que no tiene porqu comprender todas las
posiciones posibles.

Por ltimo, la exploracin con desplazamiento cociente resuelve el


problema explorando posiciones alejadas a una distancia fija (el
desplazamiento). Adems, como el desplazamiento depende del valor de la
clave, este mtodo es menos vulnerable que los anteriores al problema del
agrupamiento primario (funcin de dispersin no uniforme).

Se puede garantizar que la exploracin con desplazamiento cociente recorre


toda la tabla imponiendo que el tamao de la tabla, m, sea un nmero
primo.

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 53


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Eficiencia en las Tablas de Dispersin

La eficiencia depender de la longitud de las listas (dispersin abierta) o de


la longitud del proceso de exploracin (dispersin cerrada). Existen dos
situaciones distintas: Explorar para encontrar un elemento o explorar para
encontrar una posicin vaca. El anlisis en el caso promedio da los
resultados siguientes:

N promedio de accesos a tabla

Operacin Disp. Abierta Disp. Cerrada

Acceso (xitoso) 1+L/2 ln(1/(1-L))/L

Acceso (fallido) 1+L 1/(1-L)

Insercin 0 ln(1/(1-L))/L

Borrado 1+L/2 1/(1-L)

En la dispersin abierta la dependencia es lineal con el factor de carga. En


la dispersin cerrada, sin embargo, a medida que el factor de carga se
aproxima al valor lmite 1 (tabla llena), el nmero de accesos crece de
manera potencial.

Por lo tanto, si se desea garantizar un orden constante en el caso promedio,


se deben cumplir las siguientes condiciones:
o Disear la funcin de dispersin para que sea uniforme de acuerdo con las
caractersticas de los datos que se van a utilizar.

o En tablas de dispersin cerrada, usar exploracin cuadrtica o desplazamiento


cociente si puede darse el caso de agrupamiento secundario.

o Ajustar el tamao de la tabla para que el factor de carga este dentro de unos lmites
tolerables. En el caso de dispersin cerrada es obligatorio reestructurar la tabla
cuando el factor de carga se aproxime a la unidad.

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 54


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Diccionario (un elemento por clave)

ESPECIFICACIN DICCIONARIO_ELEM_NICO
PARMETROS
GENEROS clave, elemento
OPERACIONES
= , : clave, clave booleano { Relacin de igualdad entre claves }
FIN_PARMETROS
GENEROS diccionario1
OPERACIONES
crear : diccionario1 { creacin de un diccionario vaco }
aadir : diccionario1, clave, elemento : diccionario { insercin y modificacin }
borrar : diccionario1, clave diccionario { borrado }
presente : diccionario1, clave booleano { existencia de par clave-elemento }
PARCIAL valor : diccionario1, clave elemento { acceso }
VARIABLES
k, k1, k2 : clave
e, e1, e2 : elemento
d : diccionario1
DEFINIBILIDAD
presente( d, k ) DEF [ valor( d, k ) ]
ECUACIONES
borrar( crear, k ) == crear
borrar( aadir( d, k, e ), k ) == borrar( d, k )
( k1 k2 ) borrar( aadir( d, k1, e ), k2 ) == aadir( borrar( d, k2 ), k1, e )
presente( crear, k ) == F
presente( aadir( d, k, e ), k ) == T
( k1 k2 ) presente( aadir( d, k1, e ), k2 ) == presente( d, k2 )
valor( aadir( d, k, e ), k ) == e
( k1 k2 ) valor( aadir( d, k1, e ), k2 ) == valor( d, k2 )

FIN_ESPECIFICACIN

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 55


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Diccionario (mltiples elementos por clave)

ESPECIFICACIN DICCIONARIO_ELEM_MULTIPLE
USA LISTA_BASE
PARMETROS
GENEROS clave, elemento
OPERACIONES
= , : clave, clave booleano { Relacin de igualdad entre claves }
= , : elemento, elemento booleano { Relacin de igualdad entre elementos }
FIN_PARMETROS
GENEROS diccionario2
OPERACIONES
crear : diccionario2 { creacin de un diccionario vaco }
aadir : diccionario2, clave, elemento : diccionario { insercin }
borrar : diccionario2, clave diccionario { borrado de todos los elementos
asociados a la misma clave }
quitar : diccionario2, clave, elemento : diccionario { borrado de elemento concreto }
valor : diccionario2, clave lista { acceso a elems. asociados a clave }
VARIABLES
k, k1, k2 : clave
e, e1, e2 : elemento
d : diccionario2
ECUACIONES
borrar( crear, k ) == crear
borrar( aadir( d, k, e ), k ) == borrar( d, k )
( k1 k2 ) borrar( aadir( d, k1, e ), k2 ) == aadir( borrar( d, k2 ), k1, e )
quitar( crear, k, e ) == crear
quitar( aadir( d, k, e ), k, e ) == quitar( d, k, e )
( e1 e2 ) borrar( aadir( d, k1, e1 ), k2, e2) == aadir( quitar( d, k2, e2 ), k1, e1 )
valor( crear, k ) == [ ]
valor( aadir( d, k, e ), k ) == e >> valor( d, k )
( k1 k2 ) valor( aadir( d, k1, e ), k2 ) == valor( d, k2 )

FIN_ESPECIFICACIN

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 56


Estructuras de Datos - Curso 02/03 I. T. Informtica Gestin

Implementacin de Diccionarios y Conjuntos

Listas ordenadas Arboles AVL Tablas de dispersin


Bsqueda / Pertenencia (lg n) (lg n) (1)*
Insercin O(n) (lg n) (1)**
Borrado O(n) (lg n) (1)*
Recorrido en orden (n) (n) (n lg n)
*
Siempre que el factor de carga se mantenga constante. El orden se refiere a tiempos promedio.
*
Valor amortizado sobre operaciones de reestructuracin.

Diccionarios y Conjuntos en Pylon

P_CONTAINER

P_SEARCHABLE

P_SET P_TABLE[G, K]

P_HASH_SET[G] P_DICTIONARY[G, K] P_CATALOG[G, K]

HASHABLE

UNIVERSIDAD DE VALLADOLID - DPTO. DE INFORMTICA PG. 57

También podría gustarte