Directorio de artículos
Prefacio
¿Por qué son tan populares los árboles rojos y negros? Todos deben saber muy bien que durante la entrevista, pase lo que pase, les preguntaré: ¿Qué es un árbol rojo-negro y por qué deberíamos usar un árbol rojo-negro? Es como si lo entendiera muy bien, como si conocer los árboles rojos y negros significara que es increíble.
Sea como sea, si todavía no comprendes los árboles rojo-negros, sin importar si tienes los conceptos básicos o no, espero que esta introducción pueda ayudarte a comprender los árboles rojo-negros más fácilmente.
La propuesta del árbol rojo-negro
Primero, ¿qué es un árbol rojo-negro? El árbol rojo-negro también es un árbol de búsqueda binario autoequilibrado. Si no conoce los conceptos básicos, puede consultar el artículo anterior para conocer la estructura de datos y el árbol AVL.
¿Por qué utilizar árboles rojo-negros? En comparación con los árboles AVL, los árboles rojo-negros son más eficientes. ¿Por qué?
Sabemos que el árbol AVL utiliza operaciones de rotación para garantizar que la diferencia de altura entre los subárboles izquierdo y derecho del nodo no sea mayor que 1 al insertar o eliminar un nodo, asegurando así el equilibrio del árbol. Sin embargo, el equilibrio del árbol AVL es relativamente estricto. Básicamente, cada vez que se agrega o elimina un nodo, se rotará. La rotación frecuente conducirá a una baja eficiencia. Por esta razón, se propuso el árbol rojo-negro.
Varias definiciones que todo el mundo conoce.
Creo que todos han visto las siguientes definiciones al aprender árboles rojo-negros:
- Cada nodo debe ser rojo o negro.
- El nodo raíz debe ser negro.
- Todos los nudos de las hojas son negros.
- Dos nodos rojos no pueden ser adyacentes. Si el nodo actual es rojo, el nodo secundario debe ser negro.
- El número de nodos negros en el camino desde cualquier nodo a cada nodo hoja es el mismo.
Y espera.
Después de leer esta definición, ¿puedes entender por qué los árboles rojo-negros son más eficientes que los árboles AVL? No puedo entenderlo de todos modos, así que no te dejes influenciar por estas definiciones, y mucho menos memorice estas cosas.
También hay afirmaciones de que los árboles rojo-negro son esencialmente 2-3-4 árboles y los árboles rojo-negro usan caché. Yo personalmente no los entiendo.
Comprender la eficiencia de los árboles rojo-negros.
Para ser honesto, cuando entré por primera vez en contacto con los árboles rojo-negros, la definición me afectó por primera vez al principio. En segundo lugar, descubrí que el equilibrio también se mantiene girando hacia la izquierda y hacia la derecha. No se siente diferente de los árboles AVL. Por el contrario, es más complicado y más difícil de entender que los árboles AVL. Sin mencionar que el llamado "árbol rojo-negro es más eficiente que el árbol AVL".
¿Cómo entender que los árboles rojo-negros son más eficientes que los árboles AVL?
En comparación con el árbol AVL, el equilibrio del árbol rojo-negro es más flexible y no tan estricto, es decir, el número de rotaciones del árbol rojo-negro no será tan frecuente, por eso el árbol rojo-negro es más eficiente que el árbol AVL.
Entonces, ¿cómo reflejar el débil equilibrio de los árboles rojo-negros? ¿Por qué hay relativamente pocos giros? Centrémonos en las dos definiciones anteriores:
- Dos nodos rojos no pueden ser adyacentes. Si el nodo actual es rojo, el nodo secundario debe ser negro.
- El número de nodos negros en el camino desde cualquier nodo a cada nodo hoja es el mismo.
Estas dos definiciones significan que los nodos de la cadena más larga del árbol son rojos y negros, debido al punto 1 anterior. La cadena más corta son todos los nodos negros debido a los 2 anteriores.
Como puede ver en la imagen de arriba, la diferencia de longitud entre la cadena más larga (derecha) y la cadena más corta (izquierda) es 2: 4. Si inserta un nodo en el árbol de la derecha en este momento, girará para mantener el equilibrio. , Como se muestra abajo
Por lo tanto, se puede saber que la diferencia de longitud entre la cadena más larga y la cadena más corta del árbol rojo-negro no excederá el doble, por lo que su número de rotaciones es menor que el del árbol AVL y mantiene un relativamente Pierde equilibrio y eficiencia. También es más alto que el árbol AVL. Sin embargo, la complejidad general tanto de los árboles rojo-negro como de los árboles AVL es O (log n).
Resumir
- Se propusieron árboles rojo-negros para resolver la ineficiencia causada por la rotación frecuente de los árboles AVL.
- El equilibrio del árbol AVL depende de la diferencia de altura entre los subárboles izquierdo y derecho (no puede ser mayor que 1, relativamente estricto), y el equilibrio del árbol rojo-negro depende de la distribución de los nodos rojos y negros (difusos, sueltos). ).
- La eficiencia de los árboles rojo-negro es mayor que la de los árboles AVL, lo que se refleja en el hecho de que la diferencia de longitud entre la cadena más larga y la cadena más corta del árbol rojo-negro no excederá el doble.
- La complejidad general tanto de los árboles rojo-negro como de los árboles AVL es O (log n).