RBOLES
B
INSTITUTO TECNOLGICO DE VERACRUZ
TECNOLGICO NACIONAL DE MXICO
INGENIERA EN SISTEMAS COMPUTACIONALES
RBOLES
Proyecto de Investigacin
PARA ACREDITAR LA MATERIA
ESTRUCTURA DE DATOS
PRESENTAN LOS ALUMNOS:
CASTILLO HUERTA BRENDA KAREN
ESCOBEDO DOMNGUEZ MARA GUADALUPE
GRAJALES DOMNGUEZ AARON
GRUPO: 3J2
HORARIO: 12-13 HRS.
PROFESOR DE LA MATERIA:
ING. BALLESTEROS BARRADAS LUIS BERNARDO
VERACRUZ, VER.
NOVIEMBRE, 2015
NDICE
INTRODUCCIN
CONCEPTO DE RBOL
CLASIFICACIN DE RBOLES
APLICACIONES
RBOLES BALANCEADOS
GRAFOS
TERMINOLOGA DE GRAFOS
OPERACIONES SOBRE GRAFOS
CONCLUSIN
BIBLIOGRAFA
raz
nodo
nodo
nodo
nodo
nodo terminal
hoja
nodonodo
subrbol
INTRODUCCIN
Existen en Informtica varias estructuras no lineales, en las que un elemento puede estar
relacionado con ms de uno, sea por delante o detrs de l (por ejemplo, los grafos); no
obstante, dentro del carcter introductorio de sta unidad, se hablar de la ms sencilla de
ellas, la de rbol.
Para todos son familiares las expresiones como rbol genealgico o recorrer un rbol. En
este sentido, un rbol es una estructura que implica una jerarqua, en la que cada elemento
est unido a otros por debajo de l. Comparada con las estructuras lineales anteriores
(listas), el rbol tiene la particularidad de que cada elemento puede tener ms de un
siguiente, aunque un solo antecedente o padre.
Se definir rbol, de forma recursiva, como un conjunto finito de uno o ms nodos, de tal
manera, que exista un nodo especial denominado raz y los nodos restantes estn divididos
en conjuntos denominados subrboles, que tambin responden a la estructura de un rbol.
Por extensin a la idea de rbol genealgico se habla de nodos padres y nodos hijo y un
nodo, en la parte inferior del que no cuelgue ningn subrbol (no tiene ningn hijo) se
denomina nodo terminal u hoja.
CONCEPTO DE RBOL
Hay un tipo especial de rbol muy usado en computacin, denominado rbol binario, en el
que de cada nodo pueden colgar, a lo ms, dos subrboles. Estos se denominan subrbol
derecho y subrbol izquierdo, y tambin son rboles binarios. La Figura 2 representa un rbol
binario.
nodo
nodo
nodo
nodo
nodo
nodo
nodo
La forma usual de representar los rboles supone el uso de punteros, aunque tambin
puede hacer con vectores. En un rbol binario cada nodo est constituido por una parte
datos (INFORMACION) y dos punteros que indican la posicin de sus hijos. Uno o ambos
los punteros pueden tener un valor nulo si del nodo no cuelgan subrboles. Cada nodo de
rbol ser un registro que contiene al menos tres campos:
-
se
de
de
un
La Figura 3 ilustra el uso de los punteros para construir el mismo rbol representado en la
Figura 2. Ntese cmo los punteros de los nodos terminales son punteros nulos.
dato
puntero izdo. puntero dcho.
dato
puntero izdo. puntero dcho.
dato
puntero izdo. puntero dcho.
dato
puntero izdo. puntero dcho.
dato
puntero izdo. puntero dcho.
dato
puntero izdo. puntero dcho.
dato
puntero izdo. puntero dcho.
CLASIFICACIN DE RBOLES
RECORRIDO DE UN RBOL BINARIO
Recorrer un rbol supone acceder a sus elementos de forma sistemtica lo que supone llevar
a cabo tres actividades:
1.
2.
3.
Estas tres acciones repartidas en diferentes rdenes proporcionan diferentes recorridos del
rbol, llamados: pre-orden, post-orden, in-orden. Su nombre refleja el momento en que se
visita el nodo raz. En el in-orden el raz est en el medio del recorrido, en el pre-orden, el
raz est el primero y en el post-orden, el raz est el ltimo:
RECORRIDO PRE-ORDEN
1.
Visitar el raz
2.
3.
RECORRIDO IN-ORDEN
1.
2.
Visitar el raz
5
3.
RECORRIDO POST-ORDEN
1.
2.
3.
Visitar el raz
Obsrvese que todas estas definiciones de recorrido tienen naturaleza recursiva. EJEMPLO:
Determinar cul sera el resultado de los tres posibles recorridos para cada uno de los tres
rboles mostrados en la Figura anterior:
ARBOL 1
ARBOL 2
ARBOL 3
La
caracterstica
esencial de los rboles es que cada uno de sus nodos puede estar conectado a subrboles,
que a su vez tiene estructura arbrea. En otras palabras, siempre que se est en un rbol, la
estructura inferior tiene carcter de rbol. En este sentido un rbol es una estructura de
datos recursiva, que puede manipularse mediante programas recursivos. Esta propiedad de
los rboles es la que los hace ms interesantes desde un punto de vista informtico y por
ello se utilizan ampliamente, como por ejemplo: los mdulos de muchos programas se
enlazan como si de rboles se tratara, la estructura que emplean muchos sistemas
operativos para manejar los ficheros son rboles, algunos ordenadores se refieren a su
memoria como si sta estuviera fragmentada en forma de rbol; asimismo acabamos de ver
cmo los rboles se usan para representar operaciones aritmticas.
APLICACIONES
2.
Los valores del rbol deben ser tales que pueda existir un orden (entero, real, lgico o
carcter e incluso definido por el usuario si se tiene un orden total con l).
3.
En cualquier nodo, todos los valores del subrbol izquierdo del nodo son menores o
iguales que el valor del nodo. De modo similar todos los valores del subrbol derecho deben
ser mayores que los valores del nodo.
Para este tipo de rbol, es sencillo probar que su recorrido in-orden obtiene los valores
debidamente ordenados, lo que nos ser de gran utilidad. As, por ejemplo, en la Figura 4 se
muestra un rbol binario de bsqueda.
EJEMPLO:
Supongamos que se dispone de un vector que contiene los siguiente caracteres: D F E B A
C G para expresarlo mediante un rbol binario de bsqueda, vamos a seguir el algoritmo:
1.
2.
El siguiente elemento se convierte en el descendente derecho, dado que F
alfabticamente es mayor que D.
3.
A continuacin, se compara E con el raz. Dado que E es mayor que D, pasar a ser un
hijo de F y como E < F ser el hijo izquierdo.
4.
El siguiente elemento B se compara con el raz D y como B<D y es el primer elemento
que cumple esta condicin, B ser el hijo izquierdo de D.
5.
de que el vector
previamente
o descendentemente)
que
obtendramos
lista.
BSQUEDA DE UN ELEMENTO
La bsqueda en un rbol binario ordenado es dicotmica, ya que a cada examen de un nodo,
se elimina aquel de los subrboles que no contiene el valor buscado (valores todos inferiores
o todos superiores).
El algoritmo de bsqueda del elemento -llamado clave - se realiza comparndolo con la raz
del rbol. Si no es el mismo, se pasa el subrbol izquierdo o derecho segn sea el resultado
de la comparacin y se repite la bsqueda en ese subrbol, de forma recursiva.
se encuentra la clave
INSERTAR UN ELEMENTO
Para insertar un elemento en un rbol hay que comprobar en primer lugar que aquel no se
encuentre ya en el rbol, dado que en este caso no precisa ser insertado (de hecho sta es
una comprobacin que tambin deberamos hacer trabajando con vectores o listas
enlazadas, lo que supone que cada insercin se acompaa, en cierta manera, de un proceso
de bsqueda). Si el elemento no existe, la insercin se realiza en un nodo en el que al menos
uno de los dos punteros IZQ o DER tenga valor nulo, con lo cual el nuevo elemento de inserta
como una nueva hoja del rbol, sea cual sea su valor.
La insercin no vara mucho del propio proceso de bsqueda, pues realmente vamos a
insertar el nodo en la posicin que sta ocupara, si ya se encontrara en el rbol. Para ello, se
desciende en el rbol a partir del nodo raz, dirigindose de izquierda a derecha de un nodo,
segn que el valor a insertar sea inferior o superior al valor del campo INFO de este nodo.
Cuando se alcanza un nodo del rbol en que no se puede continuar, el nuevo elemento se
engancha a la izquierda o derecha de este nodo, en funcin de que su valor sea inferior o
superior al del nodo alcanzado.
10
ELIMINACIN DE UN ELEMENTO
La eliminacin de un elemento debe hacerse conservando el orden de los elementos del
rbol. Se consideran diferentes casos segn la posicin del elemento o nodo en el rbol a
eliminar:
-
Para poder realizar estas acciones, ser preciso conocer la siguiente informacin del nodo a
eliminar:
-
Su posicin en el rbol;
La direccin de su padre;
RBOLES
BALANCEADOS
Cuando un rbol binario crece o decrece descontroladamente, el rendimiento puede
disminuir considerablemente. El caso ms desfavorable se produce cuando se inserta un
conjunto de claves ordenadas en forma ascendente o descendente.
El nmero promedio de comparaciones que debe realizarse para localizar una determinada
clave, en un rbol binario de bsqueda con crecimiento descontrolado es N/2, cifra que
muestra un rendimiento muy pobre en la estructura.
Con el objeto de mejorar el rendimiento en la bsqueda surgen los rboles balanceados. La
idea central de stos es la de realizar reacomodos o balanceos, despus de inserciones o
eliminaciones de elementos. Estos rboles tambin reciben el nombre de AVL en honor a sus
inventores, dos matemticos rusos, G.M. Adelson-Velskii y E.M. Landis.
Formalmente se define un rbol balanceado como un rbol binario de bsqueda, en el cual
se debe cumplir la siguiente condicin: Para todo nodo T del rbol, la altura de los
subrboles izquierdo y derecho no debe diferir en ms de una unidad.
Los rboles balanceados se parecen mucho, en su mecanismo de formacin, a los nmeros
Fibonacci. El rbol de altura 0 es vaco, el rbols de altura 1 tiene un nico nodo y en general
el nmero de nodos del rbol con altura h>1 se calcula aplicando la siguiente frmula
recursiva:
Kh = Kh-1 + 1 + Kh-2
12
Para poder determinar si un rbol est balanceado o no, debe manejarse informacin relativa
al equilibrio de cada nodo del rbol. Surge as el concepto de factor de equilibrio de un nodo
(FE) que se define como: la altura del subrbol derecho menos la altura del subrbol
izquierdo.
FE = HRD HRI
Los valores que puede tomar FE son: -1, 0, 1. Si FE llegara a tomar los valores de 2 o 2,
entonces debera restructurarse el rbol.
struct NodoArbol {
13
int dato;
int FE;
struct NodoArbol *aptIzq, *aptDer;
};
El proceso de insercin en un rbol balanceado es sencillo pero con algunos detalles un poco
complicados. Primero debe seguirse el camino de bsqueda del rbol, hasta localizar el lugar
donde hay que insertar el elemento. Luego se calcula su FE, que obviamente ser 0, y
regresamos por el camino de bsqueda calculando el FE de los distintos nodos. Si en alguno
de los nodos se viola el criterio de equilibrio entonces debe restructurarse el rbol. El
proceso termina al llegar a la raz del rbol, o cuando se realiza la restructuracin del mismo;
en cuyo caso no es necesario determinar el FE de los restantes nodos.
Restructurar el rbol significa rotar los nodos del mismo. La rotacin puede ser simple o
compuesta. El primer caso involucra dos nodos y el segundo caso afecta a 3. Si la rotacin es
simple puede realizarse por las ramas derechas (DD) o por las ramas izquierdas (II). Si la
rotacin es compuesta puede realizarse por las ramas derecha e izquierda (DI) o por las
ramas izquierda y derecha (ID).
El algoritmo inserta un elemento en un rbol balanceado. Raz es una variable de tipo
puntero (por referencia). Bo es una variable de tipo booleano (por referencia). Bo se utiliza
para indicar que la altura del rbol ha crecido, su valor inicial es FALSO. Dato es una variable
de tipo entero que contiene la informacin del elemento que queremos insertar. Otro, Nodo1
y Nodo2 son variables auxiliares de tipo puntero.
ms pequeos burbujean hacia la parte superior de la lista, mientras que los valores ms
grandes se hunden hacia el fondo de la lista.
Los pasos generales del algoritmo son:
1.
Se compara cada elemento de la lista con su valor adyacente, si estn desordenados
se intercambian entre s. Se comienza comparando el primer elemento con el segundo;
luego el segundo con el tercero; y se prosigue hasta el final de la lista de datos.
Al terminar de hacer un recorrido de la lista, el elemento ms grande se encuentra al fondo
de la lista, y algunos elementos pequeos se han acercado al principio de la misma.
2.
Se vuelve a recorrer la lista, intercambiando los valores desordenados, pero omitiendo
comparar el elemento mayor pues ya est ordenado.
3.
Se siguen haciendo recorridos hasta que la lista est ordenada. El nmero de
recorridos ser de n-1.
Se puede optimizar para que suspenda los ordenamientos si la lista se encuentra ordenada
antes del recorrido n-1.
15
La idea central de este algoritmo consiste en insertar un elemento del arreglo en la parte
izquierda del mismo, que ya se encuentra ordenada. Este proceso se repite desde el
segundo hasta el n- simo elemento.
Tambin se puede elaborar en una lista separada iniciando con un elemento que ya se
encuentra ordenado. La lista ira creciendo de manera ordenada conforme se inserte nuevos
elementos.
Mtodo de Shell
Recibe este nombre en honor a su autor Donald L. Shell. Este mtodo tambin se conoce con
el nombre de insercin con incrementos decrecientes.
La idea general del algoritmo es la siguiente:
1.
Se divide la lista original de n elementos en n/2 grupos de dos con un intervalo entre
los elementos de cada grupo de n/2 y se clasifica cada grupo por separado; es decir, se
comparan las parejas de elementos y si no estn ordenados se intercambian entre s de
posiciones.
2.
Se divide ahora la lista en n/4 grupos de cuatro con un intervalo de n/4 y se clasifican
los datos de cada grupo.
3.
Mtodo Quicksort
El algoritmo bsico fue inventado en 1960 y es por lo general el algoritmo de ordenacin
ms rpido y eficiente. El mtodo consiste en lo siguiente:
1.
2.
Se trata de ubicar a X en la posicin correcta del arreglo, de tal forma que todos los
elementos que se encuntran a su izquierda sean menores o iguales a X y todos los
elementos que se encuentarn a su derecha sean mayores o iguales a X.
3.
Se repiten los pasos anteriores pero ahora para los conjuntos de datos que se
encuntran a la izquierda y a la derecha de la posicin correcta de X en el arreglo.
4.
El proceso termina cuando todos los elementos se encuentran en su posicin correcta
en el arreglo.
Algoritmo:
16
x arr[der]; i izq;
j der;
Repite
mientras arr[i]<x i i+1
fin_mientras mientras arr[j]>x
j j-1 fin_mientras si i<=j
aux arr[i] arr[i]arr[j] arr[j]aux
i i+1 j j-1
fin_si Hasta que i>j
si izq<j
quickSort(arr, izq, j) fin_si
si i<der
quickSort(arr, i, der) fin_si
fin.
La llamada inicial sera quicksort(arreglo, 1, n) quickSort(arreglo, 0, n-1) en C.
MTODOS DE BSQUEDA
Buscar en una tabla un determinado valor significa localizar un elemento de la tabla cuyo
contenido coincida con l. Si no existe ningn elemento coincidente con el valor buscado, se
deber indicar esta situacin mediante un mensaje.
17
Si la tabla est desordenada slo hay una forma de bsqueda: la bsqueda secuencial.
El algoritmo consiste bsicamente en recorrer la tabla comparando el valor que se desea
localizar con cada uno de los elementos del mismo hasta que se encuentre. En ese momento
se podr saber, adems, en qu posicin est situado dicho elemento.
Si se recorre la tabla completa y no se encuentra, se emitir un mensaje indicativo de su no
existencia.
La bsqueda se realizar mediante un ciclo repetitivo, cuya condicin de salida ser que, o
bien se encuentre el elemento deseado, o bien se termine la tabla. Al salir del ciclo, debido a
que ha podido ser por dos motivos diferentes, se preguntar cul de ellos fue y se proceder
con la accin correspondiente.
El pseudocdigo de bsqueda secuencial para localizar un valor (que se introduce desde el
teclado) en un vector desordenado V, de N elementos y que utiliza una variable BANDERA de
tipo booleano, sera:
Este mtodo es similar al visto anteriormente, con la diferencia de que si la tabla est
ordenada de forma ascendente, se puede detectar que el valor buscado no est en ella, en
el momento en que se encuentre un elemento con un valor superior a l.
La bsqueda de un elemento consiste en recorrer la tabla mediante un ciclo repetitivo, cuya
condicin de salida no ser slo que se encuentre el elemento, o que se termine la tabla,
sino tambin que se alcance un elemento con contenido mayor que el buscado.
Al salir de este ciclo se averiguar si el motivo fue la localizacin o no del elemento, y se
emitir en este caso el correspondiente mensaje.
El pseudocdigo de bsqueda secuencial para localizar un valor en una tabla ordenada
crecientemente V, de N elementos, sera:
18
Si no coinciden, se determina si el valor buscado debe estar en la mitad izquierda o
derecha del arreglo, dependiendo de si es inferior o superior, respectivamente, del elemento
central.
La posicin del elemento central del arreglo se calcula mediante la frmula:
POS_MED = ENT ( (POS_INI + POS_FIN) / 2)
Donde POS_INI y POS_FIN son las posiciones: inicial y final del subarreglo que se est
considerando.
1. En la mitad donde se deba continuar la bsqueda, se procede de la misma manera, es
decir, se compara el valor buscado con el elemento central de esa mitad.
Si coincide, se ha localizado.
Si no coincide, se determina en cul de las dos mitades de esta submitad debe estar el
valor deseado.
1. Se sigue procediendo de este modo (dividiendo el arreglo en submitades) hasta que la
bsqueda:
Se termine sin xito (no se pudo encontrar el elemento por no existir en el arreglo).
19
Cuando se tienen claves que no se corresponden con ndices (por ejemplo, por ser
alfanumricas), o bien cuando las claves son valores numricos muy grandes, debe utilizarse
una funcin hash que permita transformar la clave para obtener una direccin apropiada.
Esta funcin hash debe ser simple de calcular y debe asignar direcciones de la manera ms
uniforme posible. Es decir, dadas dos claves diferentes debe generar posiciones diferentes.
Si esto no ocurre (H(K1) = d, H(K2) = d y K1 K2), hay una colisin.
Se define, entonces, una colisin como la asignacin de una misma direccin a dos o ms
claves distintas.
Para trabajar con este mtodo de bsqueda debe elegirse previamente:
Una funcin hash que sea fcil de calcular y que distribuya uniformemente las claves.
Un mtodo para resolver colisiones. Si stas se presentan se debe contar con algn
mtodo que genere posiciones alternativas.
Funciones hash
No hay reglas que permitan determinar cul ser la funcin ms apropiada para un conjunto
de claves, de tal manera que asegure la mxima uniformidad en la distribucin de las
mismas.
1. Funcin mdulo (por divisin)
Consiste en tomar el residuo de la divisin de la clave entre el nmero de componentes del
arreglo. Supngase que se tiene un arreglo de N elementos, ya sea K la clave del dato a
buscar. La funcin hash queda definida por la siguiente frmula:
H(k) = (K mod N) + 1
En la frmula puede observarse que al residuo de la divisin se le suma 1, esto es para
obtener un valor entre 1 y N.
Para lograr una mayor uniformidad en la distribucin, N debe ser un nmero primo o divisible
por muy pocos nmeros. Por lo tanto, dado N, si ste no es un nmero primo se tomar el
valor primo ms cercano.
Ejemplo:
Sean N = 100 el tamao del arreglo, y sean sus direcciones los nmeros entre 1 y 100. Sean
K1 = 7259 y K2 = 9359 dos claves a las que deban asignarse posiciones en el arreglo. Se
aplica la frmula con N = 100, para calcular las direcciones correspondientes a K1 y K2.
H(K1) = (7259 mod 100) + 1 = 60
20
1. Funcin cuadrado
Consiste en elevar al cuadrado la clave y tomar los dgitos centrales como direccin. El
nmero de dgitos a tomar queda determinado por el rango del ndice. Sea K la clave del
dato a buscar. La funcin hash queda definida por la siguiente frmula:
H(K) = dgitos_centrales (K2) + 1
La suma de una unidad a los dgitos centrales es para obtener un valor entre 1 y N.
Ejemplo:
Sean N = 100 el tamao del arreglo, y sean sus direcciones los nmeros entre 1 y 100. Sean
K1 = 7259 y K2 = 9359 dos claves a las que deban asignarse posiciones en el arreglo. Se
aplica la frmula para calcular las direcciones correspondientes a K1 y K2.
K12 = 52 693 081
K22 = 87 590 881
H(K1) = dgitos_centrales (52 693 081) + 1 = 94
H(K2) = dgitos_centrales (87 590 881) + 1 = 91
Como el rango de ndices en el arreglo vara de 1 a 100 se toman solamente los dos dgitos
centrales del cuadrado de las claves.
1. Funcin plegamiento
Consiste en dividir la clave en partes de igual nmero de dgitos (la ltima puede tener
menos dgitos) y operar con ellas, tomando como direccin los dgitos menos significativos.
La operacin entre las partes puede hacerse por medio de sumas o multiplicaciones. Sea K
la clave del dato a buscar. K est formada por los dgitos d1, d2, , dn. La funcin hash
queda definida por la siguiente frmula:
H(K) = dgmensig ((d1 di) + (di dj) + ... + (d1 dn)) + 1
21
H(K) = dgmensig ((d1 di) * (di dj) * ... * (d1 dn)) + 1
El operador que aparece en la frmula operando las partes de la clave es el de suma. La
suma de una unidad a los dgitos menos significativos (dgmensig) es para obtener un valor
entre 1 y N.
Ejemplo:
Sean N = 100 el tamao del arreglo, y sean sus direcciones los nmeros entre 1 y 100. Sean
K1 = 7259 y K2 = 9359 dos claves a las que deban asignarse posiciones en el arreglo. Se
aplica la frmula para calcular las direcciones correspondientes a K1 y K2.
H(K1) = dgmensig (72 + 59) + 1 = dgmensig (131) + 1 = 32
H(K2) = dgmensig (93 + 59) + 1 = dgmensig (152) + 1 = 53
De la suma de las partes se toman solamente dos dgitos porque los ndices del arreglo
varan de 1 a 100.
1. Funcin truncamiento
Consiste en tomar algunos dgitos de la clave y formar con ellos una direccin. Este mtodo
es de los ms sencillos, pero es tambin de los que ofrecen menos uniformidad en la
distribucin de las claves.
Sea K la clave del dato a buscar. K est formada por los dgitos dgitos d1, d2, , dn. La
funcin hash queda definida por la siguiente frmula:
La eleccin de los dgitos es arbitraria. Podran tomarse los dgitos de las posiciones impares
o de las pares. Luego podra unrseles de izquierda a derecha o de derecha a izquierda. La
suma de una unidad a los dgitos seleccionados es para obtener un valor entre 1 y 100.
Ejemplo:
22
Sean N = 100 el tamao del arreglo, y sean sus direcciones los nmeros entre 1 y 100. Sean
K1 = 7259 y K2 = 9359 dos claves a las que deban asignarse posiciones en el arreglo. Se
aplica la frmula para calcular las direcciones correspondientes a K1 y K2.
H(K1) = elegirdgitos (7 2 5 9) + 1 = 76
H(K2) = elegirdgitos (9 3 5 9) + 1 = 96
En este ejemplo se toma el primer y tercer nmero de la clave y se une ste de izquierda a
derecha.
En todos los casos anteriores se presentan ejemplos de claves numricas. Sin embargo, en la
realidad las claves pueden ser alfabticas o alfanumricas. En general, cuando aparecen
letras en las claves se suele asociar a cada una un entero a efectos de convertirlas en
numricas.
Otra alternativa sera, para cada carcter, tomar su valor decimal asociado segn el cdigo
ASCII. Una vez obtenida la clave en su forma numrica, se puede utilizar normalmente
cualquiera de las funciones arriba mencionadas.
Solucin de colisiones.
La eleccin de mtodo adecuado para resolver colisiones es tan importante como la eleccin
de una buena funcin hash. Normalmente, cualquiera que sea el mtodo elegido, resulta
costoso tratar las colisiones. Es por ello que debe hacerse un esfuerzo por encontrar la
funcin que ofrezca mayor uniformidad en la distribucin de las claves.
La manera ms natural de resolver el problema de las colisiones es reservar una casilla por
clave. Es decir, que aquellas se correspondan una a una con las posiciones del arreglo. Pero
como ya se mencion, esta solucin puede tener un alto costo en memoria. Por lo tanto
deben analizarse otras alternativas que permitan equilibrar el uso de memoria con el tiempo
de bsqueda.
23
Reasignacin
Prueba lineal
Prueba cuadrtica
a) Prueba lineal
Consiste en que una vez detectada la colisin se debe recorrer el arreglo secuencialmente a
partir del punto de colisin, buscando al elemento. El proceso de bsqueda concluye cuando
el elemento es hallado, o bien cuando se encuentra una posicin vaca. Se trata al arreglo
como a una estructura circular: el siguiente elemento despus del ltimo es el primero.
La cuarta condicin del ciclo mientras (DX D), es para evitar caer en un ciclo infinito, si el
arreglo estuviera lleno y el elemento a buscar no se encontrara en l.
a) Prueba cuadrtica
Este mtodo es similar al de la prueba lineal. La diferencia consiste en que en el cuadrtico
las direcciones alternativas se generarn como D + 1, D + 4, D + 9, , D + i2 en vez de D +
1, D + 2, , D + i. Esta variacin permite una mejor distribucin de las claves colisionadas.
La principal desventaja de este mtodo es que pueden quedar casillas del arreglo sin visitar.
Adems, como los valores de las direcciones varan en I2 unidades, resulta difcil determinar
una condicin general para detener el ciclo mientras. Este problema podra solucionarse
24
empleando una variable auxiliar, cuyos valores dirijan el recorrido del arreglo de tal manera
que garantice que sern visitadas todas las casillas.
Consiste en que una vez detectada la colisin se debe generar otra direccin aplicando la
funcin hash a la direccin previamente obtenida. El proceso se detiene cuando el elemento
es hallado, o bien cuando se encuentra una posicin vaca.
La funcin hash que se aplique a las direcciones puede o no ser la misma que originalmente
se aplic a la clave. No existe una regla que permita decidir cul ser la mejor funcin a
emplear en el clculo de las sucesivas direcciones.
d)
Arreglos anidados
Este mtodo consiste en que cada elemento del arreglo tenga otro arreglo en el cual se
almacenen los elementos colisionados. Si bien la solucin parece ser sencilla, es claro
tambin que resulta ineficiente. Al trabajar con arreglos se depende del espacio que se haya
asignado a ste. Lo cual conduce a un nuevo problema difcil de solucionar: elegir un tamao
adecuado de arreglo que permita un equilibrio entre el costo de memoria y el nmero de
valores colisionados que pudiera almacenar.
e)
Encadenamiento
Consiste en que cada elemento del arreglo tenga un apuntador a una lista ligada, la cual se
ir generando e ir almacenando los valores colisionados a medida que se requiera. Es el
mtodo ms eficiente debido al dinamismo propio de las listas. Cualquiera que sea el
nmero de colisiones registradas en una posicin, siempre ser posible tratar una ms.
Como desventajas del mtodo de encadenamiento se cita el hecho de que ocupa espacio
adicional al de la tabla, y que exige el manejo de listas ligadas. Adems, si las listas crecen
demasiado se perder la facilidad de acceso directo del mtodo hash.
GRAFOS
Un grafo en el mbito de las ciencias de la computacin es una estructura de datos, en
concreto un tipo abstracto de datos (TAD), que consiste en un conjunto de nodos (tambin
llamados vrtices) y un conjunto de arcos (aristas) que establecen relaciones entre los
nodos. El concepto de grafo TAD desciende directamente del concepto matemtico de grafo.
25
Informalmente se define como G = (V, E), siendo los elementos de V los vrtices, y los
elementos de E, las aristas (edges en ingls). Formalmente, un grafo, G, se define como un
par ordenado, G = (V, E), donde V es un conjunto finito y E es un conjunto que consta de dos
elementos de V.
TERMINOLOGA DE GRAFOS
Los grafos se pueden clasificar en dos grupos: dirigidos y no dirigidos. En un grafo no dirigido
el par de vrtices que representa un arco no est ordenado. Por lo tanto, los pares (v1, v2) y
(v2, v1) representan el mismo arco. En un grafo dirigido cada arco est representado por un
par ordenado de vrtices, de forma que y representan dos arcos diferentes.
Ejemplos
G1 = (V1, A1)
V1 = {1, 2, 3, 4} A1 = {(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)}
G2 = (V2, A2)
V2 = {1, 2, 3, 4, 5, 6} A2 = {(1, 2), (1, 3), (2, 4), (2, 5), (3, 6)}
G3 = (V3, A3)
V3 = {1, 2, 3} A3 = { <1, 2>, <2, 1>, <2, 3> }
Grficamente estas tres estructuras de vrtices y arcos se pueden representar de la
siguiente manera:
Para ver el grfico seleccione la opcin "Descargar" del men superior
Algunos de los principales tipos de grafos son los que se muestran a continuacin:
Grafo regular: Aquel con el mismo grado en todos los vrtices. Si ese grado es k lo
llamaremos k-regular.
Por ejemplo, el primero de los siguientes grafos es 3-regular, el segundo es 2-regular y el
tercero no es regular
Grafo bipartito: Es aquel con cuyos vrtices pueden formarse dos conjuntos disjuntos de
modo que no haya adyacencias entre vrtices pertenecientes al mismo conjunto
Ejemplo.- de los dos grafos siguientes el primero es bipartito y el segundo no lo es
Grafo completo: Aquel con una arista entre cada par de vrtices. Un grafo completo con n
vrtices se denota Kn.
A continuacin pueden verse los dibujos de K3, K4, K5 y K6
Un grafo bipartito regular: se denota Km,n donde m, n es el grado de cada conjunto disjunto
de vrtices.
26
Grafo nulo: Se dice que un grafo es nulo cuando los vrtices que lo componen no estn
conectados, esto es, que son vrtices aislados.
Grafos Isomorfos: Dos grafos son isomorfos cuando existe una correspondencia
biunvoca (uno a uno), entre sus vrtices de tal forma que dos de estos quedan unidos
por una arista en comn.
Grafos Platnicos: Son los Grafos formados por los vrtices y aristas de los cinco
slidos regulares (Slidos Platnicos), a saber, el tetraedro, el cubo, el octaedro, el
dodecaedro y el icosaedro.
27
En los grafos, como en todas las estructuras de datos, las dos operaciones bsicas son
insertar y borrar. En este caso, cada una de ellas se desdobla en dos, para insertar/eliminar
vrtices e insertar/eliminar aristas.
Insertar vrtice
La
operacin
de
vrtice
es
una
sencilla, nicamente
una nueva entrada en
(estructura de datos
vrtices)
para
el
de ese momento el
vrtice
ms,
ya que ninguna arista
insercin de un nuevo
operacin
muy
consiste en aadir
la tabla de vrtices
que
almacena
los
nuevo nodo. A partir
grafo
tendr
un
inicialmente aislado,
llegar a l.
Insertar arista
Esta
operacin
es
Cuando se inserte
grafo,
habr
que
a la lista de adyacencia (lista que almacena los nodos a los que un
mediante una arista) del nodo origen, as si se aade la arista (A,C),
lista de adyacencia de A el vrtice C como nuevo destino.
Eliminar vrtice
Esta operacin es inversa a la insercin de vrtice. En este caso el procedimiento a realizar
es la eliminacin de la tabla de vrtices del vrtice en s. A continuacin habr que eliminar
las aristas que tuviesen al vrtice borrado como origen o destino.
Eliminar arista
Mediante esta operacin se borra un arco del grafo. Para llevar a cabo esta accin es
necesario eliminar de la lista de adyacencia del nodo origen el nodo correspondiente al nodo
destino.
Otras operaciones:
Las operaciones adicionales que puede incluir un grafo son muy variadas. Adems de las
clsicas de bsqueda de un elemento o recorrido del grafo, tambin podemos encontrarnos
con ejecucin de algoritmos que busquen caminos ms cortos entre dos vrtices, o
recorridos del grafo que ejecuten alguna operacin sobre todos los vrtices visitados, por
citar algunas operaciones de las ms usuales.
28
29
CONCLUSIN
LO MS RELEVANTE:
Un rbol es una estructura no lineal en la que cada nodo puede apuntar a uno o varios
nodos.
Tambin se suele dar una definicin recursiva: un rbol es una estructura en compuesta por
un dato y varios rboles.
Esto son definiciones simples. Pero las caractersticas que implican no lo son tanto.
Y un grafo es una terna G = (V,A,j ), en donde V y A son conjuntos finitos, y j es una
aplicacin que hace corresponder a cada elemento de A un par de elementos de V. Los
elementos de V y de A se llaman, respectivamente, "vrtices" y "aristas" de G, y j asocia
entonces a cada arista con sus dos vrtices.
30
BIBLIOGRAFA
Estructuras de Datos y Algoritmos con patrones de diseo orientadas a objetos en Java.
Bruno R. Preiss, B.A.Sc., M.A.Sc. Ph.D., P. Eng. Departamento de Ingeniera Elctrica y
Computacin. Universidad de Waterloo, Waterloo, Canad.
31