Análisis en el caso peor El plan:

Documentos relacionados
Técnicas Avanzadas de Programación

Análisis amortizado El plan:

Árboles B y B ) 20. Algoritmos y Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 63

Algoritmos y Programación II Curso 2006

Análisis y Complejidad de Algoritmos. Arboles Rojinegros. Arturo Díaz Pérez

Estructura de Datos Unidad 6: ARBOLES

Definición recursiva de los árboles

ÁRBOLES BINARIOS DE BÚSQUEDA

4.5 Árboles AVL (Adelson-Velskii y Landis) Inserción y extracción en árboles AVL

Análisis amortizado El plan:

Árboles n-arios de búsqueda. Lección 16

ESTRUCTURA DE DATOS. ABB Arboles de Búsqueda Binaria

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Diseño de Conjuntos y Diccionarios

Estructura de Datos Árboles Árboles 2-3

Tema 10: Árbol binario de búsqueda

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

Outline Desbalance Árboles Red-Black Rotaciones Inserción en Arboles Red-Black. Roberto Carlos Abreu Díaz. November 5, 2009

Un árbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

Estructuras de Datos y Algoritmos

Análisis amortizado El plan:

ESTRUCTURAS DE DATOS Y ALGORITMOS

Árboles binarios de búsqueda ( BST )

Estructuras de datos: Árboles binarios de

Árboles AVL. Lección 14

Eliminación en un ABB

EDA. Tema 8 Colas de Prioridad: Heaps

Estructura de datos y algoritmos. Tema V TDA DINÁMICOS NO LINEALES: Árboles: árboles binarios

Árboles Binarios Ordenados Árboles AVL

Estructuras de Datos Clase 20 Árboles de búsqueda

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Estructuras de Datos

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Árboles RN Montículos

Estructuras de datos y algoritmos

Francisco J. Hernández López

Estructuras de Datos II

TIPOS DE ARBOLES. Integrantes: Liliana Xitlali Martinez Lovera Octavio Catarino Aguilar

Definición: NODO Un nodo es un punto de intersección o unión de varios elementos que confluyen en el mismo lugar.

Tema 14: ÁRBOLES Algoritmos y estructuras de datos I - Tema 14 1

Introducción a los árboles. Lección 11

Árboles Binarios de Búsqueda. Lección 13

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

3.6. Árboles B DEFINICIONES

El TAD Árbol. El TAD Árbol

Estructuras de datos Árboles B

Estructura de datos y de la información Boletín de problemas - Tema 10

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

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

12/08/2017 AVL. Especificación sobre árboles AVL. AVL: rotaciones

Algoritmos y estructuras de datos

Programación TADs Arboles

Capítulo 8. Árboles. Continuar

Ampliación de Estructuras de Datos

PRÁCTICA No. 9 RECORRIDOS EN ÁRBOLES BINARIOS

Arboles Binarios de Búsqueda

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Árboles Binarios Ordenados Árboles AVL

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Árboles n-arios. Lección 15

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 3. Estructuras de Almacenamiento. Básicas. Definición y Manejo.

Tema 4. Estructuras no lineales de datos: árboles

Arboles Binarios de Búsqueda en C++

Tema 10. Árboles. José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía

3. ÁRBOLES. Definición. Un árbol es un conjunto finito de nodos R, tal que:

Introducción a la biología computacional. El plan: Algoritmos de reconocimiento de patrones:

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

Programación Estructuras Arborescentes

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Estructuras de datos: Árboles binarios de

Colas deprioridad y heaps

Estructura de Datos. Estructuras de Datos no lineales : Árboles

Recorridos de grafos

Clase 32: Árbol balanceado AVL

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB)

Tema 6: Estructuras de datos recursivas

Definición de árbol. Árboles

Árboles y esquemas algorítmicos. Tema III

Estructuras de Datos. 8.6 Árboles B. Supongamos que los nodos de un árbol deben ser guardados en un medio de almacenamiento secundario (disco).

Introducción a Árboles Árboles Binarios

Á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.

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

ARBOLES ARBOLES COMPUTACIONALES MATEMATICAS DISCRETAS II

Instituto de Computación. Facultad de Ingeniería. Universidad de la República Examen de Programación 2 03 de Agosto de 2006 Generalidades:

Definición 1: Un grafo G es una terna ordenada (V(G), E(G), Ψ

Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas

Capítulo 4: Grafos Clase 4: Árboles

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

Estructuras de Datos Clase 14 Árboles binarios de búsqueda

1. Árbol Binario de Búsqueda: Las clases Java NodoABB y ABB. 1. Definición y representación en Java 2. Operaciones y su coste estimado

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

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

Propiedades de lenguajes independientes del contexto

3. COLA DE PRIORIDAD DEFINICION (I)

Estructuras de datos Listas y árboles

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

Fibonacci Heaps. Fabiola Di Bartolo. Universidad Simón Boĺıvar

Transcripción:

Análisis en el caso peor El plan: Repaso de conceptos Montículos y el problema de ordenación Árboles rojinegros Técnicas Avanzadas de Programación - Javier Campos 39

TAD Diccionario Tipo Abstracto de Datos (TAD): Definición de un tipo de datos independientemente de implementaciones concretas Especificar el conjunto de valores posibles y el conjunto de operaciones que se utilizan para manipular esos valores Definición formal (especificación algebraica) TAD Diccionario: Un TAD que almacena elementos, o valores. A un valor se accede por su clave. Operaciones básicas: crear, insertar, buscar y borrar. Técnicas Avanzadas de Programación - Javier Campos 40

Para qué sirven? Árboles rojinegros Son una clase de árboles binarios de búsqueda equilibrados (altura máxima logarítmica en el número de nodos) para garantizar coste O(log n) de las operaciones básicas del TAD diccionario. Recordar: - Árboles binarios de búsqueda (abb) - AVL (abb s equilibrados) Técnicas Avanzadas de Programación - Javier Campos 41

Definición: Árboles rojinegros Árbol binario de búsqueda con un bit adicional en cada nodo, su color, que puede ser rojo o negro. Ciertas condiciones sobre los colores de los nodos garantizan que la profundidad de ninguna hoja es más del doble que la de ninguna otra (el árbol está algo equilibrado ). Cada nodo es un registro con: color (rojo o negro), clave (la clave de búsqueda), y tres punteros a los hijos (i, d) y al padre (p). Si los punteros son NIL, imaginaremos que son punteros a nodos externos (hojas). Técnicas Avanzadas de Programación - Javier Campos 42

Condiciones rojinegras: Árboles rojinegros RN 1 - Cada nodo es rojo o negro. RN 2 - Toda hoja (NIL) es negra. RN 3 - Si un nodo es rojo, sus dos hijos son negros. (no puede haber dos rojos consecutivos en un camino) RN 4 - Todo camino desde un nodo a cualquier hoja descendente contiene el mismo número de nodos negros. (cada nodo "real" tiene dos hijos) Terminología: Altura negra de un nodo x, an(x): es el número de nodos negros desde x (sin incluir x) hasta cualquier hoja descendente de x. Altura negra de un árbol: la altura negra de su raíz. Técnicas Avanzadas de Programación - Javier Campos 43

Árboles rojinegros 3 26 3 17 2 41 2 14 2 21 2 30 1 47 2 10 1 16 1 19 1 23 1 28 1 38 1 7 1 12 1 15 NIL NIL 1 20 NIL NIL NIL NIL 1 35 1 39 NIL NIL 1 3 NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL Técnicas Avanzadas de Programación - Javier Campos 44

Árboles rojinegros Lema: Todo árbol rojinegro con n nodos internos tiene una altura menor o igual que 2 log(n+1). Demostración: El subárbol con raíz x contiene al menos 2 an(x) -1 nodos internos. Por inducción en la altura de x: Caso altura(x)=0: x debe ser una hoja (NIL), y el subárbol con raíz x contiene en efecto 2 an(x) -1 = 2 0-1 = 0 nodos internos Paso de inducción: considerar un nodo interno x con dos hijos; sus hijos tienen altura negra an(x) ó an(x)-1, dependiendo de si su color es rojo o negro, respectivamente. Por hipótesis de inducción, los dos hijos de x tienen al menos 2 an(x)-1-1 nodos internos. Por tanto el subárbol con raíz x tiene al menos (2 an(x)-1-1)+(2 an(x)-1-1)+1= 2 an(x) -1 nodos internos. Técnicas Avanzadas de Programación - Javier Campos 45

Demostración (cont.): Árboles rojinegros [El subárbol con raíz x contiene al menos 2 an(x) -1 nodos internos (ya demostrado).] Sea h la altura del árbol. Por definición (RN 3 : si un nodo es rojo, sus dos hijos son negros), al menos la mitad de los nodos de cualquier camino de la raíz a una hoja (sin incluir la raíz) deben ser negros. Por tanto, la altura negra de la raíz debe ser al menos h/2, luego: n 2 h/2-1 log(n+1) h/2 h 2 log(n+1). Técnicas Avanzadas de Programación - Javier Campos 46

Árboles rojinegros Consecuencias del lema: Las operaciones de búsqueda pueden implementarse en tiempo O(log n) para árboles rojinegros con n nodos. Y la inserción y el borrado? Veremos a continuación que también pueden realizarse en tiempo O(log n) sin que el árbol deje de ser rojinegro. Técnicas Avanzadas de Programación - Javier Campos 47

Rotaciones: Árboles rojinegros Cambios locales de la estructura de un árbol de búsqueda que lo mantienen con los mismos datos y preservando las características de árbol de búsqueda. rotación_izquierda(x) 7 7 4 11 x 4 18 x 3 6 9 18 y 3 6 11 y 19 2 14 19 2 9 14 22 12 17 22 20 12 17 20 Técnicas Avanzadas de Programación - Javier Campos 48

Árboles rojinegros algoritmo rota_i(a,x) principio y:=d(x); d(x):=i(y); si i(y)nil ent p(i(y)):=x fsi; p(y):=p(x); si p(x)=nil ent raíz(a):=y sino si x=i(p(x)) ent i(p(x)):=y 7 sino 4 11 x d(p(x)):=y fsi 3 6 9 18 fsi; 2 i(y):=x; p(x):=y fin 14 19 12 17 22 rotación_izquierda(x) Técnicas Avanzadas de Programación - Javier Campos 49 y 20 La rotación derecha es simétrica. 2 7 4 18 x 3 6 11 9 14 y 19 12 17 20 22

Inserción: Árboles rojinegros En primer lugar se realiza una inserción en el árbol de búsqueda (sin preocuparse del color de los nodos). Si tras la inserción se viola alguna de las condiciones RN 1-4, hay que modificar la estructura, usando rotaciones como la anterior y cambiando los colores de los nodos. Hipótesis que haremos: la raíz es siempre negra (la implementación que sigue a continuación garantiza que la raíz sigue siendo negra tras la inserción). Técnicas Avanzadas de Programación - Javier Campos 50

algoritmo inserta(a,x) principio Arboles rojinegros 1 inserta_abb(a,x); 2 color(x):=rojo; 3 mq xraíz(a) and color(p(x))=rojo hacer 4 si p(x)=i(p(p(x))) ent 5 y:=d(p(p(x))); 6 si color(y)=rojo ent 7 color(p(x)):=negro; 8 color(y):=negro; Caso 1 9 color(p(p(x))):=rojo; 10 x:=p(p(x)) 11 sino Caso 2 12 si x=d(p(x)) ent x:=p(x); rota_i(a,x) fsi; 13 color(p(x)):=negro; 14 color(p(p(x))):=rojo; Caso 3 15 rota_d(a,p(p(x))) 16 fsi 17 sino [igual que arriba, intercambiando i/d] 18 fsi Casos 4, 5 y 6 19 fmq; 20 color(raíz(a)):=negro fin Inserción 1º) en qué se rompe la def. de árbol r-n en las líneas 1-2? 2º) cuál es el objeto del bucle 3-19? 3º) qué se hace en cada uno de los casos? Técnicas Avanzadas de Programación - Javier Campos 51

algoritmo inserta(a,x) principio Arboles rojinegros 1 inserta_abb(a,x); 2 color(x):=rojo; 3 mq xraíz(a) and color(p(x))=rojo hacer 4 si p(x)=i(p(p(x))) ent 5 y:=d(p(p(x))); 6 si color(y)=rojo ent 7 color(p(x)):=negro; 8 color(y):=negro; 9 color(p(p(x))):=rojo; 10 x:=p(p(x)) 11 sino 12 si x=d(p(x)) ent x:=p(x); rota_i(a,x) fsi; 13 color(p(x)):=negro; 14 color(p(p(x))):=rojo; 15 rota_d(a,p(p(x))) 16 fsi 17 sino [igual que arriba, intercambiando i/d] 18 fsi 19 fmq; 20 color(raíz(a)):=negro fin Inserción 1º) en qué se rompe la def. de árbol r-n en las líneas 1-2? RN 1 : Cada nodo es rojo o negro. RN 2 : Toda hoja (NIL) es negra. RN 3 : Si un nodo es rojo, sus dos hijos son negros. RN 4 : Todo camino desde un nodo a cualquier hoja descendente contiene el mismo número de nodos negros. Técnicas Avanzadas de Programación - Javier Campos 52

algoritmo inserta(a,x) principio Arboles rojinegros 1 inserta_abb(a,x); 2 color(x):=rojo; 3 mq xraíz(a) and color(p(x))=rojo hacer 4 si p(x)=i(p(p(x))) ent 5 y:=d(p(p(x))); 6 si color(y)=rojo ent 7 color(p(x)):=negro; 8 color(y):=negro; 9 color(p(p(x))):=rojo; 10 x:=p(p(x)) 11 sino 12 si x=d(p(x)) ent x:=p(x); rota_i(a,x) fsi; 13 color(p(x)):=negro; 14 color(p(p(x))):=rojo; 15 rota_d(a,p(p(x))) 16 fsi 17 sino [igual que arriba, intercambiando i/d] 18 fsi 19 fmq; 20 color(raíz(a)):=negro fin Inserción 2º) cuál es el objeto del bucle 3-19? Resolver el problema anterior, como en el caso de la figura (inserción de x rojo, como hijo de otro rojo), haciendo que el color rojo suba hacia la raíz. 11 2 14 1 7 15 Técnicas Avanzadas de Programación - Javier Campos 53 4 5 8 x

algoritmo inserta(a,x) principio Arboles rojinegros 1 inserta_abb(a,x); 2 color(x):=rojo; 3 mq xraíz(a) and color(p(x))=rojo hacer 4 si p(x)=i(p(p(x))) ent 5 y:=d(p(p(x))); 6 si color(y)=rojo ent 7 color(p(x)):=negro; 8 color(y):=negro; Caso 1 9 color(p(p(x))):=rojo; 10 x:=p(p(x)) 11 sino 12 si x=d(p(x)) ent x:=p(x); rota_i(a,x) fsi; 13 color(p(x)):=negro; 14 color(p(p(x))):=rojo; 15 rota_d(a,p(p(x))) 16 fsi 17 sino [igual que arriba, intercambiando i/d] 18 fsi 19 fmq; 20 color(raíz(a)):=negro fin Inserción 3º) qué se hace en cada uno de los casos? Técnicas Avanzadas de Programación - Javier Campos 54 x 11 2 14 1 7 15 4 5 8 11 y 2 14 Caso 1 1 7 x 15 4 5 8

algoritmo inserta(a,x) principio Arboles rojinegros 1 inserta_abb(a,x); 2 color(x):=rojo; 3 mq xraíz(a) and color(p(x))=rojo hacer 4 si p(x)=i(p(p(x))) ent 5 y:=d(p(p(x))); 6 si color(y)=rojo ent 7 color(p(x)):=negro; 8 color(y):=negro; 9 color(p(p(x))):=rojo; 10 x:=p(p(x)) Caso 2 11 sino 12 si x=d(p(x)) ent x:=p(x); rota_i(a,x) fsi; 13 color(p(x)):=negro; 14 color(p(p(x))):=rojo; 15 rota_d(a,p(p(x))) 16 fsi 17 sino [igual que arriba, intercambiando i/d] 18 fsi 19 fmq; 20 color(raíz(a)):=negro 1 fin Inserción 1 7 x 15 Técnicas Avanzadas de Programación - Javier Campos 55 x 4 11 2 14 5 8 11 7 14 y Caso 2 2 8 15 4 5

algoritmo inserta(a,x) principio Arboles rojinegros 1 inserta_abb(a,x); 2 color(x):=rojo; 3 mq xraíz(a) and color(p(x))=rojo hacer 4 si p(x)=i(p(p(x))) ent 5 y:=d(p(p(x))); 6 si color(y)=rojo ent 7 color(p(x)):=negro; 8 color(y):=negro; 9 color(p(p(x))):=rojo; 1 10 x:=p(p(x)) 11 sino 12 si x=d(p(x)) ent x:=p(x); rota_i(a,x) fsi; 13 color(p(x)):=negro; 14 color(p(p(x))):=rojo; 15 rota_d(a,p(p(x))) 16 fsi 17 sino [igual que arriba, intercambiando i/d] 18 fsi 19 fmq; 20 color(raíz(a)):=negro fin Caso 3 7 Inserción Caso 3 Técnicas Avanzadas de Programación - Javier Campos 56 x 11 7 14 y 2 8 15 4 5 2 11 1 5 8 14 4 15

Coste de la inserción: Árboles rojinegros La altura de un árbol r-n con n nodos es O(log n), luego la inserción_abb es O(log n). El bucle sólo se repite si se cumple el caso 1, y en ese caso el puntero x sube en el árbol. Por tanto el número máximo de repeticiones del bucle es O(log n). Notar, además, que nunca se hacen más de dos rotaciones (el bucle termina si se ejecuta el caso 2 o el 3). Técnicas Avanzadas de Programación - Javier Campos 57

Borrado: Árboles rojinegros Veremos que también puede hacerse con coste en caso peor en O(log n). Para simplificar el algoritmo, usaremos representación de centinela para el NIL: A A nil negro casa nil nil negro casa rojo cara nil nil rojo cara negro nil nil nil negro nil nil nil negro nil nil nil Técnicas Avanzadas de Programación - Javier Campos 58

Árboles rojinegros Borrado: similar al borrado de un abb algoritmo borra(a,z) --z es el puntero al nodo a borrar principio 1 si clave(i(z))= nil or clave(d(z))= nil ent 2 y:=z 3 sino 4 y:=sucesor_abb(z) --el sucesor en inorden de z 5 fsi; 6 si clave(i(y)) nil ent x:=i(y) sino x:=d(y) fsi; 7 p(x):=p(y); 8 si p(y)= nil ent 9 raíz(a):=x 10 sino 11 si y=i(p(y)) ent i(p(y)):=x sino d(p(y)):=x fsi 12 fsi; 13 si yz ent clave(z):=clave(y) fsi; 14 si color(y)=negro ent fija_borrado(a,x) fsi fin Técnicas Avanzadas de Programación - Javier Campos 59

Árboles rojinegros Borrado: descripción del algoritmo paso a paso algoritmo borra(a,z) --z es el puntero al nodo a borrar principio 1 si clave(i(z))= nil or clave(d(z))= nil ent 2 y:=z 3 sino 4 y:=sucesor_abb(z) --el sucesor en inorden de z 5 fsi;... Líneas 1-5: selección del nodo y a colocar en lugar de z. El nodo y es: el mismo nodo z (si z tiene como máximo un hijo), o el sucesor de z (si z tiene dos hijos) Técnicas Avanzadas de Programación - Javier Campos 60

Árboles rojinegros Borrado: descripción del algoritmo paso a paso... 6 si clave(i(y)) nil ent x:=i(y) sino x:=d(y) fsi; 7 p(x):=p(y); 8 si p(y)= nil ent 9 raíz(a):=x 10 sino 11 si y=i(p(y)) ent i(p(y)):=x sino d(p(y)):=x fsi 12 fsi; 13 si yz ent clave(z):=clave(y) fsi;... Línea 6: x es el hijo de y, o es NIL si y no tiene hijos. Líneas 7-12: se realiza el empalme con y, modificando punteros en p(y) y en x. Línea 13: si el sucesor de z ha sido el nodo empalmado, se mueve el contenido de y a z, borrando el contenido anterior (en el algoritmo sólo se copia la clave, pero si y tuviese otros campos de información también se copiarían). Técnicas Avanzadas de Programación - Javier Campos 61

Árboles rojinegros Borrado: descripción del algoritmo paso a paso... 14 si color(y)=negro ent fija_borrado(a,x) fsi fin Línea 14: si y es negro, se llama a fija_borrado, que cambia los colores y realiza rotaciones para restaurar las propiedades RN 1-4 de árbol rojinegro. Si y es rojo las propiedades RN 1-4 se mantienen (no se han cambiado las alturas negras del árbol y no se han hecho adyacentes dos nodos rojos). El nodo x pasado como argumento era el hijo único de y antes de que y fuese empalmado o el centinela del NIL si y no tenía hijos. Técnicas Avanzadas de Programación - Javier Campos 62

Árboles rojinegros Borrado: fijado de propiedades RN 1-4 Problema: Si el nodo y del algoritmo anterior era negro, al borrarlo, todo camino que pase por él tiene un nodo negro menos, por tanto no se cumple RN 4 todo camino desde un nodo a cualquier hoja descendente contiene el mismo número de nodos negros para ningún antecesor de y Solución: interpretar que el nodo x tiene un color negro extra, así se cumple RN 4, es decir, al borrar el nodo y empujamos su negrura hacia su hijo Nuevo problema: ahora el nodo x puede ser dos veces negro, y por tanto no verifica RN 1 Solución: aplicar el algoritmo fija_borrado para restaurar RN 1 Técnicas Avanzadas de Programación - Javier Campos 63

Árboles rojinegros Borrado: fijado de propiedades rojinegras algoritmo fija_borrado(a,x) principio 1 mq xraíz(a) and color(x)=negro hacer 2....... 28 fmq; 29 color(x):=negro fin Objetivo del bucle: mover el negro extra hacia arriba hasta que 1) x es rojo, y se acaba el problema, o 2) x es la raíz, y el negro extra se borra (él solito) En el interior del bucle, x es siempre un nodo negro distinto de la raíz y que tiene un negro extra. Técnicas Avanzadas de Programación - Javier Campos 64

Árboles rojinegros Interior del bucle:... 2 si x=i(p(x)) ent 3 w:=d(p(x)); 4 si color(w)=rojo ent 5 color(w):=negro; 6 color(p(x)):=rojo; Caso 1 7 rota_i(a,p(x)); 8 w:=d(p(x)) 9 fsi; {objetivo: conseguir... un hermano negro para x} x es hijo izquierdo w es el hermano de x x es negro doble clave(w) nil (si no, el nº de negros desde p(x) a la hoja w sería menor que desde p(x) a x) w debe tener un hijo negro se cambia el color de w y p(x) y se hace rota_i con p(x) x el nuevo hermano de x, uno de los hijos de w, es negro, y se pasa a los otros casos (2-4) A Técnicas Avanzadas de Programación - Javier Campos 65 B C D E w Caso 1 B D E x A C nuevo w

Árboles rojinegros Interior del bucle (cont.):... 10 si color(i(w))=negro and color(d(w))=negro ent 11 color(w):=rojo; 12 x:=p(x) 13 sino... Caso 2 El nodo w (hermano de x) y los dos hijos de w son negros. Se quita un negro de x y otro de w (x queda con un solo negro y w rojo). Se añade un negro a p(x). Se repite el bucle con x:=p(x). Si se había entrado a este caso desde el caso 1, el color del nuevo x es rojo y el bucle termina. x A B Caso 2 Técnicas Avanzadas de Programación - Javier Campos 66 c C D E w A nuevo x B c C D E

Árboles rojinegros Interior del bucle (cont.):... 14 si color(d(w))=negro ent 15 color(i(w)):=negro; 16 color(w):=rojo; 17 rota_d(a,w); 18 w:=d(p(x)) 19 fsi;... Caso 3 w y d(w) son negros i(w) es rojo Se cambia el color de x A w y de i(w) y se hace rota_d sobre w. El nuevo hermano w de x es ahora negro con hijo derecho rojo, y ese es el caso 4. B c C Caso 3 Técnicas Avanzadas de Programación - Javier Campos 67 D E w x A B c C nuevo w D E

Árboles rojinegros Interior del bucle (cont.):... 20 color(w):=color(p(x)); 21 color(p(x)):=negro; 22 color(d(w)):=negro; 23 rota_i(a,p(x)); 24 x:=raíz(a) 25 fsi Caso 4 26 sino [igual que 3-25, intercambiando i/d] 27 fsi... w es negro y d(w) es rojo Se cambian algunos colores y se hace rota_i sobre p(x) y así se borra el negro extra de x. x A Caso 4 Técnicas Avanzadas de Programación - Javier Campos 68 B c c C D E w A B C D c c E

Árboles rojinegros Coste del borrado: El coste del algoritmo a excepción de la llamada a fija_borrado es O(log n), porque esa es la altura del árbol. En fija_borrado, los casos 1, 3 y 4 terminan tras un nº constante de cambios de color y como máximo tres rotaciones. El caso 2 es el único que puede hacer repetir el bucle mq, y en ese caso el nodo x se mueve hacia arriba en el árbol como máximo O(log n) veces y sin hacer rotaciones. Por tanto, fija_borrado, y también el borrado completo, son O(log n) y hacen como mucho tres rotaciones. Técnicas Avanzadas de Programación - Javier Campos 69