You are on page 1of 15

ARBOLES B

• Definición
o En informática, un árbol B es una estructura de datos de árbol auto
equilibrado, que mantiene datos ordenados y permite búsquedas, acceso
secuencial, inserciones y eliminaciones en tiempo logarítmico.
o Tiene un coste menor de acceso a datos que otras estructuras como los
árboles AVL y árboles binarios, reduciendo la necesidad de utilizar el
almacenamiento secundario.
• Historia
o Los árboles B fueron inventados en los años 70 por Rudolf Bayer y Edward
McCreight quienes trabajaban en Boeing Research Labs.
o Querían diseñar una mejor versión de los árboles binarios, al abordar cargas
de datos almacenados en discos.
o El árbol B es ideal para sistemas de almacenamiento que leen y escriben
bloques de datos relativamente grandes, como bases de datos y sistemas de
archivos.
• Componentes
o Los árboles B, están compuestos por nodos, teniendo un nodo origen
conocido como raíz (root) y sus nodos hijos, cuando un nodo no tiene más
hijos se conoce como hoja.


o Nodos en árboles B
▪ Cada nodo está compuesto de K claves (key).
▪ Cada nodo tendrá M hijos (M = K + 1).


o Nodos
▪ Un nodo de árbol-B también es llamado Pagina (Page)
▪ Cada nodo (excepto root) tiene como mínimo (M)/2 hijos.
▪ Todos los nodos hoja, están en el mismo nivel.
▪ El orden de las claves en cada nodo debe estar ordenado.
• k1 > k2 > k3… > kn
o Árbol
▪ El árbol está ordenado.
▪ El grado de un árbol-B es el número máximo de hijos que pueden
partir de un nodo (M).
▪ La profundidad es el número máximo de consultas para encontrar
una clave.


• Coste computacional
o Altura/Profundidad (mejor escenario/altura mínima)
▪ Altura = logm (k+1)
o Altura/Profundidad (peor escenario/altura máxima) tomando d = M/2
▪ Altura = logd ((k+1)/2)

o
• Operaciones
o Búsqueda
▪ La búsqueda es similar a la búsqueda en un árbol de búsqueda
binaria.
▪ Comenzando en la raíz, el árbol se recorre recursivamente de arriba a
abajo.
▪ En cada nivel, la búsqueda reduce su campo de visión al subárbol.
▪ La búsqueda implica:
• Buscar entre las claves contenidas del nodo
• Sino no se encuentra, se salta al nodo hijo donde puede estar.
• Si se llega a un nodo hoja, notificar de no encontrado.
▪ Código


o Inserción
▪ Consiste en introducir elementos en el árbol B.
▪ La aceptación de duplicados es un criterio al momento de diseñar el
árbol B.
• INSERTAR(nodo, valor)
▪ Una inserción implica:
• Salvo ciertas excepciones, los elementos serán insertados en
una hoja.
o Si el nodo no es una hoja, se debe dirigir al hijo más
prometedor e intentarlo de nuevo.
o La inserción en una hoja se hace metiendo el
elemento de manera ordenada en el arreglo de claves.
• Se debe respetar el grado del árbol. Si se tienen demasiadas
claves hay que dividir el nodo.
▪ Parámetros
• Árbol B de grado M.
• Máximo
o Como mucho M descendientes.
o Como mucho M-1 claves.
• Mínimo
o Como mínimo M/2 descendientes.
o Como minimo (M/2)-1 claves.
• Ejemplo

o
▪ Se definirá U (Upper) al número de máximo de claves entonces:
• U=M-1
▪ Se definirá L (Lower) al número mínimo de claves entonces:
• L = (M/2) -1
▪ Código



o Borrado
▪ Proceso similar a una inserción, el borrado implica:
• En lugar de dividir, se realiza una unión o redistribución.
• El borrado puede ocurrir en cualquier lugar del árbol,
contrario a la inserción que ocurría únicamente en las hojas.
• Si la clave a eliminar se encuentra en una hoja, se elimina
directamente.
o Si al realizar la eliminación, el nodo mantiene el
mínimo número de claves (M/2 -1), finaliza.
o De lo contrario se debe hacer una redistribución.
• Si se encuentra dentro de un nodo interno, no se puede
suprimir de forma directa
o Se debe “subir” la clave que se encuentra más a la
derecha en el subárbol izquierdo o más a la izquierda
en el subárbol derecho.
• Si al subir la clave, en el nodo respectivo no se cumple el
mínimo número de claves (M/2 -1), se debe realizar una
redistribución.
• NOTA: d = ((M/2) -1)
• Si un nodo vecino tiene suficiente número de claves (>d),
realiza un préstamo.
o La clave que se encuentra más a la izquierda “sube”.
o La clave del nodo padre “baja”.
• Si un nodo vecino no tiene suficiente número de claves
(<=d), se realiza una unión entre el nodo donde se realiza el
borrado (nodo de supresión), su vecino y su padre.
o Dividir/reestructurar*
▪ Si luego de hacer una inserción un nodo tiene más claves que lo
permitido, entonces se divide en dos subnodos el nodo.
▪ Se toma un elemento pivote que estará en la mediana (posición del
arreglo de claves).
▪ Se traslada las claves e hijos mayores que L a un nuevo nodo y se
retiran del nodo viejo, que será el otro subnodo.
▪ Se empuja el pivote hacia arriba en el árbol.
▪ El nodo padre que recibe el pivote puede colapsar también, pidiendo
una división.
▪ Como en el nodo raíz no hay padre al que empujar el pivote, se
redefine la raíz del árbol.
• Ventajas
o Todos los nodos hoja están al mismo nivel, la recuperación de cualquier
registro toma el mismo tiempo.
o Permanecen balanceados automáticamente.
o Proveen un buen desempeño para consultas exactas y por rangos.
o Inserciones, modificaciones y eliminaciones son eficientes, y se mantiene el
orden de las claves para una recuperación rápida.
ARBOL B*
• Definición e historia
o Es una variante del árbol B +.
o Publicado por primera vez por Hans Berliner en 1979.
o Requiere que los nodos no raíz estén por lo menos a 2/3 de ocupación en
lugar de ½.
• Características
o El nodo raíz tiene un mínimo de dos y un máximo de 2[(2M-2)/3] +1 hijos
(aproximar hacia arriba).
o Los nodos no raíz tienen mínimo (2M-1)/3 hijos y un máximo de M.
o Todas las hojas están en el mismo nivel (balanceado).
o La división ocurre similar al árbol B y B+.
o En las operaciones decimales de (2M-1)/3, se aproxima hacia abajo. (ej. 2.5
–> 2)
• Operaciones
o Búsqueda
o Inserción
▪ Similar al árbol B
• Si el nodo aún no está lleno (M-1 claves), entonces
simplemente se inserta.
• Si el nodo ya está lleno, entonces en lugar de generar 2
nodos, se generan 3 con la tercera parte del contenido del
nodo original.
• Ejemplo

o
• Inserción con raíz llena
o Se debe considerar la cuestión de dividir la raíz.
o Por definición, nunca tiene hermanos.
o Soluciones sugeridas (considerando “max raíz” =
2[(2M-2)/3] +1 )
▪ préstamo a nodo hijo con menor espacio.
▪ realizar partición de forma convencional en 2
(como en árbol B/B+).
▪ (Recomendada) Knuth sugiere aprovechar la
“max raíz” para dividir en 3 el nodo raíz.
o Características de la solución de Knuth para raíz llena
▪ Permitir que la raíz crezca hasta un tamaño
mayor que los demás nodos.
▪ Tiene la ventaja de asegurar que todos los
nodos por debajo del nivel de la raíz se
adhieren a las características de los árboles
B*.
o Borrado
• Ventajas y desventajas
o Su mayor ventaja es su característica única llamada división 'dos a tres'. El
número mínimo de claves es dos tercios, lo que hace que los datos sean
mucho más compactos.
o Su mayor desventaja es el proceso de borrado por el cálculo de claves que
implica volviéndolo más complejo y pesado.
o La implementación de B* es más compleja debido a sus condiciones a
cumplir, por lo que contribuye a que no se use con tanta regularidad como
los árboles B y B+.
COMPRESIÓN DE DATOS
• Definición y Propósito de la compresión de datos
o “La compresión de datos es una reducción en el número de bits necesarios
para representar los datos”.
o La compresión de datos puede ahorrar capacidad de almacenamiento,
acelerar la transferencia de archivos y reducir los costos de hardware de
almacenamiento y ancho de banda de la red.
o Cualquier compresión en particular es con pérdida o sin pérdida.
o Es posible implementar la teoría de árboles a la compresión de datos.
o Compresión con pérdida: los datos antes y después de comprimirlos son
exactos y no se pierde ningún valor.
o Compresión sin pérdida: puede eliminar datos para disminuir aún más el
tamaño, con lo que reduce la calidad.
• Algoritmo RLE
o Simple de compresión de datos sin pérdidas que se ejecuta en secuencias con
el mismo valor que ocurre muchas veces consecutivas.
o Ejemplo:
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWW
WWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWW
WW
▪ Salida: 12W1B12W3B24W1B14W
▪ NOTA: Tener en cuenta que el tamaño de salida se puede duplicar de
tamaño en el peor de los casos. (ej.)
▪ ABCD —> A1B1C1D1
• Compresión por probabilidad
o Alfabeto de tamaño n
o Número de bits necesarios para representar cada símbolo: log2(n)
o Para un alfabeto de 26 símbolos necesitamos log2(26) = 5 bits
o ¿Es posible reducir el número de bits utilizados?
o Tomemos el siguiente ejemplo:
▪ Mensaje: "en mi casa viven tengo tres gatos"
▪ letras del alfabeto: e,n,m,i,c,a,s,v,t,g,o,r
▪ total de letras: 12

• Definición de Entropía y Redundancia
o Redundancia:
▪ Datos repetitivos y predecibles
o Entropía:
▪ Mide la incertidumbre de una fuente de información, se puede
considerar como la cantidad de información promedio que contienen
los símbolos usados.
• Características de la entropía de datos.
o Los símbolos con menor probabilidad son los que aportan más información.
o En la teoría de la información es una magnitud que mide la información
provista por una fuente de datos.
o La entropía es la encargada de medir la aleatoriedad en los datos.
• La entropía de Shannon
o Fue presentada por Shannon en su artículo de 1948, A Mathematical Theory
of Communication.
o Según Shannon la entropía debe satisfacer lo siguiente:
▪ La medida de información debe ser proporcional.
▪ Si todos los elementos de la señal son igual de probables a la hora de
aparecer, entonces la entropía será máxima.
CODIFICACIÓN DE HUFFMAN
• Historia
o En 1952, David Huffman propuso un método estadístico que permitía
asignar un código binario a los diversos símbolos a comprimir.
o Fue desarrollado por David A. Huffman mientras era estudiante de
doctorado en el MIT, y publicado en "A Method for the Construction of
Minimum-Redundancy Codes".
o Huffman superó a su profesor Robert. M. Fano, quien había trabajado con el
inventor de la teoría de la información Claude Shannon con el fin de
desarrollar un código similar.
• Definición
o Es un algoritmo para realizar la compresión de datos y forma la idea básica
detrás de la compresión de archivos.
o La longitud de cada código no es idéntica para todos los símbolos mientras
que los símbolos menos frecuentes reciben códigos binarios más largos.
o Huffman solucionó la mayor parte de los errores en el algoritmo de
codificación Shannon-Fano.
o La solución se basaba en el proceso de construir el árbol de abajo a arriba en
vez de al contrario.
• ¿Cómo trabaja?
o Supongamos un string enviado a través de la red como se muestra a
continuación:


o El string mostrado contiene 15 caracteres.
▪ 8 * 15 = 120 bits requeridos para el envio
o PASOS:
▪ Se puede comprimir el string a un tamaño menor.
• Calcule la frecuencia de cada carácter en el string.

o
• Ordene los caracteres en orden creciente de frecuencia.

o
▪ Se puede comprimir el string a un tamaño menor.
• Hacer que cada carácter único sea representado como un
nodo hoja.
• Crear un nodo vacío:
o Asignar al nodo hoja izquierdo el de menor
frecuencia.
o Asignar al nodo hoja derecho el siguiente menor.
o Asignar al nodo vacío el valor de la suma de las
frecuencias.
• Se remueven los valores usados en los nodos hoja de la cola y
se agrega a la cola el nuevo nodo con la suma de las
frecuencias de los nodos hoja.

o
• Repetir paso 3 y 5 para todos los caracteres sobrantes.

o
• Para cada no hijo, asignar 0 a la rama izquierda y 1 a la rama
derecha.

o
• TABLA DE CODIFICACION
o
• Decodificación
o Es simplemente una cuestión de traducir el flujo de códigos de prefijo a
valores de bytes individuales, generalmente atravesando el árbol de Huffman
nodo por nodo a medida que se lee cada bit del flujo de entrada.
o Decodificar de 101 del primer ejemplo.


• Complejidad de codificación de Huffman
o La complejidad de tiempo para codificar cada carácter único en función de
su frecuencia es O(n log n).
o Extraer la frecuencia mínima de la cola de prioridad se realiza 2*(n-1) veces
y su complejidad es O(log n).
o Por tanto, la complejidad global es O(n log n).
CODIFICACIÓN ARITMÉTICA
• Historia
o Jorma Rissanen es considerado el fundador de la codificación aritmética,
desde 1976 hasta principios de los 80 desarrolló un importante trabajo en
esta rama de la teoría de la información.
o Toda la información de origen o una parte más larga de ella se representa
como un número racional.
o Si todas las probabilidades de símbolo se pueden representar en el
formulario, entonces la codificación aritmética y la codificación de Huffman
producen un flujo de datos idénticamente largo y son igualmente eficientes.
• Definición
o Es una forma de codificación entrópica utilizada en compresión sin pérdidas.
o Al ser una codificación entrópica maneja conceptos similares a la
codificación de Huffman, diferenciando los símbolos más frecuentes de los
menos frecuentes y utilizando menor cantidad de bits en total.
o Difiere de Huffman en que más que separar la entrada a símbolos
componentes y reemplazar cada uno con un código, la codificación
aritmética codifica el mensaje entero a un solo número, una fracción n dónde
[0.0 ≤ n < 1.0).
• Características
o La codificación aritmética no produce un código simple para cada símbolo,
produce un código para un mensaje entero.
o Cada símbolo añadido al mensaje progresivamente modifica el código de
salida.
o El efecto final de cada símbolo de la entrada sobre el código de salida puede
ser un número fraccionario de bits en lugar de un número entero.
o Cuanto más largo es el mensaje de entrada se necesitan más bits para el
número de salida.
o La salida de la codificación es un número entre 0 y 1
• ¿Cómo trabaja?
o A cada símbolo de entrada se le asigna una probabilidad.
o A cada símbolo de entrada se le asigna un rango en la “línea de
probabilidad”.
o Supongamos el siguiente mensaje: “Alan Turing”


▪ Pasos:
• Calcule la frecuencia (probabilidad) de cada carácter en el
string.
o
• 2. Se define el intervalo entre 0 y 1.

o
• Límites inferiores y superiores
o Inferior = AI + (AS - AI) * NI
o Superior = AI + (AS - AI) * NS
▪ Donde:
▪ AI = Antiguo Inferior
▪ AS = Antiguo Superior
▪ NI = Nuevo Inferior
▪ NS = Nuevo Superior
o
• Decodificación

You might also like