Supongamos la siguiente definición de un árbol rojo-negro:
- Es un árbol de búsqueda binario.
- Cada nodo es de color rojo o negro. La raíz es negra.
- Dos nodos conectados por un borde no pueden ser rojos al mismo tiempo.
- Aquí debería haber una buena definición de una hoja NIL, como en wiki. La hoja NIL es de color negro.
- Una ruta desde la raíz a cualquier hoja NIL contiene el mismo número de nodos negros.
Pregunta
Supongamos que ha implementado las operaciones insert
y delete
para el árbol rojo-negro. Ahora, si se le da un árbol rojo-negro válido, ¿hay siempre una secuencia insert
y delete
operaciones que lo construyan?
Motivación
Esta pregunta está motivada por esta pregunta y por la discusión de esta pregunta .
Personalmente, creo que si imaginas un árbol rojo-negro válido que consta solo de nodos negros (lo que implica que estás imaginando un árbol perfectamente equilibrado), hay una secuencia insert
y delete
operaciones que lo construyen. Sin embargo,
- No sé cómo demostrar con precisión que
- También estoy interesado en el caso más general
insert
ydelete
para construir un árbol rojo-negro válido que consta solo de nodos negros . Utiliza inserciones / eliminaciones para crear un árbol de altura . Primero, podemos crear un árbol rojo-negro perfectamente equilibrado en primer lugar usando inserciones, luego usando inserciones y la misma cantidad de eliminaciones repítelo en Un árbol completamente negro. El truco aquí es subir veces la capa roja más baja del árbol hasta que llegue a la raíz.insert
ydelete
operaciones?insert
ydelete
; Puede haber varias formas de hacer estas operaciones. b) Dado que los árboles RB son esencialmente árboles B de orden 4, se puede buscar inspiración. Los detalles pueden resultar complicados ya que la asignación de RB a B (y / o al revés) no es única.Respuestas:
Las operaciones de inserción y eliminación en un árbol rojo-negro incluyen el equilibrio necesario para mantener las propiedades rojo-negro.
El problema con los árboles negros rojos que no se inclinan (izquierda o derecha) es que hay varias formas de restaurar el rojo-negro después de la eliminación o inserción básica.
No es la inserción o la eliminación lo que transforma el árbol, sino el reequilibrio y la rotación que se producen después para preservar / restaurar la negrura roja del árbol.
La descripción básica del árbol rojo-negro no prescribe cuáles de las posibles rutas tomar.
Puede que no sea posible descubrir cómo reconstruir exactamente un árbol negro rojo dado, porque el reequilibrio no necesita ser determinista.
Esto ha sido 'resuelto' con árboles negros rojos inclinados a la izquierda.
Solo hay una forma de hacer el equilibrio. Por lo tanto, cualquier árbol negro rojo inclinado se puede reconstruir usando inserciones y eliminaciones, porque el reequilibrio / rotaciones se realizan de una manera determinista específica.
Esto no significa que los árboles RB inclinados a la izquierda sean mejores o más eficientes, lo que obtienen por un lado al usar reglas de equilibrio deterministas, por otro pierden por un código de equilibrio más complejo.
Según el comentario de @ Anton:(h+2)⋅2h−1 h 2h+1−1 h∗2h−1 h
hay un algoritmo que utiliza la operación insertar y eliminar para construir un árbol rojo-negro válido que consta solo de nodos negros. Utiliza inserciones / eliminaciones para crear un árbol de altura . Primero, podemos crear un árbol rojo-negro perfectamente equilibrado en primer lugar usando inserciones , luego usando inserciones y la misma cantidad de eliminaciones lo vuelven a pintar Un árbol completamente negro. El truco aquí es subir veces la capa roja más baja del árbol hasta que llegue a la raíz.
Sin embargo, creo que un algoritmo de equilibrio completo como Day-Stout-Warren sería más eficiente.
fuente
insert
ydelete
desde el libro CLRS puede construir un árbol RB válido que consista solo de nodos negros . El truco consiste en insertar más nodos de los necesarios y luego eliminar los excesos. El algoritmo será eliminar nodos rojos.