Anda di halaman 1dari 32

UNIDAD V:

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.

- 0Conceptos relacionados con los rboles

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:
-

un campo INFORMACION de datos de un cierto tipo.

un puntero al nodo del subrbol izquierdo (que puede ser nulo).

un puntero al nodo del subrbol derecho (que puede ser nulo).

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.

Visitar el nodo raz

2.

Recorrer el subrbol izquierdo

3.

Recorrer el subrbol derecho

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.

Recorrer el subrbol izquierdo en pre-orden

3.

Recorrer el subrbol derecho en pre-orden

RECORRIDO IN-ORDEN
1.

Recorrer el subrbol izquierdo en in-orden

2.

Visitar el raz
5

3.

Recorrer el subrbol derecho en in-orden

RECORRIDO POST-ORDEN
1.

Recorrer el subrbol izquierdo en post-orden

2.

Recorrer el subrbol derecho en post-orden

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

RBOL BINARIO DE BSQUEDA


Ya hemos hecho notar que una de las aplicaciones que se dan ms frecuentemente en
informtica, es la de manejar una coleccin de datos sobre los cuales se efectan de forma
constante operaciones de bsqueda insercin y borrado (pensemos por ejemplo en el trabajo
habitual de un servicio de reserva en una agencia de viajes). A lo largo de este captulo
hemos visto que cada una de estas tres operaciones elementales se resuelve de forma
distinta, segn la estructura elegida para organizar esta coleccin de datos sea un vector o
una lista enlazada. Sabemos que la insercin y el borrado se mejoran sensiblemente, si
elegimos una lista en vez de un vector, por el contrario, para la bsqueda parece claramente
preferible trabajar con un vector ordenado. Para superar esta situacin, vamos a describir
una variante del rbol binario con la que podemos localizar, insertar y borrar con mayor
eficacia. Ello nos dar una nueva posibilidad a la hora de programar, al poder seleccionar
nuevas estructuras, que nos permitan utilizar nuevos y mejores algoritmos.

Llamaremos rbol binario de bsqueda a un rbol binario construido de acuerdo con el


procedimiento siguiente:
1.

El primer elemento se utiliza para crear el nodo raz.

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.

Nodo raz del rbol: D.

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.

Se repiten los pasos hasta el ltimo elemento.

El rbol binario de bsqueda resultante sera:


8

Ntese que en caso


estuviese
ordenado (ascendente
el rbol de bsqueda
sera en realidad una

de que el vector
previamente
o descendentemente)
que
obtendramos
lista.

Una vez definida esta


nueva
estructura
tratemos de constatar su utilidad, cuando nos enfrentamos a esta hipottica aplicacin, en la
que las tres operaciones de bsqueda, insercin y borrado son muy frecuentes. Por motivos
de espacio, no vamos a bajar hasta la especificacin completa de los algoritmos
correspondientes a cada una de estas tres operaciones, slo presentaremos un esbozo del
diseo correspondiente.

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.

La terminacin del procedimiento se producir cuando:


-

se encuentra la clave

no se encuentra la clave; y se llega a encontrar un subrbol vaco.

As por ejemplo, si buscamos W en el rbol de la figura 5.17, se visitarn los nodos P,


S, W. Si, en el mismo rbol, buscamos X, se visitarn los nodos P, S, W, Z, Y
y se alcanza un subrbol vaco bajo la Y sin encontrar 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:
-

si el elemento es una hoja, se suprime simplemente;

si el elemento no tiene ms que un descendiente, se sustituye entonces por ese


descendiente (ver Figura 5.19);
si el elemento tiene dos descendientes, la situacin es un poco ms complicada ya que
la simple sustitucin de un nodo por uno de sus hijos conllevara la prdida de estructura de
rbol binario. En este caso el nodo a eliminar se debe sustituir por un descendiente ms a la
derecha o a la izquierda, de modo que siga conservando la ordenacin.

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;

La direccin relativa a su ascendencia, es decir si el nodo a eliminar es un hijo derecho


o izquierdo.
11

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

Donde K indica el nmero de nodos del rbol y h la altura.


Algunos estudios demuestran que la altura de un rbol balanceado de n nodos nunca
exceder de 1.44*log n.
Al insertar un elemento en un rbol balanceado deben distinguirse los siguientes casos:
1. Las ramas izquierdas (RI) y derecha (RD) del rbol tienen la misma altura (HRI = HRD), por
lo tanto: 2|.1. Si se inserta un elemento en RI entonces HRI ser mayor a HRD.
2|.2. Si se inserta un elemento en RD entonces HRD ser mayor a HRI.
Obsrvese que en cualquiera de los dos casos mencionados (1.1 y 1.2), no se viola el criterio
de equilibrio del rbol.
1. Las ramas izquierda (RI) y derecha (RD) del rbol tienen altura diferente (HRI HRD):
2|.1. Supngase que HRI < HRD:
2.1.1.Si se inserta un elemento en RI entonces HRI ser igual a HRD.
2.1.2 .{Las ramas tienen ala misma altura, por lo que se mejora el equilibrio del rbol}
2.1.3.Si se inserta un elemento en RD entonces se rompe el criterio de equilibrio del rbol y
es necesario restructurarlo.
2|.1. Supngase que HRI > HRD:
2.1.1.Si se inserta un elemento en RI, entonces se rompe el criterio de equilibrio del rbol y
es necesario restructurarlo.
2.1.2.Si se inserta un elemento en RD, entonces HRD ser igual a HRI.
2.1.3 .{Las ramas tienen la misma altura, por lo que se mejora el equilibrio del rbol}

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.

A continuacin se presenta la definicin de un rbol balanceado en lenguaje C.

struct NodoArbol {
13

int dato;
int FE;
struct NodoArbol *aptIzq, *aptDer;
};

RESTRUCTURACIN DEL RBOL BALANCEADO

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.

Mtodos de Ordenacin Interna.


Es la clasificacin u ordenacin de datos que se encuentran en la memoria principal de la
computadora.
Se asume que los datos estn almacenados en una estructura de datos de libre acceso,
como puede ser un vector o un arreglo.

Ordenacin por burbuja.


Tambin conocido como de intercambio directo. Se basa en comparar elementos adyacentes
de la lista de datos e intercambiar sus valores si estn desordenados. Se dice que los valores
14

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.

Mtodo de la Sacudida (shaker sort)


Este mtodo es una optimizacin del mtodo de intercambio directo o burbuja. La idea
bsica de este algoritmo consiste en mezclar las dos formas en que se puede realizar el
mtodo de la burbuja.
En este algoritmo cada pasada tiene dos etapas. En la primera etapa de derecha a
izquierda se trasladan los elementos ms pequeos hacia la parte izquierda del arreglo,
almacenando en una variable la posicin del ltimo elemento intercambiado.
En la segunda etapa de izquierda a derecha se trasladan los elementos ms grandes hacia
la parte derecha del arreglo, almacenando en otra variable la posicin del ltimo elemento
intercambiado.
Las sucesivas pasadas trabajan con los componentes del arreglo comprendidos entre las
posiciones almacenadas en las variables. El algoritmo termina cuando en una etapa no se
producen intercambios o bien, cuando el valor del ndice que almacena el extremo izquierdo
del arreglo es mayor que el valor del ndice que almacena el extremo derecho.

Ordenacin por Insercin Directa


El mtodo de ordenacin por insercin directa es el que generalmente utilizan los jugadores
de cartas cuando ordenan stas, de ah que tambin se conozca con el nombre de mtodo
de la baraja.

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.

Se repite el proceso hasta que, en el ltimo paso se clasifica el grupo de n elementos.

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.

Se toma un elemento X de una posicin cualquiera del arreglo.

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

quickSort( arr[], izq, der)


{
tipoDato x, aux

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.

Es evidente que la bsqueda se puede realizar tanto en vectores ordenados como en


vectores desordenados, utilizando diferentes algoritmos de bsqueda.

BSQUEDA EN UN VECTOR DESORDENADO. BSQUEDA SECUENCIAL.

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:

BSQUEDA EN UN VECTOR ORDENADO. BSQUEDA SECUENCIAL.

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:

BSQUEDA EN UN VECTOR ORDENADO. BSQUEDA BINARIA DICOTMICA.


La bsqueda secuencial NO es el mejor mtodo de bsqueda si el arreglo tiene una gran
nmero de elementos, ya que puede resultar muy lento. Es ms rpido y, por lo tanto, ms
eficaz, la bsqueda binaria, tambin llamada dicotmica. Este mtodo es el que
habitualmente utilizamos los humanos para localizar un determinado concepto en una lista
ordenada, por ejemplo, un directorio telefnico o un diccionario.
Este mtodo consiste en lo siguiente:
1. Se compara el valor a localizar con el del elemento central del arreglo:

Si coinciden, se ha encontrado y, por lo tanto, se ha terminado la bsqueda.

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 con xito (se encontr el elemento).

Se termine sin xito (no se pudo encontrar el elemento por no existir en el arreglo).

Se considerar que el valor buscado no existe en el arreglo cuando POS_INI y POS_FIN


coincidan y su contenido sea diferente de dicho valor.
En otras palabras, se puede decir que la bsqueda binaria de un determinado valor consiste
en ir eliminando las mitades donde se tiene la certeza de que dicho valor no se encuentra.

Bsqueda por transformacin de claves (Hash)


Este mtodo, llamado por transformacin de claves, permite aumentar la velocidad de
bsqueda sin necesidad de tener los elementos ordenados. Cuenta tambin con la ventaja
de que el tiempo de bsqueda es prcticamente independiente del nmero de componentes
del arreglo.
Este mtodo trabaja basndose en una funcin de transformacin o funcin hash (h) que
convierte una clave dada en una direccin (ndice) dentro del arreglo.
direccin H(clave)
La funcin hash es aplicada a la clave da un ndice del arreglo, lo que permite
accesar directamente sus elementos.
Siempre debe equilibrarse el costo por espacio de memoria con el costo por tiempo de
bsqueda.

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

H(K2) = (9359 mod 100) + 1 = 60


Como H(K1) = H(K2) y K1 K2, se est ante una colisin.
Se aplica ahora la frmula con N igual a un valor primo en vez de utilizar N = 100. H(K1) =
(7259 mod 97) + 1 = 82
H(K2) = (9359 mod 97) + 1 = 48
Con N = 97 se ha eliminado la colisin.

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:

H(K) = elegirdgitos (d1, d2, , dn.) + 1

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.

Si la clave fuera ADA, su equivalente numrico sera 010401. Si hubiera combinacin de


letras y nmeros, se procedera de la misma manera. Por ejemplo, para la clave Z4F21, su
equivalente numrico sera 2740621.

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

Existen varios mtodos que trabajan bajo el principio de comparacin y reasignacin de


elementos. Se analizarn tres de ellos:

Prueba lineal

Prueba cuadrtica

Doble direccin hash

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.

La principal desventaja de este mtodo es que puede haber un fuerte agrupamiento


alrededor de ciertas claves, mientras que otras zonas del arreglo permaneceran vacas. Si
las concentraciones de claves son muy frecuentes, la bsqueda ser principalmente
secuencial perdiendo as las ventajas del mtodo hash.

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.

a) Doble direccin hash

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

A continuacin ponemos los dibujos de K1,2, K3,3, y K2,5

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.

Grafos Eulerianos. Para definir un camino euleriano es importante definir un camino


euleriano primero. Un camino euleriano se define de la manera ms sencilla como un
camino que contiene todos los arcos del grafo. Teniendo esto definido podemos hablar
de los grafos eulerianos describindolos simplemente como aquel grafo que contiene
un camino euleriano. El primer grafo de ellos no contiene caminos eulerianos mientras
el segundo contiene al menos uno.

Grafos Conexos. Un grafo se puede definir como conexo si cualquier vrtice V


pertenece al conjunto de vrtices y es alcanzable por algn otro. Otra definicin que
dejara esto ms claro sera: "un grafo conexo es un grafo no dirigido de modo que
para cualquier par de nodos existe al menos un camino que los une".

OPERACIONES SOBRE GRAFOS


Operaciones bsicas de los grafos

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.

tambin muy sencilla.


una nueva arista en el
aadir un nuevo nodo
vrtice puede acceder
se deber incluir en la

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

Anda mungkin juga menyukai