2. Plan Analítico
METODOS DE ORDENACION.
Ordenación interna.
Ordenación por intercambio directo (burbuja).
Ordenación por inserción directa.
Ordenación por selección directa.
Ordenación por el método de Shell.
Ordenación por el método quicksort.
Merge.
METODOS DE BUSQUEDA.
2.1. Búsqueda secuencial
2.2. Búsqueda Binaria.
2.3. Búsqueda por transformación de claves.
2.4. Árboles de búsqueda.
LISTAS.
3.1. Teoria y métodos recursivos
3.2. Operaciones con listas.
3.3. Listas circulares.
3.4. Listas doblemente ligadas.
3.5. Representación de polinomios.
3.6. Soluciones de colisiones (hash).
3.7. Aplicaciones.
PILAS Y COLAS.
4.1. Pilas.
4.1.1. Representación de pilas.
4.1.2. Operaciones con pilas.
4.1.3. Uso de pilas para simular recursion.
4.1.4. Aplicaciones.
4.2. Colas.
4.2.1. Representación de colas.
4.2.2. Operaciones con colas.
4.2.3. Colas circulares.
4.2.4. Doble cola.
4.2.5. Aplicaciones con colas.
ÁRBOLES.
5.1. Árboles en general.
5.2. Árboles binarios.
5.3. Recorridos en árboles binarios.
5.4. Árboles binarios de búsqueda.
5.5. Árboles balanceados.
5.6. Árboles Multicaminos.
ARBOLES EN DISCO
6.1. Introducción.
6.2. Indices vs. Arboles.
6.3. Archivos de Indices de Arboles B.
6.3.1. Búsqueda e Inserción.
6.3.2. Nomenclatura.
6.3.3. Eliminación, Concatenación y Redistribución.
6.3.4. Manejo de Páginas.
6.3.5. Métodos de Reemplazo RLU.
6.4. Archivos de Indices de Arboles B+.
6.5. Definición de Clases para manejo de Arboles.
5. Ordenación
La ordenación o clasificación de datos
(sort, en inglés) es una operación que
consistente en disponer un conjunto
—estructura— de datos en algún
determinado orden con respecto a
uno de los campos de los elementos
del conjunto.
6. Ordenación
Una colección de datos (estructura)
puede ser almacenada en memoria
central o en archivos de datos
externos guardados en unidades de
almacenamiento magnético (discos,
cintas, CD-ROM, DVD, etc.).
7. Ordenación
Cuando los datos se guardan en un array,
en una lista enlazada o en un árbol, se
denomina ordenación interna; estos datos
se almacenan exclusivamente para
tratamientos internos que se utilizan para
gestión masiva de datos, se guardan en
arrays de una o varias dimensiones. Si los
datos están almacenados en un archivo, el
proceso de ordenación se llama
ordenación externa.
8. Métodos de ordenación
Los métodos (algoritmos) de ordenación son
numerosos, por ello se debe prestar especial
atención en su elección. ¿Cómo se sabe cuál es el
mejor algoritmo? La eficiencia es el factor que
mide la calidad y el rendimiento de un algoritmo.
En el caso de la operación de ordenación, se suelen
seguir dos criterios a la hora de decidir qué
algoritmo —de entre los que resuelven la
ordenación— es el más eficiente:
1) tiempo menor de ejecución en computadora;
2) 2) menor número de instrucciones.
9. Métodos de ordenación
Los métodos de ordenación se suelen dividir
en dos grandes grupos:
directos burbuja, selección, inserción (para
listas pequeñas)
indirectos (avanzados) shell, ordenación
rápida, ordenación por mezcla (listas de
mayor número de elementos)
11. ¿Qué es Búsqueda?
La búsqueda es el proceso de localizar un
registro (elemento) con un valor de llave
particular. La búsqueda termina exitosamente
cuando se localiza el registro que contenga la
llave buscada, o termina sin éxito, cuando se
determina que no aparece ningún registro con
esa llave.
12. El método de búsqueda secuencial es de los
mas fáciles que podemos utilizar para buscar
datos(es aconsejable utilizarlo cuando el vector
no es de gran tamaño), ya que no requiere que
el vector este ordenado, el método consiste en
recorrer el vector de manera secuencial hasta
encontrar el dato a buscar.
15. Búsqueda Binaria
Consiste en dividir el arreglo por su
elemento medio en dos subarreglos más
pequeños, y comparar el elemento con el
del centro. Si coinciden la búsqueda se
termina. Si el elemento es menor debe
estar en el primer subarreglo, si es
mayor está en el segundo.
16. Condiciones de una Búsqueda
Binaria
Definir el tamaño del arreglo.
Los elementos del arreglo deben de estar
ordenados.
Los elementos del arreglo no deben de
estar duplicados.
Saber cual es el elemento a buscar.
17. Funcionamiento de Búsqueda
Binaria
Se determina el elemento central del
arreglo y se compara con el valor que se
esta buscando, si coincide termina la
búsqueda y en caso de no ser así se
determina si el dato es mayor o menor que
el elemento central, de esta forma se
elimina una mitad del arreglo junto con el
elemento central para repetir el proceso
hasta encontrarlo o tener solo un elemento
en el arreglo.
18. Funciones Hash
La implementación de la función hash depende del tipo
de clave. No va a ser la misma si la clave es un entero,
un real o una cadena. Dentro de las funciones más
comunes para la implementación de hashing se
encuentran:
Función Módulo
Función Cuadrática
Función Truncamiento
Función Plegamiento
Búsqueda mediante
transformación de claves
19. Función Módulo(Por división)
Consiste en tomar el residuo de la división de la
clave entre el numero de componentes del arreglo.
Suponga que se tiene un arreglo de N elementos y
K es la clave del dato a buscar.
La función hash queda:
H(K)=(K MOD N)
Para lograr una mayor uniformidad en la
distribución, N debe ser un número primo.(El
número primo próximo a N)
20. Sea N=100, el tamaño del arreglo
Sus direcciones de 1-100.
Sea K1 = 7259
K2 = 9359
Dos claves que deban asignarse posiciones en el arreglo
H(K1)=(7259 mod 100)=59
H(K2)=(9359 mod 100)=59
Donde H(K1) es igual a H(k2) y K1 es distinto de K2, es una
colisión
Función Módulo(Por división)
21. Función Módulo(Por división)
Se aplica N igual a un valor primo en lugar de utilizar N=100
H(K1)=(7259 mod 97)=83
H(K1)=(9359 mod 97)=47
Con N=97 se ha eliminado la colisión
22. Función Cuadrática
Consiste en elevar al cuadrado la clave y coger las cifras
centrales. Este método también presenta problemas de
colisión.
K1=7259
K2=136
H(k1*k1)=DigitosCentrales(52693081)=93
H(k2*k2)=DigitosCentrales(18496)=84
23. Función Truncamiento
Consiste en tomar algunos dígitos de la clave y
formar con ellos una dirección.
Este método es de los mas sencillos, pero es
también de los que ofrece menos uniformidad en la
distribución de las claves.
Se pueden elegir los dígitos de las posiciones pares
o impares. H(k)= elegir_digitos(d1,d2,...,dn)+1)
24. Función Truncamiento
Sea K1=7259
K2=9359
Dos claves que deban asignarse posiciones en el
arreglo
H(k1)=Elegir_digito(7259)=75
H(K2)= Elegir_digito(9359)=95
Se toman el primer y tercer número de la clave y
une de izquierda a derecha
25. Función Plegamiento
Consiste en dividir la clave en partes de igual
número de dígitos (La ultima puede tener menos
dígitos) y operar con ellos tomando como dirección
los dígitos menos significativos.
La operación entre las partes puede hacerse por
medio de sumas o multiplicaciones.
H(K)=digitos_menos_significativos((d1..di)+(di+1..dj)+…+(d1..dn))+1
28. Lista Enlazada
Una lista enlazada es una colección o
secuencia de elementos dispuestos uno detrás
de otro, en la que cada elemento se conecta al
siguiente elemento por un “enlace” o
“referencia”.
29. Lista Enlazada
La idea básica consiste en construir una lista
cuyos elementos, llamados nodos, se
componen de dos partes (campos): la
primera parte contiene la información y es,
por consiguiente, un valor de un tipo
genérico (denominado Dato, TipoElemento,
Info, etc.), y la segunda parte es una
referencia (denominado enlace o sgte) que
apunta (enlaza) al siguiente elemento de la
lista.
30. Representación Gráfica
La representación gráfica más extendida es aquella
que utiliza una caja (un rectángulo) con dos
secciones en su interior. En la primera sección se
escribe el elemento o valor del dato, y en la segunda
sección, el enlace o referencia mediante una flecha
que sale de la caja y apunta al nodo siguiente.
31. Tipo de Dato Abstracto
(TDA) Lista
Una lista se utiliza para almacenar
información del mismo tipo, con la
característica de que puede contener un
número indeterminado de elementos y que
estos elementos mantienen un orden
explícito. Este ordenamiento explícito
implica que cada elemento (un nodo de la
lista) contiene la dirección del siguiente
elemento.
32. Clasificación de las listas
enlazadas
Las listas se pueden dividir en cuatro
categorías:
– Listas simplemente enlazadas
– Listas doblemente enlazadas
– Listas circular simplemente enlazadas
– Listas circular doblemente enlazadas
33. Listas circulares
En las listas lineales simples siempre hay
un primer nodo (cabeza) y un último nodo
(cola). Una lista circular, por propia
naturaleza, no tiene ni principio ni fin. Sin
embargo, resulta útil establecer un nodo a
partir del cual se acceda a la lista y así
poder acceder a sus nodos
34. Listas circulares
La Figura muestra una lista circular con
enlace simple; podría considerarse que es
una lista lineal cuyo último nodo apunta
al primero
35. Listas doblemente enlazadas
En esta lista, cada elemento contiene dos
punteros (referencias), además del valor
almacenado. Una referencia apunta al
siguiente elemento de la lista y la otra
referencia apunta al elemento anterior
38. TDA Pila
Una pila es una estructura de datos en la
cual el acceso está limitado al elemento
más recientemente insertado y
solamente puede crecer y decrecer por
uno de sus extremos.
Las pilas se denominan también
estructuras LIFO (Last-In-First-Out),
porque su característica principal es que
el último elemento en llegar es el
primero en salir.
39. TDA Pila
En todo momento, el único elemento
visible de la estructura es el último que se
colocó.
Se define el tope de la pila como el punto
donde se encuentra dicho elemento.
En una pila, las tres operaciones naturales
de insertar, eliminar y obtener el dato, se
renombran por push, pop e info.
40. Métodos de una Pila
push( x ) --> Inserta x
pop( ) --> Elimina el último elemento
insertado
info( ) --> Retorna el último elemento
insertado
esVacia( ) --> Retorna true si no existen
elementos; false en caso contrario
vaciar( ) --> Elimina todos los elementos
42. Pilas
Las pilas tienen muchas aplicaciones
interesantes. Por ejemplo, cuando se
realiza una llamada de función, la función
llamada debe saber la manera de regresar
a su invocador, y por esto la dirección, de
devolución se pone en una pila.
43. Pilas
Si sucede una serie de llamadas de función,
los valores de devolución sucesivos se
ponen en la pila en un orden último en
entrar, primero en salir, para que cada
función pueda regresar a su invocador.
Las pilas soportan las llamadas de función
recursivas en la misma forma que lo hacen
con las llamadas no recursivas
convencionales.
44. Funciones Recursivas
Las pilas pueden ser usadas para
implementar la recursión en programas.
Una función o procedimiento recursivo es
aquel que se llama a si mismo.
Ejemplos:
• Factorial
• Números de Fibonacci
• Torres de Hanoi
• Algoritmos de Ordenamiento de datos
• Etc.
45. Aplicaciones de Pilas
Las pilas son requeridas para implementar
el control de flujo de ejecución de un
programa con subprogramas (funciones,
procedimientos o métodos).
– Subprogramas recursivos o no recursivos
– Existen llamadas a ejecución de subprogramas.
– Un subprograma se ejecuta completamente antes
de retornar al punto donde fue llamado.
46. Cola
Es un conjunto ordenado de elementos del que
pueden suprimirse estos, de un extremo
(llamado la parte delantera) y en el que pueden
insertarse elementos del otro extremo (llamado
la parte posterior de la cola).
El primer elemento insertado en una cola es el
primer elemento que se suprime. Por esta razón,
se conoce a la Cola como un lista tipo FIFO
(primero en entrar, el primero en salir).
47. Una cola es una estructura lineal, en la cual los
elementos sólo pueden ser adicionados por uno
de sus extremos y eliminados o consultados por
el otro.
También hay que tener presente, que el único
elemento visible en una cola es el primero y
mientras éste no haya salido (eliminado), no es
posible tener acceso al siguiente.
Cola
48. Ejemplos:
Una fila de un banco
Una parada de autobús
Automóviles esperando en una caseta de peaje.
Cola
49. Debemos tener ciertas consideraciones al
implementar una solución para las
operaciones sobre una cola de datos:
La cola está vacía inicialmente
La operación insert puede ejecutarse siempre,
pues no hay límite en la cantidad de elementos
que puede contener una cola.
La operación remove sólo puede aplicarse si la
cola no está vacía: no hay forma de remover un
elemento de una cola que no contiene
elementos.
Cola
50. A B C
B C
B C D E
Parte delantera
Parte delantera
Parte delantera
Parte posterior
Parte posterior
Parte posterior
51. A
B
A
A B C
B C
B C D
C D
1.- Insertar A
2.- Insertar B
Estado de la cola:
3.- Insertar C
4.- Remover Elemento
5.- Insertar D
6.- Remover Elemento
Inicio: Cola Vacía
52. TIPOS DE COLAS:
Cola simple: Estructura lineal donde los elementos
salen en el mismo orden en que llegan.
Cola circular: Representación lógica de una cola
simple en un arreglo.
Cola de Prioridades: Estructura lineal en la cual los
elementos se insertan en cualquier posición de la
cola y se remueven solamente por el frente.
Cola Doble (Bicola): Estructura lineal en la que los
elementos se pueden añadir o quitar por cualquier
extremo de la cola (cola bidireccional).
53. Implementación de Colas
Arreglo
– con frente fijo.
– con frente movible.
– circular.
Listas enlazadas
54. Cola
Debemos tener ciertas consideraciones al
implementar una solución para las
operaciones sobre una cola de datos:
El resultado de un intento no válido de
remover un elemento de una cola vacía se
denomina subdesbordamiento.
La operación vacía siempre es aplicable.
La representación de una cola como un tipo
abstracto de datos es directa.
56. Árboles
Intuitivamente el concepto de árbol
implica una estructura en la que lo
datos se organizan de modo que los
elementos de información están
organizados entre sí a través de
ramas.
58. Un árbol consta de un conjunto finito
de elementos, denominados nodos, y
un conjunto finito de líneas dirigidas,
denominadas ramas, que conectan
los nodos.
Árboles
59. Si el árbol no esta vacío, entonces el primer
nodo se llama raíz.
A
F
E
B
C D G H I
raíz
Nivel 0
Nivel 1
Nivel 2
Altura: 3
Árboles
60. El nivel de un nodo es su distancia a
la raíz.
La altura o profundidad de un
árbol es el nivel de la hoja del
camino más largo desde la raíz más
uno.
Árboles
61. Definiciones Básicas
Nodo Padre de un nodo N es aquel que apunta al mismo.
En un árbol cada nodo sólo puede tener un padre. En el
siguiente ejemplo A es el padre de B y C, y a su vez, B es el
padre de D.
Nodo Hijo de otro nodo A es cualquier nodo apuntado por
el nodo A. Un nodo puede tener varios hijos. En el
ejemplo , B y C son los nodos hijos de A y todos los nodos
tienen uno o dos hijos.
Nodo Raíz es el único del árbol que no tiene padre. En la
representación que se utiliza, el nodo raíz es el que se
encuentra en la parte superior del árbol: A
62. Hojas son todos los nodos que no tienen hijos. En la
representación del ejemplo son hojas los nodos
situados en la parte inferior: D, G, H y F.
Nodos Interiores son los nodos que no son ni el nodo
raíz, ni nodos hoja. En el ejemplo, son nodos interiores
B, C y E.
Camino es una secuencia de nodos, en el que dos nodos
consecutivos cualesquiera son padre e hijo. En el
ejemplo A-B-D es un camino, al igual que E-G y C-E-H.
Rama es un camino desde el nodo raíz a una hoja. En el
ejemplo , A-C-E-G y AC-F son ramas.
Definiciones Básicas
64. Grado es el número máximo de hijos
que tienen los nodos del árbol. Así, en
el ejemplo anterior el árbol es de
grado dos.
Grado del Árbol
65. Árboles binarios
Definición 1
Un Árbol binario es un árbol de grado 2
Definición 2
Un Árbol binario es aquel que
Es vacío, o
Está formado por un nodo cuyos
subárboles izquierdo y derecho son a su vez
árboles binarios.
67. El árbol del ejemplo anterior es un árbol
binario, ya que cada nodo tiene como máximo
dos hijos.
Se debe notar que en cualquier árbol, no sólo en
los binarios, si se elimina el nodo raíz, se
obtienen dos árboles.
Aquel que colgaba del enlace izquierdo del nodo
raíz se denomina subárbol izquierdo y aquel que
colgaba del enlace derecho se denomina
subárbol derecho.
Árboles binarios
68. Existen algunos tipos especiales de
árboles binarios en función de ciertas
propiedades. Por ejemplo:
Árbol binario equilibrado es aquel en el
que en todos sus nodos se cumple la
siguiente propiedad:
altura(subárbol_derecho) - altura(subárbol_izquierdo)
Es menor o igual a 1.
Árboles binarios
69. Árbol binario completo es aquel en el
que todos los nodos tienen dos hijos y
todas las hojas están en el mismo
nivel. Se denomina completo porque
cada nodo, excepto las hojas, tiene el
máximo de hijos que puede tener.
Árboles binario completo
70. Recorrido de un Árbol binario
Recorrer un árbol consiste en acceder una
sola vez a todos sus nodos.
Esta operación es básica en el
tratamiento de árboles y permite, por
ejemplo, imprimir toda la información
almacenada en el árbol, o bien eliminar
toda esta información o, si tenemos un
árbol con tipo base numérico, sumar
todos los valores...
71. Recorrido de un Árbol binario
En el caso de los árboles binarios, el
recorrido de sus distintos nodos se debe
realizar en tres pasos:
Acceder a la información de un nodo dado
Acceder a la información del subárbol
izquierdo de dicho nodo,
Acceder a la información del subárbol
derecho de dicho nodo.
72. Imponiendo la restricción de que el
subárbol izquierdo se recorre siempre
antes que el derecho, esta forma de
proceder da lugar a tres tipos de
recorrido, que se diferencian por el
orden en el que se realizan estos tres
pasos.
Recorrido de un Árbol binario
74. Recorrido Preorden
Preorden: primero se accede a la
información del nodo raíz, después al
subárbol izquierdo y después al derecho.
75. Recorrido Inorden
Inorden: primero se accede a la información
del subárbol izquierdo, después se accede a la
información del nodo y, por último, se accede a
la información del subárbol derecho.
76. Recorrido Postorden
Postorden: primero se accede a la
información del subárbol izquierdo, después a
la del subárbol derecho y, por último, se accede
a la información del nodo.
77. Árboles binarios de búsqueda
Un árbol binario de búsqueda es una
estructura de datos de tipo árbol
binario en el que para todos sus nodos,
el hijo izquierdo, si existe, contiene un
valor menor que el nodo padre y el hijo
derecho, si existe, contiene un valor
mayor que el del nodo padre.
78. Es de búsqueda porqué:
– Los nodos están ordenados de manera
conveniente para la búsqueda.
– Todos los datos del subárbol izquierdo
son menores que el dato del nodo raíz, y
todas los datos del subárbol derecho
son mayores.
Árboles binarios de búsqueda
79.
80. Búsqueda
La operación de búsqueda en un árbol
binario de búsqueda, es bastante sencilla de
entender.
Suponer que se busca un elemento x en el
árbol. Lo primero que haremos será
comprobar si se encuentra en el nodo raíz. Si
no es así, si el elemento buscado es menor
que el contenido en el nodo raíz sabremos
que, de estar en el árbol, se encuentra en el
subárbol izquierdo. Si el elemento buscado es
mayor que el contenido en el nodo raíz
sabremos que, de estar en el árbol, se
encuentra en el subárbol derecho.
81. Consideraciones:
Si el valor del nodo actual es igual al valor
buscado, lo hemos encontrado.
Si el valor buscado es menor que el del
nodo actual, deberemos inspeccionar el
subárbol izquierdo.
Si el valor buscado es mayor que el del
nodo actual, deberemos inspeccionar el
subárbol derecho.
82. Inserción
La operación de inserción de un nuevo nodo en
un árbol binario de búsqueda consta de tres
fases básicas:
1. Creación del nuevo nodo
2. Búsqueda de su posición correspondiente en el
árbol. Se trata de encontrar la posición que le
corresponde para que el árbol resultante siga
siendo de búsqueda.
3. Inserción en la posición encontrada. Se
modifican de modo adecuado los enlaces de la
estructura.
84. Eliminar
Existen cuatro distintos escenarios:
1. Intentar eliminar un nodo que no existe.
– No se hace nada, simplemente se regresa FALSE.
2. Eliminar un nodo hoja.
– Caso sencillo; se borra el nodo y se actualiza el apuntador del
nodo padre a NULL.
3. Eliminar un nodo con un solo hijo.
– Caso sencillo; el nodo hijo se convierte en el padre.
4. Eliminar un nodo con dos hijos.
– Caso complejo, es necesario mover más de una referencia.
– Se busca el máximo de la rama izquierda o el mínimo de la
rama derecha.
86. Eliminar (casos complejos)
6
2 8
3
1 4
5
6
3 8
3
1 4
5
eliminar
copiar
valor
Eliminar nodo con dos hijos
Eliminar 2
Remplazar el dato del nodo que se desea eliminar con el dato del
nodo más pequeño del subárbol derecho
Después, eliminar el nodo más pequeño del subárbol derecho (caso
fácil)
87. Otro ejemplo (caso complejo)
6
2 8
3
1 4
5
3.5
Eliminar nodo con dos hijos
Eliminar 2
6
3 8
3
1 4
5
3.5
89. Árboles Balanceados
La idea central
– Realizar reacomodos o balanceos después de
inserciones o eliminaciones de elementos.
– Se les conoce igual como arboles AVL
– (autores: G.M. Adelson-Velskii y E.M Landis).
Definición:
Es un árbol binario de búsqueda , en la cual se
cumple la siguiente condición “Para todo nodo T
del árbol la altura de los subárboles izquierdo y
derecho no deben diferir en más de una unidad .
90. Inserción
CASO 1: La rama izquierda y derecha del árbol
tienen la misma estructura Hri= hrd
Por lo tanto:
1.1 si se inserta a la izquierda Hri >Hrd
1.2 si se inserta a la derecha Hrd >Hri
15
15
.
.
15 .
91. Inserción
CASO 2:la altura del Ri != Rd
2.1 Hri<Hrd
Si se inserta en Hri = Equilibrio
Si se inserta en Hrd=no hay equilibrio
15
.
15
.
15
x
92. Inserción
CASO 3:la altura del Ri != Rd
2.1 Hri>Hrd
Si se inserta en Hri = no hay equilibrio
Si se inserta en Hrd = equilibrio
15
15 15
.
.
x
93. Factor de Equilibrio
Se calcula
FE= Hrd – Hri
Los valores que puede tomar son:
-1, 0, 1
Si no son estos valores se tendrá que
reestructurar el árbol
95. Reestructuración
El proceso de inserción en un árbol
balanceado es sencillo pero con detalles
complicados.
Paso 1 seguir un camino de búsqueda para
localizar el lugar de la inserción.
Paso 2 calcular el FE (obviamente 0)
Paso 3 regresar por el camino calculando el
Fe de los distintos nodos, si en algún
momento se viola el criterio de equilibrio
Se reestructura el árbol.
96. Reestructurar
Significa rotar los nodos del mismo y puede ser:
SIMPLE
DD (Derecha derecha)
II (izquierda, izquierda)
COMPUESTA
DI (derecha izquierda)
ID (izquierda derecha)
97. BORRADO
Se tienen los mismos casos que en arboles
binarios de búsqueda
1 nodo terminal u hoja se suprime
2 1 descendiente(izquierda o derecha) se
sustituye
3.- 2 descendientes
Buscamos en el subárbol izquierdo el que este
más a la derecha
Buscamos en el subárbol derecho el que se
encuentre más a la izquierda
98. BORRADO
PASO 1.- Se busca la ruta
PASO 2.-Se aplica la regla anterior
PASO 3.- Regresar por el camino de búsqueda y
recalcular Fe.
PASO 4.- Si en un momento se viola la regla se
reacomoda como en la inserción
PASO 5.- Se hace la operación hasta llegar al
nodo raíz
100. Introducción
• Un árbol multimodal
– La familia de árboles B son árboles multicamino, esto
significa que tienen más de una llave (dato indexado) en
sus nodos. Los árboles binarios tienen solamente una
llave en sus nodos. El número de llaves que tiene más
uno se dice que es el orden de un árbol B, B* o B+.
Ejemplo: si un nodo tiene orden 5 significa que tiene 4
llaves cada nodo en el árbol.
101. Introducción
– Es útil en sistemas de Archivos y para manejar
Sistemas de Bases de Datos
– Permiten almacenar grandes cantidades de datos
• Que no entran en memoria secundaria
– Se aplica para la organización de índices o claves
• De tal forma que el acceso a esos datos
• Usando dispositivos externos(no en memoria principal)
• Tengan un costo relativamente bajo
102. Características
• Posee un orden m
– Este define el máximo de claves e hijos que cada nodo puede
tener
• Cada nodo se denomina pagina
• Es un árbol lleno( y balanceado)
– Todas sus hojas están en el mismo nivel
• Cada página interna
– Posee máximo: m ramas
– Y mínimo: m/2 ramas, redondeado
– Si posee un numero n de ramas, puede almacenar hasta n-1
claves
• Y la raíz
– Tiene máximo: m ramas
– Y mínimo: 2 ramas, o 0 si solo existe el nodo raíz
103. EJEMPLO
Las ramas a la izq. de una clave x
– Almacenan claves menores que x
Las ramas a la derecha de la ultima clave y
– Almacena claves mayores que y
En cada pagina las claves se almacenan en orden
P
I L S X
A C D J K M O Q R T U Y Z
> P
< P
< I < L > L < S < X > X
Arbol B de orden 5(4-5)
Max: 5 ramas(4 claves)
Min: 3 ramas(2 claves)
104. Estructura de la Página
Tomemos como ejemplo un árbol 2-3
– Claves Max: 2
– Ramas Max: 3
Que necesitamos?
F M
Cada Pagina almacenara máximo 2 claves
Cada Pagina tendrá 3 punteros máximo, para sus ramas
105. Árboles B
Bayer y McCreight propusieron en 1970 esta estructura.
Manejan árboles de búsqueda multicamino, cuyos nodos
guardan más de un elemento.
Son árboles 100% balanceados en su estructura, lo cual
repercute en búsquedas eficientes y en accesos mínimos a
disco.
10 20
5 8
12 18
25 65 92 99
106. Características del Árbol B
Un Árbol B de orden n es aquel que:
Todas las hojas del árbol están en el nivel inferior.
Cada nodo contiene entre n y 2n elementos, excepto el
nodo raíz, que puede tener entre 1 y 2n elementos.
Si un nodo tiene ‘m’ elementos, el nodo siempre
contendrá m + 1 hijos si no es un nodo hoja.
107. Características del Árbol B
Un árbol B de orden n es aquél en que:
Los elementos de un nodo están ordenados
linealmente.
Los elementos están organizados de tal forma que se
cumple la regla de la búsqueda: a la izquierda
menores, a la derecha mayores.
10 20
5 8
12 18
25 65 92 99
108. Algoritmo de Inserción
Si el árbol esta vacío
– Retornar la nueva clave que se iba a insertar y la
nuevapag(NULL)
– Indicar que si se debe seguir propagando la revisión
En la pagina dada, se busca en que rama se debe
insertar la nueva clave
– Cuando se encuentre, y si hay espacio para insertar un
nuevo elemento
• Meter la clave en la pagina y
• La nuevapag como rama derecha nueva de la pagina
• Indicar que ya no se debe seguir revisando mas
arriba
109. Algoritmo de Inserción
Si se encuentra la posición en pagina y NO HAY
espacio
• Dividir la pagina, creando nueva pagina nuevapag
• Copiar mitad de las claves, incluyendo clave nueva en
nuevapag
• Sin incluir clave mediana
• Retornar la clave mediana, la nuevapag creada e
indicar que si se debe seguir revisando hacia arriba
Repetir todo, hasta que haya espacio o se llegue
a la raíz,
• En ese caso, se debe crear una nueva raíz con la clave
mediana y añadir rama derecha como nuevapag
110. EJEMPLO
En arbol de orden 5, insertar
– 6, 11, 5, 4, 8, 9, 12, 21,14,10,19,28,3,17,15,32,
16,26,27
4 5 6 11
Clave a Subir: 8
Pagina a Subir: NULL
4 5
8 11
8 no entra, hay
que dividir,
creando nueva
pagina
Clave a Subir: 6
6
8 11
8 9 11 12
Clave a Subir: 21
6 ya no tiene
donde subir, se
crea nueva raiz y
se enlaza paigna
a subir
21 no entra, hay
que dividir,
creando nueva
pagina
Subimos clave
mediana hasta
que entre en
alguna pagina
8 9
12 21
6 11
Clave a Subir: 11
12 21
12 14 21
8 9 10 12 14 19 21
Clave a Subir: 28
12 14
21 28
Clave a Subir: 19
21 28
6 11 19
4 5
3 12 14 15 17 21 28 32
Clave a Subir: 16
16 17
Clave a Subir: 15
12 14 16 17
6 11 15 19
21 26 28 32
Clave a Subir: 27
21 26
Clave a Subir: 27
28 32
No entra en la
pagina raiz, pues
ya esta llena,
dividir
6 11 19 27
28 32
Clave a Subir: 15
19 27
Ya llegamos a la
raiz, no hay
donde subir,
crear nueva raiz
y enlazar
15
111. CONCLUSION
Recuerde que insertar es
– Buscar donde insertar (bajar por el árbol)
– Dividir o Meter y
– Decidir si se debe seguir propagando clave y nuevapag(subir)
Al subir hay que informar si se propaga o no la división
– Además de informar que clave sube y la pagina que sube
Si la propagación llegase a la raíz
– Crear nueva raíz
– Con clave que subió
– Donde la Rama Izq. es la anterior raíz
– Rama Derecha es la Pagina que sube
112. Algoritmo de Eliminación
Siempre se deberá eliminar claves de paginas
hojas
Si la clave esta en una pag.interna
– Se busca su antecesora
• Mayor de los menores
– Se intercambia y se elimina la clave en pagina hoja
Si esta en pagina hoja
– Se debe mantener el equilibrio
113. Eliminación de clave en hoja
Si luego de eliminar, quedan mas del mínimo de claves
por pag.
– Todo OK, se elimina fácilmente
Si quedan menos del mínimo
– Se informa a la raíz del problema
– La raíz revisa si los hermanos de la pag. pueden prestar claves
• Sube clave a prestar
• Baja clave intermedia de raíz
– Si no tiene para prestar
• Bajar clave de raíz y unir dos hermanos
• Al hacer esto, la raíz puede quedar con menos claves y en ese caso
propagar acción hacia mas arriba
114. EJEMPLO
Del siguiente arbol eliminar las claves 16, 24, 22
45
16 26 79 172
5 9 15 18 22 24 48 57 82 126 192 232
29 32
Reemplazar
por Sucesor
18
Aun hay suf.
Claves para
eliminar
Menos claves de las
permitidas, eliminar
e informar al padre
La raiz decide
que puede
prestar de los
hermanos
15
18
La raiz decide que
NO puede prestar
de los hermanos.
•Bajar mediana
•Unir dos paginas.
•Si raiz se queda
con menos de
permitido
•Informa al
padre
18
15
La raiz decide que
NO puede prestar
de los hermanos
•Bajar mediana
•Unir dos paginas
•Esta nueva pagina
sera la nueva raiz
79 172
45
115. CONCLUSION
Eliminar es
– Bajar por el árbol buscando la clave
– Eliminar la clave de la pagina pase lo que pase
• E informar a la raíz si hubo problemas(seguir
propagando) o no
– Fusionar y Propagar(Subir)
Si se propaga hasta la raíz
– La nueva raíz será la rama mas izquierda