Self-Balancing-Binary-Search-Trees (Comparaciones)

Los árboles de búsqueda binarios autoequilibrados son árboles de búsqueda binarios de altura equilibrada que mantienen automáticamente la altura lo más pequeña posible cuando se realizan operaciones de inserción y eliminación en el árbol. La altura generalmente se mantiene en el orden de Log n para que todas las operaciones tomen tiempo O (Log n) en promedio. 

Ejemplos: 
árbol negro rojo 
 

Red Black Tree

Árbol AVL: 
 

Implementaciones de lenguaje: establecer y mapear en C++ STL. TreeSet y TreeMap en Java. La mayoría de las implementaciones de la biblioteca utilizan Red Black Tree. La biblioteca estándar de Python no es compatible con Self Balancing BST. En Python, podemos usar el módulo bisect para mantener un conjunto de datos ordenados. También podemos usar módulos PyPi como rbtree (implementación del árbol rojo y negro) y pyavl (implementación del árbol AVL). 

¿Cómo mantiene la altura Self-Balancing-Tree?  
Una operación típica que realizan los árboles es la rotación. Las siguientes son dos operaciones básicas que se pueden realizar para volver a equilibrar un BST sin violar la propiedad BST (teclas (izquierda) < tecla (raíz) < teclas (derecha)). 
1) Rotación a la izquierda 
2) Rotación a la derecha 

T1, T2 and T3 are subtrees of the tree 
rooted with y (on the left side) or x (on 
the right side)           
     y                               x
    / \     Right Rotation          /  \
   x   T3   - - - - - - - >        T1   y 
  / \       < - - - - - - -            / \
 T1  T2     Left Rotation            T2  T3
Keys in both of the above trees follow the 
following order 
 keys(T1) < key(x) < keys(T2) < key(y) < keys(T3)
So BST property is not violated anywhere.

Ya hemos discutido el árbol AVL , Red Black Tree y Splay Tree . En este artículo, compararemos la eficiencia de estos árboles: 
 

Métrico Árbol RB Árbol AVL Árbol de juego
Inserción en el 
peor de los casos
O (inicio de sesión) O (inicio de sesión) Amortizado O(logn)
Altura máxima 
del árbol
2*registro(n) 1.44*registro(n) En)
Buscar en 
el peor de los casos
O (inicio de sesión), 
moderado
O (inicio de sesión), 
más rápido
O amortizado (logn), 
más lento
La implementación eficiente requiere Tres punteros con bit de color por Node Dos punteros con factor de equilibrio por 
Node
Solo dos punteros 
sin información adicional
Eliminación en el 
peor de los casos
O (inicio de sesión) O (inicio de sesión) Amortizado O(logn)
mayormente usado Como estructura de datos universal Cuando se requieren búsquedas frecuentes Cuando se 
recupera el mismo elemento una y otra vez
Aplicación del mundo real Transacciones de base de datos Multiconjunto, Multimapa, Mapa, Conjunto, etc. Implementación de caché, Algoritmos de recolección de basura

Publicación traducida automáticamente

Artículo escrito por Abhishek rajput y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *