Árboles rn (rojo-negro) · Árboles rn propiedades a garantizar: 1. cada nodo es rojo o negro. 2....

Post on 03-Jul-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Árboles RN(Rojo-Negro)

(Red-Black Trees)

Árboles RN

● Árboles Rojo-Negro (Red-Black trees):

Inicialmente conocido como Árbol-B binario simétrico.

Guibas, Leo J., and Robert Sedgewick. "A dichromatic framework for balanced trees." 19th Annual Symposium on Foundations of Computer Science. IEEE, 1978.

Árboles RN

● Árboles Rojo-Negro (Red-Black trees):

Como los árboles AVL, garantiza que las operaciones de búsqueda, inserción y eliminación en un árbol binario ordenado toman en el peor caso O(log n).

Requiere que el nodo del árbol incluya una propiedad adicional de color (rojo o negro).

Árboles RN

● Propiedades a garantizar:

1. Cada nodo es rojo o negro.

2. La raíz y las hojas (nulos) son siempre negras.

3. Si un nodo es rojo, entonces su padre es negro.

4. Cada nodo rojo debe tener dos hijos negros.

5. Todas las rutas desde un nodo x hacia un descendiente hoja tienen el mismo número de nodos negros (altura-negra(x)).

Árboles RN

NULL

NULL NULL

NULL NULL NULL NULL

NULL NULL NULL NULL

Árboles RN

● Inserción:

Se realiza como en un árbol binario ordenado.

¿Cuál debe ser el color del nuevo nodo?– Negro

Árboles RN

● Inserción:

Se realiza como en un árbol binario ordenado.

¿Cuál debe ser el color del nuevo nodo?– Negro, causa una diferencia en el número de

nodos negros en una ruta, incumpliendo la propiedad 5, y es una situación más difícil de corregir.

Árboles RN

● Inserción:

Se realiza como en un árbol binario ordenado.

¿Cuál debe ser el color del nuevo nodo?– Entonces siempre lo pintaremos rojo.

Árboles RN

● Inserción:

Se realiza como en un árbol binario ordenado.

¿Cuál debe ser el color del nuevo nodo?– Entonces siempre lo pintaremos rojo.

¿Y si el padre del nodo es rojo?– Se incumple la propiedad 3, pero se puede arreglar

con rotaciones o cambiando el color de los ancestros.

Árboles RN

● Inserción:

Caso 1: el nodo insertado es la raíz del árbol (primera inserción en un árbol vacío).

- en este caso, el nodo se repinta a negro, para cumplir la propiedad 2.

11

NULL NULL

11

NULL NULL

Árboles RN

● Inserción:

Caso 2: el padre del nodo insertado es negro.

- en este caso, el árbol es válido sin ninguna modificación.

11

NULL2

NULL NULL

11

2

NULL NULL

14

NULL NULL

Árboles RN

● Inserción:

Caso 3: el padre del nodo insertado es rojo, se analizan varias situaciones:– Situación 1: Que el tío del nodo (hermano del

padre) sea rojo.

En ese caso, se cambia el color del padre, del tío y del abuelo.

Árboles RN

7

5 8

1

2

11

14

15

Insertar 4

Árboles RN

7

5 8

1

2

11

14

15

1

2

11

14

157

4

5 8

nuevo

Insertar 4

Árboles RN

7

4

5 8

1

2

11

14

15

nuevo

tío

Árboles RN

7

4

5 8

7

4

5 8

1

2

11

14

15

1

2

11

14

15nuevo

tío

Árboles RN

7

4

5 8

7

4

5 8

1

2

11

14

15

1

2

11

14

15nuevo

tío

problema!

Árboles RN

● Inserción

Caso 3: el padre del nodo insertado es rojo, se analizan varias situaciones:– Situación 2: Que el tío del nodo (hermano del

padre) sea negro y el nodo sea el hijo derecho del padre.

En ese caso, se aplica una rotación a izquierda sobre el nodo.

Árboles RN

1

2

11

14

157

4

5 8

hijoderecho

tío

Árboles RN

7

4

5

8

1

2

11

14

15 11

14

15

7

4

5 8

1

2

hijoderecho

tío

Árboles RN

7

4

5

8

1

2

11

14

15 11

14

15

7

4

5 8

1

2

hijoderecho

tío

problema!

Árboles RN

● Inserción

Caso 3: el padre del nodo insertado es rojo, se analizan varias situaciones:– Situación 3: Que el tío del nodo (hermano del

padre) sea negro y el nodo sea el hijo izquierdo del padre.

En ese caso, se cambia el color del padre y del abuelo, y luego se aplica una rotación a derecha sobre el abuelo.

Árboles RN11

14

15

7

4

5

8

1

2hijo

izquierdo

tío

Árboles RN11

14

15

7

4

5

8

1

2hijo

izquierdo

tío

11

14

15

7

4

5

8

1

2hijo

izquierdo

tío

Árboles RN

8

11

14

15

14

15

7

4

5

8

1

2

11

7

4

51

2

hijoizquierdo

tío

Árboles RN

● Eliminación:

Se consideran los mismos casos de eliminación que en un árbol binario ordenado:– Eliminar un nodo hoja.– Eliminar un nodo con un solo hijo (derecho o

izquierdo).– Eliminar un nodo con dos hijos.

Árboles RN

● Eliminación:

... pero además hay que tener en cuenta el color del nodo a eliminar ...

Si se elimina un nodo rojo, usualmente las propiedades se siguen manteniendo.

Si se elimina un nodo negro, es necesario identificar las opciones de cambio de color y rotación para garantizar las propiedades del árbol.

Árboles RN

● Applet de demostración

http://www.cs.usfca.edu/~galles/visualization/RedBlack.html

Árbol RN en la STL

● #include <set>– std::set< T >

– std::multiset< T >

● #include <map>– std::map< K, T >

– std::multimap< K, T >

STL: std::set< T >

● Se “ve” como una lista ordenada de elementos únicos.

● T debe ser un tipo de “ordenamiento estrictamente débil” (strict weak ordering).– i.e. Debe existir el operador “<” para T.

std::set< T >::insert( const T& v );

std::set< T >::erase( iterator pos );

std::set< T >::[r]begin( );

std::set< T >::[r]end( );

STL: std::map< K, T >

● Se “ve” como un vector dinámico de índices de elementos únicos.

● K debe ser un tipo de “ordenamiento estrictamente débil” (strict weak ordering).– i.e. Debe existir el operador “<” para K.

std::map< int, float > v; float ↔v[ MAX ];

std::map< K, T >::iterator it;

it->first; // K

it->second; // T

Montículos(heaps)

Montículo (heap)

● Estructura basada en árboles completos:

Todos los niveles, salvo el último, tienen el máximo número de nodos posibles.

En el último nivel, si no está lleno, todos los nodos deben estar concentrados hacia el lado izquierdo.

Montículo (heap)

● Satisface la propiedad:

Si A es el nodo padre de B, el valor de A está ordenado con respecto al valor de B con la misma propiedad de ordenamiento a lo largo del montículo.

● Montículo máximo (max heap): si el valor del padre es siempre mayor o igual que el valor de sus hijos (máximo en la raíz).

● Montículo mínimo (min heap): si el valor del padre es siempre menor o igual que el valor de sus hijos (mínimo en la raíz).

Montículo (heap)

● No importa la relación de orden entre hermanos.

Ejemplo max heap:

12 9

15

08

7

10

53

6

2 1

Montículo (heap)

● No importa la relación de orden entre hermanos.

Ejemplo min heap:

5 2

1

43

6

8

1013

7

9 11

Montículo (heap)

● Inserción:

Puede requerir el restablecimiento de la propiedad de ordenamiento del montículo.

1. Añadir el elemento en la “última” posición.

2. Comparar el valor del nodo con su padre:

2.1 si están en el orden correcto, terminar.

2.2 si no, intercambiar el elemento con su padre y retornar al paso 2.

Depende de la altura del montículo → O(log n).

Montículo (heap)

● Inserción: insertar 11.

12 9

15

08

7

10

53

6

2 1

Montículo (heap)

● Inserción: insertar 11.

12 9

15

08

7

10

53

6

2 1 11

Montículo (heap)

● Inserción: insertar 11.

12 9

15

08

7

10

53

6

2 1 11

Montículo (heap)

● Inserción: insertar 11.

12 9

15

011

7

10

53

6

2 1 8

Montículo (heap)

● Inserción: insertar 11.

12 11

15

09

7

10

53

6

2 1 8

Montículo (heap)

● Eliminación:

Corresponde a eliminar el nodo de la raíz, y restaurar la propiedad de ordenamiento.

1. Reemplazar la raíz con el “último” elemento.

2. Comparar la nueva raíz con sus hijos:

2.1 si están en el orden correcto, terminar.

2.2 si no, intercambiar el elemento con uno de sus hijos (el mínimo en min heap y el máximo en max heap) y retornar al paso 2.

Depende de la altura del montículo → O(log n).

Montículo (heap)

● Eliminación:

12 11

15

09

7

10

53

6

2 1 8

Montículo (heap)

● Eliminación:

12 11

15

09

7

10

53

6

2 1 8

Montículo (heap)

● Eliminación:

12 11

8

09

7

10

53

6

2 1

Montículo (heap)

● Eliminación:

8 11

12

09

7

10

53

6

2 1

Montículo (heap)

● Eliminación:

10 11

12

09

7

8

53

6

2 1

Montículo (heap)

● Implementación:

Representación utilizando un arreglo:

No se requieren apuntadores, sólo aritmética de índices dentro del arreglo.

0

1 2

3 4 5 6

Montículo (heap)

● Implementación: aritmética de índices:

n: número de elementos en el montículo.i: índice dentro del arreglo (0 hasta n-1).

Raíz: posición (índice) 0 del arreglo.

Cualquier elemento a con índice i tiene.

– sus hijos en las posiciones 2i+1 y 2i+2.

– su padre en la posición ⌊(i-1)/2⌋( ...⌊ ⌋: función piso o parte entera).

Montículo (heap)

● Implementación:

10 11

12

09

7

8

53

6

2 1

12 10 11 8 6 9 0 3 5 2 1 7

Montículo (heap)

● Implementación:usando cualquier contenedor de la STL.

#include <algorithm>

std::push_heap( it_begin, it_end )

std::pop_heap( it_begin, it_end )

std::is_heap( it_begin, it_end )

std::sort_heap( it_begin, it_end )

std::make_heap( it_begin, it_end )

Montículo (heap)

● Implementación: usando la STL.

Inserción: en el contenedor, luego en el montículo.

std::deque< T > vec;

while( there_is_data )

{

T new_data = get_next_data( );

vec.push_back( new_data );

std::push_heap( vec.begin( ), vec.end( ) );

}

Montículo (heap)

● Implementación: usando STL:

Eliminación: del montículo, luego del contenedor.

std::deque< T > vec;

std::pop_heap( vec.begin( ), vec.end( ) );

T elim_data = vec.back( );

vec.pop_back( );

Montículo (heap)

● Ejercicio:

Insertar los siguientes elementos en un montículo máximo:

12, 6, 14, 2, 13, 8, 19, 5, 1, 11, 21, 10, 7, 3

Montículo (heap)

19 14

21

5

12

13

6 11

10

78

12

3

21 19 14 5 13 10 12 2 1 6 11 8 7 3

Montículo (heap)

● Ejercicio:

Insertar los mismos elementos, ahora en un montículo mínimo:

12, 6, 14, 2, 13, 8, 19, 5, 1, 11, 21, 10, 7, 3

Montículo (heap)

1 2 3 5 11 8 7 12 6 13 21 14 10 19

2 3

1

5

612

11

13 21

8

1014

7

19

Árboles

● Implementaciones de:

- Árbol general (Arbol), nodo general (Nodo).

- Árbol binario ordenado (ArbolBinarioOrd), nodo binario (NodoBinario).

- Árbol AVL (ArbolAVL), nodo AVL (NodoAVL).

- Árbol RN (implementación STL).

- Montículo máximo (implementación STL).

Referencias

● L. Joyanes Aguilar, I. Zahonero. Algoritmos y estructuras de datos: una perspectiva en C. McGraw-Hill, 2004.

● www.cs.duke.edu/~reif/courses/alglectures/skiena.lectures/lecture10.pdf

● www.cse.ohio-state.edu/~gurari/course/cis680/cis680Ch11.html

● www.stolerman.net/studies/cs521/red_black_trees.pdf

● http://lcm.csa.iisc.ernet.in/dsa/node114.html● en.wikipedia.org/wiki/Red-black_tree

top related