ARBOLES B. Lo que si es cierto es que la letra B no significa "binario", ya que:

Documentos relacionados
Estructuras de datos Árboles B

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

Algorítmica y Complejidad. Tema 3 Ordenación.

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

<tipo> Tipo de dato de los elementos del vector

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Problemas Seleccionados Resueltos: Máquinas de Turing

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Pasos para la creación de un gráfico en Excel 2007

UNIDAD 4. MODIFICAR TABLAS DE DATOS

PERIODO 3 HOJA DE CÁLCULO CONCEPTOS INTERMEDIOS OPERACIONES CON CELDAS, FILAS Y COLUMNAS EN EXCEL SELECCIONAR COPIAR MOVER BORRAR

Métodos de Ordenamiento. Unidad VI: Estructura de datos

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

Curso de Programación 1

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

Definición 1.1 Sea G = (V, A) un grafo no dirigido. G se denomina árbol si es conexo y no contiene ciclos.

Para poder comenzar a trabajar con Excel, es necesario considerar los siguientes términos:

EJERCICIO 26 DE EXCEL

GESTIÓN DEL CORREO. Buscar y marcar mensajes. Buscar mensajes: Revisar leídos y no leídos

7. Agrupamiento (clustering)

Introducción Supongamos un subconjunto de n elementos X = {e 1,,e n de un conjunto referencial Y, X Y. Dentro de Y se define una relación de orden tot

Notación Asintótica 2

Estructuras de datos. Estructuras de datos

Sistemas de Información II Tema 8. Estructuras de datos en memoria secundaria

MANUAL Y ACTIVIDADES. Edublogg.wordpress.com. Caeiro Fábregas - Pérez

Combinación de correspondencia en Microsoft Office Word 2003

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

MICROSOFT EXCEL 2007

9.1. Insertar filas en una hoja

Insertar y eliminar elementos

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Tablas Hash y árboles binarios

Creación y manejo de la base de datos y tablas

Factorización de polinomios FACTORIZACIÓN DE POLINOMIOS

Herramientas para investigadoras e investigadores sociales

CREACIÓN DE UN POSTER CON SCRIBUS.

Microsoft Windows Seven. Windows Seven. Elementos de la pantalla principal Iconos del escritorio o Equipo o Papelera de Reciclaje Barra de tareas

Búsqueda en e.e. --> reglas para elegir entre las ramas que con más probabilidad lleven a la solución.

TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN

Unidad Nº V Listas Enlazadas

RESUMEN PARA EL ESTUDIO

Compresión de Datos. Método de Huffman. Dpto. Informática

Ejercicio 7 Tablas de Datos y Búsqueda

EJERCICIOS DE ÁRBOLES BINARIOS

El Juego como Problema de Búsqueda

Algoritmos de Ordenación

Ministerio de Educación. Diseño de Presentaciones en la Enseñanza. Módulo 8: Sonidos

Complejidad computacional (Análisis de Algoritmos)

INSTITUCION EDUCATIVA COLEGIO TOLEDO PLATA PLAN DE ÁREA DE TECNOLOGIA E INFORMATICA GRADO 8º

FACTORIZACIÓN DE POLINOMIOS en Q (racionales)

Algoritmos de Strings. Héctor Navarro

GUIA Nº 3 MASCARAS GRAFICOS

Operaciones básicas con hojas de cálculo

Medidas de Tendencia Central

Conceptos básicos de bases de datos

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

INSTITUCIÓN MANUEL MARÍA SÁNCHEZ Tecnología e Informática Word

El segundo panel está compuesto por casillas, igual que si fuese una actividad con casillas y pueden contener textos, imágenes,sonidos...

Al entrar en Excel nos aparecerá la siguiente ventana:

Algoritmos y estructuras de datos


ESTADÍSTICA CON EXCEL

Árboles balanceados. Alonso Ramírez Manzanares Computación y Algoritmos Thursday, April 30, 15

Tipos de Celdas. Celda relativa. Celdas Mixtas. Clase 23 de septiembre de 2011 Ing.Esp. Gustavo Sánchez Rodriguez

Solución - práctico 10

Manual Word Plantillas y Formularios

Carpeta usuario. Descripción funcional de la Carpeta del Usuario de GestDoc

Análisis y Diseño de Algoritmos Tablas de Hash

Manual Gran Hotel. En principio, una estacionalidad no tiene el fin marcado, puede ser válida para siempre.

Unidad II: Análisis semántico

Cómo manejar el editor HTML de Moodle?

JUEGOS. Área de aplicación de los algoritmos heurísticos Juegos bi-personales: oponente hostil

Capítulo 6. Relaciones. Continuar

Binary Decision Diagrams

Problemas de transporte, asignación y trasbordo

Importación de Datos

GUÍA RÁPIDA GUÍAS DE OVINO. Gestión de guías Ovino vía Web

GESTIÓN DE ARCHIVOS. Presentado por: Alba Arosemena Alma Vargas Hospicia Mendoza Roselvira Fernández Ahías Arosemena

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Tema 5.- Recursividad

DISEÑO DE PRESENTACIONES EN LA ENSEÑANZA. Diapositivas de diagrama

CAPITULO II ORDENAMIENTO Y BUSQUEDA. Ivan Medrano Valencia

PREPARACION OLIMPIADA MATEMATICA CURSO

Unidad 5. Tablas. La celda que se encuentra en la fila 1 columna 2 tiene el siguiente contenido: 2º Celda

Ecuaciones de primer grado

Teoría de grafos y optimización en redes

UNIVERSIDAD AUTÓNOMA DE AGUASCALIENTES CENTRO DE CIENCIAS BÁSICAS DEPARTAMENTO DE SISTEMAS ELECTRÓNICOS OBJETIVO GENERAL MÉTODOS DIDÁCTICOS EVALUACIÓN

Todas las tareas que se realizan en un computador implican el uso de archivos y carpetas.

Sistema de Comunicaciones. Elaborado por: JOSE MIGUEL DIAZ- Departamento de Sistemas Ecocacao

Fundamentos de la programación

Clase 32: Árbol balanceado AVL

TIPOS DE CAMPOS Cada Sistema de Base de Datos posee tipos de campos que pueden ser similares o diferentes.

Uso de formateador. Procedimiento:

CUESTIONARIO APLICACIONES OFIMÁTICAS PARA HOJAS DE CÁLCULO

Técnicas de inteligencia artificial. Visión Artificial Visión 3D

COPIAR, CORTAR Y PEGAR. DESPLAZAMIENTO

Transcripción:

ARBOLES B El problema original comienza con la necesidad de mantener índices en almacenamiento externo para acceso a bases de datos, es decir, con el grave problema de la lentitud de estos dispositivos se pretende aprovechar la gran capacidad de almacenamiento para mantener una cantidad de información muy alta organizada de forma que el acceso a una clave sea lo más rápido posible. Lo que si es cierto es que la letra B no significa "binario", ya que: a. Los árboles-b nunca son binarios. b. Y tampoco es porque sean árboles de búsqueda, ya que en inglés se denominan B-trees. c. Tampoco es porque sean balanceados, ya que no suelen serlo. A menudo se usan árboles binarios de búsqueda para ordenar listas de valores, minimizando el número de lecturas, y evitando tener que ordenar dichas listas. Pero este tipo de árboles tienen varias desventajas: a. Es difícil construir un árbol binario de búsqueda perfectamente equilibrado. b. El número de consultas en el árbol no equilibrado es impredecible. c. Y además el número de consultas aumenta rápidamente con el número de registros a ordenar. Para evitar estos inconvenientes se usan árboles-b, sobre todo cuando se ordenan archivos, donde se ha convertido en el sistema de indexación más utilizado. DEFINICIÓN. Los B-árboles son árboles cuyos nodos pueden tener un número múltiple de hijos tal como muestra el esquema de uno de ellos en la figura 1.

Como se puede observar en la figura 1, un B-árbol se dice que es de orden m si sus nodos pueden contener hasta un máximo de m hijos. En la literatura también aparece que si un árbol es de orden m significa que el mínimo número de hijos que puede tener es m + 1 (m claves). El conjunto de claves que se sitúan en un nodo cumplen la condición: De forma que los elementos que cuelgan del primer hijo tienen una clave con valor menor que K 1, los que cuelgan del segundo tienen una clave con valor mayor que K 1 y menor que K 2, etc. Obviamente, los que cuelgan del último hijo tienen una clave con valor mayor que la última clave (hay que tener en cuenta que el nodo puede tener menos de m hijos y por consiguiente menos de m-1 claves). Ejemplo de un árbol-b de ORDEN 4 y de profundidad 2. Las características que debe cumplir un árbol-b son: Un parámetro muy importante en los árboles-b es el ORDEN (m). El orden de un árbol-b es el número máximo de ramas que pueden partir de un nodo. Si n es el número de ramas que parten de un nodo de un árbol-b, el nodo contendrá n-1 claves. El árbol está ordenado. Todos los nodos terminales, (nodos hoja), están en el mismo nivel. Todos los nodos intermedios, excepto el raíz, deben tener entre m/2 y m ramas no nulas. El máximo número de claves por nodo es m-1. El mínimo número de claves por nodo es (m/2)-1. La profundidad (h) es el número máximo de consultas para encontrar una clave. BÚSQUEDA EN UN B-ÁRBOL. Localizar una clave en un B-árbol es una operación simple pues consiste en situarse en el nodo raíz del árbol, si la clave se encuentra ahí hemos terminado y si no es así seleccionamos de entre los hijos el que se encuentra entre dos valores de clave que son menor y mayor que la buscada respectivamente y repetimos el proceso hasta que la encontremos. En caso de

que se llegue a una hoja y no podamos proseguir la búsqueda la clave no se encuentra en el árbol. En definitiva, los pasos a seguir son los siguientes: 1. Seleccionar como nodo actual la raíz del árbol. 2. Comprobar si la clave se encuentra en el nodo actual: 1. Si la clave está, fin. 2. Si la clave no está: Si estamos en una hoja, no se encuentra la clave. Fin. Si no estamos en una hoja, hacer nodo actual igual al hijo que corresponde según el valor de la clave a buscar y los valores de las claves del nodo actual (i buscamos la clave K en un nodo con n claves: el hijo izquierdo si K < K 1, el hijo derecho si K > K n y el hijo i-ésimo si K i < K < K i+1 ) y volver al segundo paso. INSERCIÓN EN UN B-ÁRBOL. Para insertar una nueva clave usaremos un algoritmo que consiste en dos pasos recursivos: 1. Buscamos la hoja donde debiéramos encontrar el valor de la clave de una forma totalmente paralela a la búsqueda de ésta tal como comentábamos en la sección anterior (si en esta búsqueda encontramos en algún lugar del árbol la clave a insertar, el algoritmo no debe hacer nada más). Si la clave no se encuentra en el árbol habremos llegado a una hoja que es justamente el lugar donde debemos realizar esa inserción. 2. Situados en un nodo donde realizar la inserción si no está completo, es decir, si el número de claves que existen es menor que el orden menos 1 del árbol, el elemento puede ser insertado y el algoritmo termina. En caso de que el nodo esté completo insertamos la clave en su posición y puesto que no caben en un único nodo dividimos en dos nuevos nodos conteniendo cada uno de ellos la mitad de las claves y tomando una de éstas para insertarla en el padre (se usará la mediana). Si el padre está también completo, habrá que repetir el proceso hasta llegar a la raíz. En caso de que la raíz esté completa, la altura del árbol aumenta en uno creando un nuevo nodo raíz con una única clave. En la figura 2 podemos observar el efecto de insertar una nueva clave en un nodo que está lleno.

BORRADO EN UN B-ÁRBOL. La idea para realizar el borrado de una clave es similar a la inserción teniendo en cuenta que ahora, en lugar de divisiones, realizamos uniones. Existe un problema añadido, las claves a borrar pueden aparecer en cualquier lugar del árbol y por consiguiente no coincide con el caso de la inserción en la que siempre comenzamos desde una hoja y propagamos hacia arriba. La solución a esto es inmediata pues cuando borramos una clave que está en un nodo interior, lo primero que realizamos es un intercambio de este valor con el

inmediato sucesor en el árbol, es decir, el hijo más a la izquierda del hijo derecho de esa clave. Las operaciones a realizar para poder llevar a cabo el borrado son por tanto: 1. Redistribución: la utilizaremos en el caso en que al borrar una clave el nodo se queda con un número menor que el mínimo y uno de los hermanos adyacentes tiene al menos uno más que ese mínimo, es decir, redistribuyendo podemos solucionar el problema. 2. Unión: la utilizaremos en el caso de que no sea posible la redistribución y por tanto sólo será posible unir los nodos junto con la clave que los separa y se encuentra en el padre. En definitiva, el algoritmo nos queda como sigue: 1. Localizar el nodo donde se encuentra la clave.. 2. Si el nodo localizado no es una hoja, intercambiar el valor de la clave localizada con el valor de la clave más a la izquierda del hijo a la derecha. En definitiva colocar la clave a borrar en una hoja. Hacemos nodo actual igual a esa hoja. 3. Borrar la clave. 4. Si el nodo actual contiene al menos el mínimo de claves como para seguir siendo un B-árbol, fin. 5. Si el nodo actual tiene un número menor que el mínimo: 1. Si un hermano tiene más del mínimo de claves, redistribución y fin. 2. Si ninguno de los hermanos tiene más del mínimo, unión de dos nodos junto con la clave del padre y vuelta al paso 4 para propagar el borrado de dicha clave (ahora en el padre). PRIMITIVAS DE UN B-ÁRBOL. AB Crear0(int ne) AB raiz; raiz = (AB)malloc(sizeof(struct AB)); if (raiz == NULL) error("memoria Insuficiente."); raiz->n_etiquetas = ne; for (int i=1; i<=(ne+1); i++) raiz->hijos[i] = NULO; return(raiz); AB Crear(int ne, int eti[]) AB raiz; raiz = (AB)malloc(sizeof(struct AB)); if (raiz == NULL) error("memoria Insuficiente.");

raiz->n_etiquetas = ne; for (int i=1; i<=(ne+1); i++) raiz->hijos[i] = NULO; for (int i=1; i<=lenght(eti[]); i++) raiz->etiquetas[i] = eti[i]; return(raiz); int Buscar(int eti, int *nod, int *pos) int i,l; l = lenght(nod->etiquetas[]); for(i=0;inod->etiquetas[i];i++) ; *pos = i; if(*posetiquetas[*pos]) return 1; else; return 0; int BuscarNodo(int eti, int *nod, int *pos) int i=0, enc; enc = Buscar(eti,&nod,&pos); if (enc == 1) return 1; do if (etietiquetas[i] && nod->hijos[i]!=nulo) enc = BuscarNodo(eti,&nod->hijos[i],&pos); else if ((etietiquetas[i+1] nod->etiquetas[i+1]==-1)&&nod- >hijos[i+1]!=-1) enc = BuscarNodo(eti,&nod->hijos[i+1],&pos); i++; while (ietiquetas[]) && enc==0); return (enc);