Está en la página 1de 31

Ricardo Gonzlez Tercero

1
Estructuras II
Bsquedas
Al trabajar en el mundo informtico las 2 principales operaciones de comunicacin
con sistemas de E/S (Entrada/Salida) son leer o escribir en algn medio fsico o
lgico. Es comn que el nmero de operaciones de lectura es muy superior al de
escritura y dentro de las operaciones de lectura una de las ms utilizadas es la
bsqueda. Por lo tanto conocer cmo realizar correctamente las bsquedas y de
qu manera implementarlas es bsico dentro de las carreras de Sistemas.
Respecto del medio en donde se trabaje los algoritmos de bsqueda se dividen en
dos:
Internos para trabajar en medios lgicos
Externos para trabajar en medios fsicos
Si bien la implementacin es un tanto diferente, al final la idea sigue siendo la
misma.
Sin importar si se trata de bsqueda interna o externa, todo algoritmo de bsqueda
debe responder la siguiente pregunta:
Existe el elemento buscado en el medio de bsqueda?
Dependiendo de las necesidades propias de la bsqueda existen otras preguntas
que tambin pueden ser respondidas.
SI existe, En qu posicin se encuentra?
Si existe, Cuntas veces aparece?
Si existe, Cuntas veces y en que posiciones aparece?
Si no existe, Cul es el ms cercano a l?
Normalmente estos algoritmos no involucran la variable tiempo, pero es posible
hacer bsquedas en presente en repositorios de otros tiempos. Si el tiempo es
factor importante, entonces debe estar presente en el medio de bsqueda.
Por el tipo de algoritmo de bsqueda, la bsqueda se clasifican en:
Bsqueda secuencial
Bsqueda binaria o dicotmica
Busqueda ind
Bsqueda indizada o por interpolacin
Ricardo Gonzlez Tercero

2
Bsqueda Secuencial
Este mtodo de bsqueda consiste en analizar cada uno de los elementos de
repositorio de bsqueda y en caso de encontrar el elemento buscado indicarlo,
terminado con la bsqueda. Si no continuar en el repositorio hasta analizar todos
los elementos de este ltimo.
Usando este mtodo y contrastando con las preguntas indicadas en el apartado
anterior, entre otros se pueden implementar los siguientes algoritmos sobre un
arreglo.
Buscar un elemento en un arreglo
Buscar el nmero de apariciones de un elemento en un arreglo
Buscar un elemento en un arreglo suponiendo que el arreglo inicialmente
esta ordenado.
Buscar un elemento en un arreglo y en caso de no existir, conocer el
inmediato inferior al buscado
Buscar todas las posiciones de un elemento en un arreglo
Buscar la primera aparicin de varios elementos en un arreglo.
Buscar todas las ocurrencias de varios elementos en un arreglo (jagged)
Bsqueda Binaria o Dicotmica(Dicotmico (dividir) )
Este algoritmo se basa en la idea de divide y vencers, es mucho mas veloz que
el mtodos de bsqueda secuencial, pero para poder aplicarlo se requiere que los
datos estn previamente ordenados en el repositorio de bsqueda.
La idea del algoritmo es dividir secuencialmente el arreglo en porciones ms
pequeas hasta encontrar el elemento buscado o hasta determinar que no existe.
El algoritmo es el siguiente:
1. Se divide el arreglo inicial, extrayendo su elemento central y dejando 2 sub-
arreglos: el que contiene los elementos inferiores al central y el que
contiene los superiores al central
2. Se compara el elemento central con el elemento buscado
3. Si el central es igual al buscado, la bsqueda termina y el elemento ha sido
encontrado
4. Si el elemento buscado es inferior al central entonces el buscado, si existe
debe estar en el primer sub-arreglo.
5. Si el elemento buscado es superior al central entonces el buscado, si existe
debe estar en el segundo sub-arreglo.
6. Con el arreglo resultado del paso 4 o 5, segn corresponda se vuelve a
aplicar el proceso desde el paso 1. Si en algn momento el resultado del
Ricardo Gonzlez Tercero

3
paso 4 o 5 en un arreglo vaco, significa que el elemento buscado no
existe, en cuyo caso termina el algoritmo
Bsqueda Indizada o Por Interpolacin
La meta de este producto es la misma, determinar si existe un elemento en un
repositorio de bsqueda y si existe responder otras preguntas vinculadas. Se
diferencia de la secuencial en que la velocidad de bsqueda aumente
notablemente y de la binaria en que no requiere de que el repositorio inicie con los
datos ordenados.
Para lograr su objetivo la bsqueda indizada asigna un ndice o clave el cual se
encargar de ayudar a almacenar la informacin de mejor manera en repositorio,
normalmente esto se hace a travs de una estructura de datos llama Tabla Hash.
Una tabla Hash no es ms que una matriz con 2 columnas y n filas. La primera
columna representa el ndice y la segunda el elemento que se desea guardar.
Ejemplo:
Tabla Hash
Calves Valor
10 55
30 97
44 44
20 17

Los ndices no tienen por qu seguir ningn orden en particular, pero si deberan
ser obtenidos a travs de algn tipo de algoritmo. Tampoco deben ser
secuenciales o en incremento o de crementos constantes o no constantes. Pero
para que la tabla hash sea adecuada si es importante que los ndices no se
repitan.
Si se utilizan arreglos para el almacenamiento de datos, la tabla Hash puede
simplificarse ya que cada elemento del arreglo tiene asociada una posicin y esta
posicin puede ser considerada la clase. Se puede utilizar cualquier operacin
matemtica que transforme el elemento en una clave (interpolacin) y debera
haber la operacin inversa, es decir obtener el elemento a partir de la clave.
A esta operacin matemtica se la llama funcin Hash. Y encontrar una funcin
Hash adecuada puede ser una tarea muy difcil dado que los valores a
almacenarse pueden ser muy dispersos en inclusive puede que no se sepa qu
valores se van a almacenar.
Ricardo Gonzlez Tercero

4
La funcin Hash ms simple puede ser la identidad, es decir al elemento 1 se lo
guarda en la posicin 1, al elemento 2, en la posicin al 3, en la 3, etc. Si por
ejemplo se desean almacenar los nmeros de cdulas, esta funcin Hash
desperdiciaran ingentes cantidades posiciones en el arreglo que nunca se usarn.
La funcin Hash ideal es aquella que devuelve claves a partir de la 0 y asigna
nuevas clases secuenciales de 1 en 1 para cada elemento que se desea
almacenar. Una funcin Hash ideal debe ser biyectiva, es decir inyectiva y
sobreyectiva o de otras palabras cada elemento del conjunto de salida debe tener
un correspondiente diferente en el conjunto de llegada y cada elemento del
conjunto de llegada debe tener un correspondiente diferente en el conjunto de
salida, a ms de esto la funcin Hash ideal debe ser lo suficientemente flexible
para almacenar cualquier nuevo valor posible que se pueda presentar en el
sistema. Por eso llegar a la funciona Hash ideal, es poco probable, y en su lugar
se usan algunas funciones preestablecidas en el mundo informtico que mas se
adecuen al problema plantado.
Algunas de estas funciones son:
Restas sucesivas:
Este mtodo se utiliza cuando se conoce los huecos o espacios existentes entre
los datos a almacenar. Si estos espacios son conocidos, son constantes o al
menos siguen algn patrn determinado, entonces aplicando este mtodo si se
puede llegar a obtener una funcin Hash ideal. Para encontrar la funcin por
medio de restas sucesivas, lo que se hace es analizar la disposicin de los datos y
tratar de conseguir una frmula que modele el comportamiento de esa disposicin.
Ejemplo: Se desea almacenar valores cuyo incremento se sabe ira de 10 en 10 a
partir del nmero 50.
Valor Claves
50 0
60 1
70 2
80 3
130 8

Clave = (valor-50)/10
Valor = Clave*10 +50
Ejemplo 2: Una entidad acadmica que inicio labores en 1998 necesita generar
claves para almacenar nmeros de expedientes de alumnos matriculados. El
Ricardo Gonzlez Tercero

5
nmero de expediente es un valor que se forma juntando el ao de matriculacin
con una cantidad de 3 dgitos secuenciales que indican la posicin en la que se
matriculo el alumno. Se tiene por consigna que solo se aceptan 400 alumnos cada
ao.
Valor Claves
1998000 0
1998001 1
1998002 2
---
1998399 399
1999000 400
1999001 401
1999002 402
---
1999399 799
2000000 800

Si el ao de matriculacin se nota por yyyy y el secuencial de 0 a 399 por nnn
entonces la frmula quedara
Clave = (yyyynnn-yyyy000)+400(yyyy-1998)
Valor Clave yyyy nnn formula()
1998000 0
1998001 1
1998002 2
1998003 3

Implemente un programa que permita almacenar y recuperar expedientes de
alumnos suponiendo que como mximos se almacenar 1000000 de expediente
Aritmtica Modular
A travs de este mtodo se obtienen claves por la divisin del nmero que se
desea almacenar entre un numero N prefijado, el cual se sugiere sea primo. A
continuacin se obtiene el residuo y ese valor constituya la clave.
Ricardo Gonzlez Tercero

6
Las claves sern nmeros entre 0 y N-1(inclusive). Para no tener claves repetidas,
N debe ser al menos una unidad mayor al mayor de los nmeros que se desean
almacenar. Caso contrario 1 o ms nmeros tendrn la misma clave (esto se
demuestra a travs del teorema del palomar).
Ejemplo:
Si N=13 13
254897 6
579864 13
135899 10
123456 8
254899 8
Con el mtodo anterior, si el mximo nmero a almacenar es mayor a N, habr por
lo menos 1 nmero con 2 o ms claves iguales(como en el ejemplo la clave 8).
Este fenmeno se lo llama colisin. Se vern cmo tratar las colisiones al finalizar
el estudio de las funciones hash
Mitad del Cuadrado
Consiste en elevar el valor a almacenarse al cuadrado y toma algunas cifras
centrales como la clave. Como este mtodo tambin se produce colisiones
Ejemplo:
Se desean claves para almacenar valores en un arreglo de 100 posiciones.
456 ^ 2 = 207936 79
105 ^ 2 = 011025 10
619 ^ 2 = 383161 31
879 ^ 2 = 772641 26
709 ^ 2 = 502681 26

Truncamiento
Consiste en ignorar algunas cifras del valor que se quiere almacenar y tomar las
restantes como la clave. Tambin produce colisiones.
Ejemplo:
Se desea almacenar valores de 7 cifras de un arreglo de 1000 posiciones, puede
truncar la clave tomando la 2da, 4ta y 6ta cifra.
Ricardo Gonzlez Tercero

7
9700961 ==> 706
3498610 ==> 481
0056241 ==> 064
9134720 ==> 142
5174829 ==> 142

Plegamiento
Consiste en dividir el valor que se quiere almacenar en secciones y opera con
esas secciones. Normalmente se usa la suma o la multiplicacin como la
operacin que se utiliza.
Ejemplo:
Se desea almacenar valores de 7 cifras de un arreglo de 1000 posiciones, se
puede plegar el valor n 2,2 y 3 cifras y a continuacin sumar esas cifras. Si el
resultado es un valor con ms de 3 cifras se podra truncar a las 3 ltimas cifras de
la suma. Ntese que aqu se estn usando 2 mtodos en realidad.
9700961 ==> 97 + 00 + 961 ==> 1058 ==> 058
3498610 ==> 34 + 98 + 610 ==> 742
9134720 ==> 91 + 34 + 720 ==> 845
1105829 ==> 11 + 05 + 829 ==> 845

Tratamiento de colisiones
Mtodo 1:
Se deja una parte al final del arreglo para almacenar las colisiones. Esta seccin
no debera ser superior al 30%.
Cuando existan colisiones el elemento colisionado va a parar a la siguiente
posicin libre, secuencial en la zona de colisiones.
Mtodo 2:
Cuando exista una colisin, el elemento colisionado se almacena en la siguiente
posicin libre secuencial del arreglo.


Ricardo Gonzlez Tercero

8
Mtodo 3:
En lugar de usar un arreglo para almacenar datos, se usa una lista enlazada de 2
dimensiones. En las filas se colocan las claves y en las columnas se colocan los
elementos colisionados, sabiendo que la primera columna corresponde a la clave.
Almacenar
81 2
46 5
12 0
18 5
13 4
19 4
27 5


Bsqueda
88 7
49 2
16 12

2


5


0


14



Mtodos de Ordenamiento
Insercin directa
Inserta el elemento en lugar que le corresponde
1. Se recorre el arreglo desde la penltima posicin hacia la 1
ra
posicin
verificando elementos
2. Para cada elemento del punto 1, se lo vuelve a recorrer hacia el final del
arreglo buscando la posicin que le corresponde. Se verifica que el
elemento sea inferior o igual al siguiente y que no se salga de los limites
del arreglo
Ricardo Gonzlez Tercero

9
3. Vuelve al paso 1 con el siguiente elemento
Ejemplo:
6 3 4 2 8 7 1
6 3 4 2 8 1 7
6 3 4 2 1 8 7
6 3 4 2 1 7 8
6 3 4 1 2 7 8
6 3 1 4 2 7 8
6 3 1 2 4 7 8
6 1 3 2 4 7 8
6 1 2 3 4 7 8
1 6 2 3 4 7 8
1 2 6 3 4 7 8
1 2 3 6 4 7 8
1 2 3 4 6 7 8
Seleccin directa
En cada iter se selecciona el elemento que deber moverse
Algoritmo:
1. Se toma todo el arreglo de inicio a fin y se selecciona el mayor elemento
2. El elemento resultante del paso 1 se intercambia con el ltimo elemento de
la seccin tomada en el paso 1 del arreglo
3. Se disminuye en 1, por el final la seccin tomada en el paso 1 y se repiten
los pasos 1 y 2
4. El algoritmo termina cuando la seccin del paso 1 es de tamao 2 y se han
ejecutado los pasos 2 y 3
Ejemplo
3 5 4 2 8 1 7 6
3 5 4 2 6 1 7 8
3 5 4 2 6 1 7 8
3 5 4 2 1 6 7 8
3 1 4 2 5 6 7 8
3 1 2 4 5 6 7 8
2 1 3 4 5 6 7 8
Ricardo Gonzlez Tercero

10
1 2 3 4 5 6 7 8
Insercin Binaria
Es igual al mtodo de insercin directa, excepto que al buscar la posicin que le
corresponde al elemento que se est analizando, se usa bsqueda binaria en
lugar de bsqueda secuencial. Esto es posible gracias a que la seccin donde se
insertara el elemento ya est ordenada
Ejemplo
3 5 4 2 8 1 7 6
3 5 4 2 7 1 6 7
3 5 4 2 8 1 6 7
3 5 4 2 1 6 7 8
3 5 4 1 2 6 7 8
3 5 1 2 4 6 7 8
3 1 2 4 5 6 7 8
1 2 3 4 5 6 7 8
Stupid Sort
1. Se recorre el arreglo de inicio a fin verificando parejas de elementos
seguidos
2. Si se encuentra una pareja en desorden se intercambian los valores y se
vuelve al paso 1
3. El algoritmo termina cuando se logra hacer un recorrido completo sin que
se produzca intercambios
Ejemplo
6 4 2 1 5
4 6 2 1 5
4 2 6 1 5
2 4 6 1 5
2 4 1 6 5
2 1 4 6 5
Ricardo Gonzlez Tercero

11
1 2 4 6 5
1 2 4 5 6
Mtodo de la burbuja
Algoritmo:
Se compara cada elemento con todos los dems y si estn en desorden, se los
intercambia.
public int [] Burbuja (int [] arr)
{
Int i, j, aux;
for( i=0; i<arr.Length; i++)
{
If (arr [i] > arr[j])
{
aux = arr[i];
arr[i]= arr[j];
arr[j]= aux;
}
}
return arr;
}
Ejemplo:
5 i 3 j 2 6 4
3 5 2 i 6 4
2 5 3 6 j 4
2 5 3 6 4 j
2 5 i 3 j 6 4
2 3 5 6 j 4
2 3 5 6 4 j
2 3 5 i 6 j 4
2 3 5 6 4 j
2 3 4 6 i 5 j
2 3 4 5 6





Ricardo Gonzlez Tercero

12
Ejemplo:
5 3 2 6 4
5 3 2 6 4
3 5 2 6 4
3 2 5 6 4
3 2 4 6 5
3 2 4 6 5
2 3 4 6 5
//dos no se mueve
2 3 4 6 5
2 3 4 5 6
//cuatro no se mueve

Shaker-Sort /Sacudida/Burbuja bidireccional
Algoritmo:
1. Se define a como la 1
ra
posicin del arreglo y b como la ltima posicin
2. Se recorre de a hacia b ordenando igual que en el stupid-sort, pero sin
volver a la posicin a
3. Se recorre de b hacia a igual que en el paso 3
4. a aumenta 1 posicin y b disminuye 1 posicin
5. Se repite los paso 2,3,4 hasta que a yb estn en la misma posicin
(#impar de elementos)o hasta que a diste 1 unidad de b (# par de
elementos)
a5 3 2 6 4 1b
3 5 2 6 4 1
3 2 5 6 4 1
3 2 5 6 4 1
3 2 5 4 6 1
3 2 5 4 1 6
3 2 5 4 1 6
3 2 5 1 4 6
3 2 1 5 4 6
3 1 2 5 4 6
1 3a 2 5 4b 6
1 3 2 5 4 6
1 2 3 5 4 6
1 2 3 5 4 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3a 4b 5 6
Ricardo Gonzlez Tercero

13
Tournament-Sort
Se imagina que los datos a ordenarse estn en una competencia y se los maneja
como tal
Algoritmo:
1. Cada elemento del arreglo compite con su pareja siguiente
2. El ganador del paso 1 va a la siguiente ronda que ser la misma
competencia entre los ganadores de la ronda anterior. Si m algn momento
en elemento no tiene con quien competir, pasa directamente a la siguiente
ronda
3. El elemento ganador de todas las rondas, sale de la competencia y va al
arreglo con datos ordenados
4. El algoritmo termina cuanto todos los elementos han ganado una vez el
torneo

3 5 8 4 2 9 7

3 5 8 4 2 9 7
3 4 2 7
3 2
2

3 5 8 4 9 7
3 4 7
3 7
3

5 8 4 9 7
5 4 7
4 7
4

5 8 9 7
5 9
5

8 9 7
8 7
7

Ricardo Gonzlez Tercero

14
8 9
8

9

Ganadores del torneo
2 3 4 5 7 8 9


Ricardo Gonzlez Tercero

15
Merge-Sort (Fusin)
Se intenta encontrar 2 arreglos ordenados para fusionarlos en uno solo









3,5,8,4,2,9,7,1,6
3,5,8,4,2
3,5,8
3,5
3
5
8 8
4,2 4,2
4
2
9,7,1,6
9,7 9,7
9
7
1,6 1,6
1
6
1,2,3,4,5,6,7,8,9
2,3,4,5,8
3,5,8
3,5
8
2,4
2,4
1,6,7,9 1,6,7,9
7,9
1,6
Ricardo Gonzlez Tercero

16
merge(A[x...y])
{
if((x/y)>0)
{
A1=merge(A[x...(x/y)/2])
A2=merge(A[((x+y)/2)+1...y])
return Fusin(A1,A2)
}
else
return A;
}
Quick sort
Algoritmo
1. Se toma como pivote el primer elemento del arreglo que no ha sido pivote
previamente.
2. Se reorganiza el arreglo colocando los elementos inferiores al pivote al
inicio del arreglo, pero respetando aquellos elementos que han sido pivotes
previamente.
3. Se inserta el pivote en la siguiente posicin libre del arreglo.
4. Los elementos iguales o superiores al pivote son copiados a continuacin,
del mismo modo, respetando aquellos que ya fueron pivotes previamente.
5. Se repite desde el paso 1 hasta que todos los elementos (excepto 1) hayan
sido pivotes.f


3 5 8 4 2 9 1

2 1 3 5 8 4 9

1 2 3 5 8 4 9

1 2 3 5 8 4 9

1 2 3 4 5 8 9

1 2 3 4 5 8 9

1 2 3 4 5 8 9

Radix-sort
Este mtodo se utiliza cuando hay grandes cantidades de elementos a ordenar.
Para poder aplicarlo se debe tener cantidades con igual nmero de dgitos
Ricardo Gonzlez Tercero

17
significativos, sin decimales. Si existen cifras con diferente nmero de dgitos a la
izquierda se puede rellenar con ceros.
Algoritmo
1. Se ordena de 0 a 9 pos la cifra de las unidades
2. Se ordena de 0 a 9 por la cifra de las decenas
3.
4. El algoritmo termina cuando se han ordenado rodas las cifras(sgitos
significativos)


3562
8211
7640
0922
0077
6241
3561
0024


7640
8211
6241
3561
3562
0922
0024
0077


8211
0922
0024
7640
6241
3562
0077


0024
Ricardo Gonzlez Tercero

18
0077
8211
6241
3561
3562
7640
0922


0024
0077
0922
3561
3562
6241
7640
8211

Heap-Sort
Es un mtodo de ordenamiento basado en un heap(monticulo).
Heap
Es una estructura tipo rbol binario que cumple 2 condiciones importantes:
1. Es un rbol semi-completo que se llena de izquierda a derecha
2. Cada nodo hijo es operacin matemtica(normalmente mximo o mnimo)
respecto de su nodo padre
Un heap tiene 3 operaciones importantes que son usadas en el mtodo de heap-
sort
Insert(). -Inserta un elemento en la posicin que le corresponde respecto
de un heap y a continuacin se realiza un Empujar() desde abajo hacia
arriba por la rama donde se insert el elemento
Empujar() (Shift, Reorganizar).- Se recorre el rbol de arriba hacia abajo o
de abajo hacia arriba por una rama verificando que se cumpla la segunda
condicin de heap, de no ser ese el caso, se intercambia nodos y se
contina el recorrido
Suprime().- Siempre se debe eliminar el nodo de la raz, a continuacin se
coloca el ltimo nodo del rbol como nueva raz y se realiza un Empujar()
de arriba hacia abajo
Ricardo Gonzlez Tercero

19
Heap-Sort(Algoritmo)
1. Se genera un heap, con los datos que se van a ordenar, mediante inserts
2. Se hace tantos suprimes como sea necesario, y cada elemento que sale
va al arreglo ordenado.
Frmulas de arboles
Hijo izquierda = padre*2
Hijo derecha=(padre*2)+1
Padre=parte entera (hijo/2)


rbol binario
1
ra
condicin cumplida
"
"
"
"
"
" "
"
"
"
" "
Ricardo Gonzlez Tercero

20
Completo
Semi-Completo



"
"
"
"
"
"
"
"
"
" "
"
"
Ricardo Gonzlez Tercero

21
Algoritmo:
MergeSort (a[xy])
{
Si((x/y)>0)
{
A1= MergeSort (a[x(x+y)/2])
A2=MegarSort( a[(x+y)/2+1y] )
Retornar Fusion(A1, A2)
}
Caso Contrario
retornar A
}

Proyecto final
Integrantes: Grupos de 2 o 3 personas
Puntaje: 7 puntos
1. Tomar 2 mtodos de ordenamiento secuenciales (excepciones: stupid sort,
burbuja) y obligatoriamente uno de los 2 debe ser: radix o shaker e
implementarlos usando listas definidas por el grupo
2. Tomar 2 mtodos de ordenamiento tipo rbol (excepto el ABO) e
implementarlos usando arboles definidos por el grupo
Fecha lmite de listados: 28 Marzo al medio da
www.cs.ubc.ca/-harrison/Java/sorting-demo.html
www.es.wkipedia.org/wiki/Algoritmo_de_ordenamiento


Ejercicio
Repetir el ejercicio hecho en el deber con el stupid-sort, pero con la burbuja
Adicionalmente en cada interacion debe indicar donde esta i y donde esta j








Ricardo Gonzlez Tercero

22
Arboles
Un rbol es una estructura de datos no lineal que establece una jerarqua entre
sus elementos.
Existen innumerables ejemplos del mundo real que pueden ser representadas
usando rboles, por ejemplo una operacin matemtica puede representarse
como rbol.
1. [(5+(4*{9-2}) + (8/3))] - (5+7)

2. { {[a-(b-c)]-[(d*e) +8]} (21 *7) } [12 +( )]

-
+
+
5 *
4 -
9 2
1
8
3
+
5 7
-
-
-
-
a -
b
c
+
*
d
e
8
*
21 7
+
12 /
3
4
Ricardo Gonzlez Tercero

23
3. { {(5#9) [(12*4) (716)]} (||3)} (69)

Por lo tanto los rboles se usan para representar taxonomas, jerarquas, ndices,
bases de datos, espacio de decisin en problemas, para construir compiladores,
etc.
Definiciones importantes
Nodo
Es un elemento del rbol, un rbol. Un rbol se puede considerar vaco si no
contiene nodos y si contiene un nico nodo tomado como raz y dado un
tratamiento especial.
Raz
Nodo especial del que parten todos los subrboles descendientes, no tiene ningn
antecesor.
Hoja
Nodo especial que no contiene subrboles
Subrbol
Cualquier conjunto de nodo conectado desde un nodo tomado como raz hasta
todas las hojas que lo conforme
En el dibujo:
El nodo A es la raz
Ls nodos B,C,D forman otro rbol, que e un subrbol del rbol A



a -
b
c
+
*
d
e
8
*
21 7

6 9
4
Ricardo Gonzlez Tercero

24
Los nodos F,G,H forman otro rbol cuya raz es F y a su vez un subrbol de
E
Los nodos C,D,G,H son hojas del rbol
Se dice que A es el padre de los nodos B y E, y a su vez B y E son hijos de A (B
es el hijo izquierdo, E es el hijo derecho.) Del mismo modo se dice que B y E son
hermanos.
En un rbol cada nodo solamente puede contener 1 padre o ninguno si es la raz
Grado de un nodo: nmero de subrboles que contiene
Grado de un rbol: mximo de los grados de sus nodos
rbol n-ario: rbol donde cada nodo es de mximo grado n.
Un nodo L es descendiente de un nodo M (y M es antecesor de L) si existe una
sucesin de hijos desde M hasta L. Para rboles binarios se habla de
descendientes y antecesores izquierdos y derechos segn corresponda.

Cada nodo de un rbol tiene asociado un numero conocido como nivel de la
siguiente manera:
El nodo raz tiene nivel 1
Al resto de nodos se les asigna un numero de nivel mas que el nivel de su
padre
A
Raiz Grado 2
B
2
C
Hoja 0
D
Hoja 0
E
1
F
2
G
Hoja 0
H
Hoja 0
Ricardo Gonzlez Tercero

25
Nivel 1
Profundidad (altura)
Es el mximo nivel asignado de entre todos los nivele de un rbol.

rbol Completo
Se dice que un rbol est completo, cuando en su profundidad existen todos los
nodos hojas posibles
Arbol semi-Completo
Un rbol es semi-Completo cuando los nodos hoja existen solamente en el ultimo
o en el penltimo nivel

Ejercicio: Con que frmula se puede calcular el mximo de nodos hojas se un
rbol binario cuya altura es conocida. Con que frmula en caso de que sea un
rbol n-ario.
2
n-1
En ambos casos se considera n como el mximo nivel, y en el caso de rboles n-
arios, se llama k el grado del rbol
K
n-1
A
Raiz 2
B
2
C
Hoja 0
D
Hoja 0
E
1
F
2
G
Hoja 0
H
Hoja 0
Nivel 2
Nivel 3
Nivel 4
Ricardo Gonzlez Tercero

26
Arbol balanceado o equilibrado
Un rbol est balanceado si para cada uno de sus nodos, las alturas de los
mismos difieren como mximo en 1. Un rbol est balanceado si en cada nodo el
factor de equilibrio es -1 0 o1.
Factor de equilibrio
El factor de equilibrio de un nodo se calcula restando la altura del sub-derecho
menos la altura del sub-rbol izquierdo

No est en equilibrio
Recorrido sobre un rbol Binario
En anchura
En profundidad
o Preorden
o Inorden
o Postorden
Recorrido en anchura
Se debe recorrer todos los nodos del nivel i antes de pasar a los nodos del nivel
i+1
En el ejemplo el recorrido sera:

A
1
B
0
C
0
D
0
E
2
F
0
G
0
H
0
Ricardo Gonzlez Tercero

27
Nivel 1

ABE CDF GH
Recorrer en profundidad
Para recorrer en profundidad, siempre se barre por las conexiones de los nodos
Preorden
Primero se visita la raz
Se recorre en preorden el sub-rbol izquierdo
Se recorre en preorden el sub-rbol derecho
A
Raiz 2
B
2
C
Hoja 0
D
Hoja 0
E
1
F
2
G
Hoja 0
H
Hoja 0
Nivel 2
Nivel 3
Nivel 4
Ricardo Gonzlez Tercero

28

A B C D E F G H
Inorden
Se recorre en inorden el sub-rbol izquierdo
Se visita la raz
Se recorre en inorden el sub-rbol derecho

A
Raiz 2
B
2
C
Hoja 0
D
Hoja 0
E
1
F
2
G
Hoja 0
H
Hoja 0
A
Raiz 2
B
2
C
Hoja 0
D
Hoja 0
E
1
F
2
G
Hoja 0
H
Hoja 0
Ricardo Gonzlez Tercero

29
C B D A E G F H
Para comprobar que est bien solo en arboles pequeos

Postorden
Se recorre en postorden el sub-rbol izquierdo
Se recorre en postorden el sub-rbol derecho
Se visita la raiz

A
B
C
D
E
F
G
H
A
B
C
D
E
F
G
H
Ricardo Gonzlez Tercero

30
C D B G H F E A

ARBOL BINARIO ORDENADO
Es un mtodo de ordenamiento basado en arboles binarios, cuyo recorrido inorden
presenta los datos ordenados:
Algoritmo:
1) El primer elemento que llega constituye la raz del rbol.
2) Los dems elementos se colocan recorriendo por una rama del rbol, en el
siguiente nivel libre de acuerdo al siguiente criterio
3) Si el nmero es menor o igual al nodo por el que se est recorriendo, el
valor va por la izquierda de ese nodo.
a. Si el nmero en mayor al nodo por el que se est recorriendo, el
valor va por la derecha de ese nodo.
b. Al insertar todos los valores como nodos del rbol, el recorrido
inorden dar los datos ordenados
TRANSFORMACIONES DE ARBOLES DE GRADO N EN GRADO 2 Y
VICEVERSA
Se identifica cual era el grado original del rbol de grado n, para ello se cuenta
cuantos hijos hay seguidos hacia la derecha en todas las ramas. El mayor valor
ser el grado original.
Se coloca la raz del rbol de grado n, la cual es la misma que la del rbol de
grado 2.
Cada hijo izquierda en el rbol binario representa un nuevo nivel en el rbol de
grado n.
Cada hijo derecho en el rbol binario representa un hermano de nivel encontrado
en el punto anterior en el rbol original de grado n.
Algoritmo de grado n a grado 2
Se toma como raz del rbol de grado 2 la misma raz que la del rbol de grado n
Se reorganizan las conexiones de los nodos haciendo que cada nivel del rbol de
grado n sea un hijo izquierdo del rbol de grado 2
Mientras que cada hermano del rbol de grado n, pasa a ser un hijo derecho del
rbol de grado 2.
Ricardo Gonzlez Tercero

31
Nota importante el orden original de los hijos hermanos en el rbol de grado n se
puede perder en las transformaciones.
ARBOLES AVL
Son arboles binarios ordenados que adems estn balanceados o equilibrados.
(Adelson Velskiiy Lands )
Para lograr tal efecto se basan principal,mente en una operacin llamada rotacin
La rotacin es una redistribucin de los nodos de una rama de un rbol, de modo
que el recorrido inorden no varie..
Las rotaciones son de 2 tipos simples y dobles.. Las dobles no son ms que dos
rotaciones simples seguidas
A su vez las rotaciones simples son de dos tipos izquierda y derecha


Los nodos ingresan igual que con los arboles ABO
Luego de colocar cada nuevo nodo, se debe verificar que el rbol este
balanceado. Si no est, se hacen rotacin a fin de balancearlo,
normalmente estas rotaciones se hacen sobre el recorrido inverso que tuvo
el nodo para llegar a su posicin actual