Un árbol 2-3-4, también llamado un árbol 2-4, en el de informática es un B-tree de la orden 4.
Como los B-trees 2-3-4 árboles son generalmente una clase de la estructura de datos de uno mismo-equilibrio que se puede utilizar como diccionario . Pueden buscar, insertar y suprimir en tiempo O ( n del registro), donde está el número el n de elementos en el árbol. 2-3-4 árboles son relativamente difíciles de ejecutar en la mayoría de los lenguajes de programación debido a el gran número de casos especiales implicados en operaciones en el árbol. los árboles Rojo-negros que (véase abajo) son más simples ejecutar, así que ellos tienden a ser utilizados en lugar de otro.
2-3-4 árboles almacenan datos como artículos individuales llamados los elementos del . Éstos se agrupan en los nodos del . Cada nodo es cualquier
2 un nodo, es decir contiene 1 elemento y tiene 2 niños, o
3 un nodo, es decir contiene 2 elementos y tiene 3 niños, o
4 un nodo, es decir contiene 3 elementos y tiene 4 niños.
Para insertar en un árbol 2-3-4, primera búsqueda a través del árbol para el valor de blanco. Una vez en la localización correcta, insertar el valor en el nodo. Siempre que un árbol contenga un " node" 4; el árbol debe ser reequilibrado. Un ejemplo de esto que reequilibra se demuestra abajo:
Como un ejemplo comienza con este árbol 2-3-4. El árbol contiene un nodo de raíz con tres nodos de niño. Ahora insertar el " 25" en el árbol. Porque el nodo de la derecha inferior es un nodo 4, se requiere una rotación. Romper el nodo 4 (22, 24, 29) moviendo el 24 hasta el nodo del padre. Partir el nodo 3 (22.29) para hacer parte de los 4 niños del nodo 3. Comparar el nodo 25 al nodo del padre y moverse a la derecha. Entonces insertar en nodo. El árbol ahora se reequilibra. Otro valor se puede insertar en el árbol.
¡ ¡
Fórmula del para el la inserción Búsqueda para el valor en árbol
Agregar el nuevo artículo al árbol
Comprobar para saber si hay desbordamiento a través del árbol y reequilibrar
Fuentes:
Ford, Guillermo y Guillermo Topp. Estructuras de datos con C++ usar STL, segunda edición. Río superior de la silla de montar, New Jersey: Prentice Pasillo, 2002. Pagina 683-290 de 12.6:2 de la sección - 3-4 árboles
Más Info en el árbol 2-3-4
La canceladura es una poco más difícil que la inserción. Varios diversos casos necesitan ser llevados en la consideración. En la discusión siguiente, los nodos del hermano del están los que comparten a mismo padre.
Caso 1 del : Primero el elemento a ser necesidades suprimidas de ser encontrado. Entonces, el nodo necesita ser reducido al caso donde está el artículo ser suprimido en la parte inferior del árbol. Después, encontrar el artículo que lo precede en traversal de la en-orden, e intercambiar los dos elementos. Ahora quitar el artículo.
Caso 2 del : que quita a partir de 2 nodos
En 2 nodos, los resultados precedentes del procedimiento en nodo sin artículos. Esto se llama desbordamiento de capacidad inferior. Para solucionar esto, un artículo se tira del nodo del padre en el nodo donde se está quitando el artículo, y la vacante creada en el nodo del padre se substituye por un artículo de un nodo del hermano. Esto se llama la transferencia del .
Complicaciones adicionales del al quitar artículos a partir de 2 nodos:
Si los hermanos son 2 nodos ellos mismos, el desbordamiento de capacidad inferior todavía ocurre, porque ahora el hermano no tiene ninguÌn elemento. Para solucionar esta edición, dos nodos del hermano están fundidos juntos (después de tirar el elemento del nodo del padre). Esto se llama la fusión del .
Si el padre es un nodo 2, el desbordamiento de capacidad inferior ocurrirá en el nodo del padre. Esto es solucionada usando los métodos arriba. Esto puede hacer diverso nodo del padre sostener el desbordamiento de capacidad inferior como se están haciendo las canceladuras y los reemplazos, designado el del desbordamiento de capacidad inferior que conecta en cascada .
La canceladura en un árbol 2-3-4 es O (registro n), mientras que el tiempo constante de la transferencia y de la fusión, O (1).
Gráficamente el convertir de un árbol 2-3-4 a un árbol negro rojo es bastante simple. Tomemos el ejemplo de la sección de la inserción: Convertir a padre de 4 nodos en tres nodos rojo-negros donde está un nodo el centro negro y los valores 10 y 24 son niños rojos. El niño izquierdo del padre de 4 nodos hizo el niño izquierdo del nodo 10. Asimismo, el nodo 17 se trasladaría a la posición del nodo correcto para el nodo 10 y así sucesivamente. Ahora, convertir a niños del nodo 3 del nodo 24. Puesto que es un nodo 3, usted puede elegir cuál usted quiere como el padre y cuál como el niño. Colorearán al padre negro puesto que es el niño del nodo rojo 24 y colorearán al niño negro puesto que es un niño de un nodo rojo. Tenemos nodo seleccionado 29 a ser el padre y 25 a ser el niño. Ahora, usted ha convertido un árbol 2-3-4 en un árbol negro rojo.
Fuentes:
Ford, Guillermo y Guillermo Topp. Estructuras de datos con C++ usar STL, segunda edición. Río superior de la silla de montar, New Jersey: Pretice Pasillo, 2002. Pagina 690-701 de la sección 12.7: Árboles Rojo-Negros
Más allá de la complejidad de crear un árbol 2-3-4, si está ejecutado, pierde una gran cantidad de memoria. Cada nodo tiene que tener espacio para hasta 7 valores de datos: 3 valores llevados a cabo y 4 indicadores a sus niños. Así, cada nuevo nodo tiene que asignar la memoria para todos estos valores aunque una mayoría de nodos no es 4 nodos. Así pues, muchos de los valores son inusitados.
Por ejemplo, si hubiera nodos de n en el árbol 2-3-4, la computadora necesitaría asignar los indicadores 4*n. Puesto que cada nodo tiene un padre el señalar a él a excepción de la raíz, el árbol debe también tener bordes n-1. El número de indicadores inusitados sería equivalente a: 4n - (n -1) = 3n +1 o 3/4o de los indicadores que son utilizados. La razón para ejecutar árboles equilibrados es tener un rato de búsqueda más rápido comparado a el de árboles degenerados. Sin embargo, puesto que tanto la memoria se pierde al ejecutar un árbol 2-3-4, hace el programa funcionar más lento, así el árbol rojo-negro sería una mejor puesta en práctica. Sin embargo, el aprendizaje de cerca de 2-3-4 árboles permite una mejor comprensión del árbol negro rojo para los usuarios de primera vez.
Fuentes:
Ford, Guillermo y Guillermo Topp. Estructuras de datos con C++ usar STL, segunda edición. Río superior de la silla de montar, New Jersey: Pretice Pasillo, 2002.6:2 de la sección - 3-4 árboles
.
| Random links: | Sociedad de la seguridad de Kirtland | Ennis | Gato Shaftoe | JTiger | Nueva adaptación del estándar |