Estructuras de datos típicas: pila/cola/lista enlazada, búsqueda de hash, árbol binario (BT), árbol binario de pistas, árbol de clasificación binaria (árbol BST), árbol binario equilibrado (árbol AVL), árbol rojo-negro (árbol RB)

Tabla de contenido

Lista de estructuras de datos típicas

pila/cola/lista enlazada

Árbol

Árbol binario

árbol binario de pistas

árbol de clasificación binaria

Árbol binario equilibrado (árbol AVL)

árbol negro rojo

Introducción a otras especies de árboles y aplicaciones.


Lista de estructuras de datos típicas

pila/cola/lista enlazada

Descripción omitida.

Algunas implementaciones básicas simples /数据结构简单实现/se encuentran en la carpeta de referencia.

Árbol

Los siguientes son los conceptos básicos de árboles (definición, operaciones básicas, propiedades, estructura de almacenamiento, etc.), árboles binarios (definición, operaciones básicas, almacenamiento, recorrido, etc.), árboles binarios equilibrados, árboles rojo-negro, etc.

Citado de: Conceptos básicos de árboles y árboles binarios_blog-CSDN de Qingpingzhimo .

Un árbol se compone de uno o más nodos, hay un nodo especial llamado raíz, que es un conjunto finito de n (n>=0) nodos. Cuando n = 0, se denomina árbol vacío. Cuando n>0, los elementos del conjunto finito forman una estructura de datos jerárquica.

activos/70.jpeg

Algunos conceptos de árboles.

  • Grado de nodo: la cantidad de subárboles que tiene un nodo. Por ejemplo, el grado de A es 2, el grado de B es 1 y el grado de C es 3.
  • Altura del árbol: también llamada profundidad del árbol, el nivel máximo de nodos en el árbol.
  • Árbol ordenado: el orden entre los subárboles de nodos del árbol es importante y las posiciones no se pueden intercambiar a voluntad.
  • Árbol desordenado: el orden entre los subárboles del nodo del árbol no es importante. Puedes intercambiar posiciones a voluntad.
  • Bosque: una colección de 0 o más árboles separados.

Citado de: "Tutorial de estructura de datos".

Algunas propiedades de los árboles

  1. El número total de nodos en un árbol no vacío es igual a la suma de los grados de todos los nodos en el árbol más 1.
  2. El i-ésimo nivel de un árbol no vacío con grado k tiene como máximo k^(i-1) nodos (i ≥ 1).
  3. Un árbol k-ario con profundidad h tiene como máximo (k^h - 1)/(k - 1) nodos.
  4. La profundidad mínima de un árbol k-ario con n nodos es log_k(n*(k - 1)) + 1. La altura de un árbol binario que contiene n nodos es al menos log_2(n) + 1.

Operaciones básicas de árbol

  1. Crea un árbol vacío T.
  2. Encuentre el nodo raíz del árbol donde se encuentra el nodo x. O busque el nodo raíz del árbol T.
  3. Encuentre los nodos padres del nodo x en el árbol T.
  4. Encuentre el iésimo nodo hijo del nodo x en el árbol T.
  5. Encuentre los nodos hermanos en el lado derecho del nodo x en el árbol T.
  6. Inserte el árbol con S como nodo raíz en la i-ésima posición del nodo secundario del nodo x del árbol T.
  7. Elimine el i-ésimo árbol del nodo x en el árbol T.
  8. Atraviese un árbol, atraviese todos los nodos del árbol en un orden determinado y obtenga una secuencia compuesta por todos los nodos.

almacenamiento de árboles

Se utiliza principalmente el almacenamiento en cadena. Además de almacenar la información de datos del nodo en sí, la relación de conexión entre los nodos en el árbol también debe reflejarse en la estructura de almacenamiento.

  • Representación de lista multienlazada: dividida en número de enlace de longitud fija y número de enlace de longitud variable.

    anterior:

    1

    este último:

    2

  • Representación de lista triple enlazada:

    3

Árbol binario

Conceptos básicos de árboles y árboles binarios_blog-CSDN de Qingpingzhimo .

Citado de: "Tutorial de estructura de datos".

Las estructuras de árbol binario se utilizan ampliamente para resolver diversos problemas prácticos en el campo de la informática. Por ejemplo, los árboles binarios brindan un soporte sólido y eficaz en muchos aspectos, como la clasificación, la recuperación, los sistemas de gestión de bases de datos y la inteligencia artificial.

Cada nodo tiene como máximo dos subárboles. En un árbol binario, los subárboles izquierdo y derecho de un nodo se distinguen estrictamente y su orden no se puede invertir a voluntad. Por tanto, un árbol binario es un árbol ordenado.

Los árboles binarios se pueden dividir en árboles binarios completos y árboles binarios completos.

Operaciones básicas de árboles binarios.

4

Estructura de almacenamiento de árbol binario

  • Estructura de almacenamiento secuencial: existen algunos defectos inherentes en la estructura de almacenamiento secuencial, lo que hace que la inserción y eliminación de árboles binarios sea inconveniente y relativamente de baja eficiencia (las deficiencias inherentes de las tablas lineales).

    5

  • Estructura de almacenamiento de cadena: más adecuada y más amplia. Dos tipos: estructura de lista vinculada binaria y estructura de lista vinculada de tres puntas.

    Estructura de lista enlazada binaria: cada punto de enlace en la lista enlazada consta de tres campos, a saber, un campo de datos y dos campos de puntero, estos últimos proporcionan respectivamente las direcciones de almacenamiento de los nodos izquierdo y derecho del nodo.

    6

    Estructura de lista vinculada tridente: en comparación con la estructura de lista vinculada binaria, se agrega un campo de puntero adicional para señalar el nodo principal, de modo que al buscar el nodo principal de un nodo en el árbol binario, no es necesario recorrer todo el árbol binario. Es espacio para el tiempo (como el tiempo de búsqueda, etc.).

Árboles binarios y recorrido de árboles.

Muchas operaciones en árboles binarios se basan casi en el recorrido de árboles binarios. El árbol binario es una estructura no lineal, por lo que es necesario encontrar una regla para que todos los nodos del árbol binario puedan organizarse en una secuencia lineal, lo que se denomina recorrido.

Si los símbolos D, L y R se usan para representar los tres procesos de acceder al nodo raíz, atravesar el subárbol izquierdo del nodo raíz y atravesar el subárbol derecho del nodo raíz respectivamente, y limitar el orden de la primera izquierda y luego a la derecha, generalmente se usan tres recorridos: Métodos: DLR, LDR y LRD, que se denominan recorrido de preorden, recorrido en orden y recorrido posterior, respectivamente. También existe un orden transversal jerárquico.

El recorrido se puede realizar de forma recursiva (el desbordamiento de la pila es fácil para árboles grandes). Los métodos no recursivos suelen utilizar una estructura de pila.

El siguiente es un ejemplo de un programa que se recorre en orden transversal.

7

Recorrido por nivel (o recorrido de ancho primero), es decir, si el árbol binario que se está atravesando no está vacío, el primer nivel, el segundo nivel ... hasta que se visite secuencialmente el último nivel del árbol binario y se acceda a Cada nivel es de izquierda a derecha. Proceda en orden. Este método generalmente se implementa mediante una cola. El siguiente es un programa de ejemplo.

8

Restaurar árbol binario a partir de secuencia transversal

Tres pasos:

activos/9.jpg

árbol binario de pistas

Un árbol binario en el que se agregan pistas a los nodos del árbol binario se denomina árbol binario con pistas. Para un árbol binario con n nodos, hay n+1 campos de enlace vacíos en la estructura de almacenamiento de la cadena binaria. Estos campos de enlace vacíos se utilizan para almacenar los punteros del nodo predecesor y del nodo sucesor del nodo en un cierto orden transversal. Estos punteros son se llama pistas, y el árbol binario más pistas se llama árbol binario de pistas.

árbol de clasificación binaria

Citado de: "Tutorial de estructura de datos".

El árbol de clasificación binaria se utiliza para ordenar, buscar/recuperar, lo que puede mejorar en gran medida la eficiencia del tiempo de búsqueda (en general, la eficiencia de la consulta es mayor que la estructura de lista vinculada). El árbol de clasificación binaria también se denomina árbol de búsqueda binaria. Algunas personas dicen que cuando las funciones que deben completarse son inserción, eliminación y recuperación, el árbol de clasificación binaria tiene mejor rendimiento que cualquier estructura de datos estudiada hasta ahora.

Citado de: Árbol de clasificación binaria (árbol de búsqueda binaria) e implementación del lenguaje C (biancheng.net) .

Un árbol de clasificación binario es un árbol binario vacío o tiene las siguientes características:

  • En un árbol ordenado binario, si su nodo raíz tiene un subárbol izquierdo, entonces los valores de todos los nodos en el subárbol izquierdo son menores que el valor del nodo raíz;
  • En un árbol ordenado binario, si su nodo raíz tiene un subárbol derecho, entonces los valores de todos los nodos en el subárbol derecho son mayores que el valor del nodo raíz;
  • Los subárboles izquierdo y derecho de un árbol de clasificación binario también deben ser árboles de clasificación binarios;

Como se muestra en la figura siguiente, es un árbol de clasificación binario.

activos/103FJ439-0.png

Citado de: "Tutorial de estructura de datos".

La inserción de datos en un árbol de clasificación binario también debe seguir los principios de un árbol de clasificación binario. Cada vez que se inserta un nuevo elemento en el árbol ordenado binario, el nodo correspondiente al elemento se inserta en la posición del nodo hoja y otros nodos en el árbol binario no se mueven durante el proceso de inserción. Una secuencia de elementos de datos no está necesariamente organizada de acuerdo con el tamaño del valor, pero después de construirla en un árbol de clasificación binaria, la secuencia obtenida al recorrer en orden el árbol de clasificación binaria es una secuencia organizada de acuerdo con el tamaño de el valor.

Árbol binario equilibrado (árbol AVL)

Citado de: Árbol binario equilibrado (árbol AVL) e implementación del lenguaje C (biancheng.net) .

Árbol binario equilibrado, también conocido como árbol AVL. De hecho, es un árbol binario que sigue las dos características siguientes:

  • La diferencia de profundidad entre el subárbol izquierdo y el subárbol derecho en cada subárbol no puede exceder 1;
  • Se requiere que cada subárbol de un árbol binario sea un árbol binario equilibrado;

De hecho, según el árbol binario, si cada subárbol del árbol satisface que la diferencia de profundidad entre su subárbol izquierdo y su subárbol derecho no exceda 1, entonces este árbol binario es un árbol binario equilibrado.

La diferencia entre la profundidad del subárbol izquierdo y la profundidad del subárbol derecho de cada nodo en el árbol binario se define como el factor de equilibrio del nodo, por lo tanto, el factor de equilibrio de cada nodo en el árbol binario equilibrado solo puede ser 1 , 0 o -1.

Citado de: "Tutorial de estructura de datos".

La forma del árbol de clasificación binaria es impredecible de antemano y muy arbitraria. Lo que a menudo se obtiene es un árbol binario muy desequilibrado: cuanto mayor es la diferencia de profundidad, mayor es el tiempo de cálculo y se pierde la ventaja. Para superar este defecto del árbol de clasificación binario, es necesario realizar los ajustes necesarios en la estructura morfológica del árbol binario al insertar y eliminar nodos, de modo que el árbol de clasificación binario esté siempre en un estado equilibrado.

Se ha demostrado teóricamente que la profundidad de un árbol equilibrado con n nodos no será en ningún caso más de un 45% mayor que la profundidad de un árbol equilibrado ideal con el mismo número de nodos. Por lo tanto, aunque la operación de búsqueda en el árbol reequilibrado es más lenta que el árbol equilibrado ideal, generalmente es mucho más rápida que la operación de búsqueda en el árbol de clasificación binario generado arbitrariamente, y su complejidad temporal sigue siendo del orden de O (Log_2 (n )) .

árbol negro rojo

Citado del  blog-CSDN de Red-Black Tree (RB-Tree)_Qingpingzhimo .

Un árbol rojo-negro es un árbol de búsqueda binario.

Comparación de árboles rojo-negro y árboles AVL.

  • Si insertar un nodo causa un desequilibrio en el árbol, tanto AVL como RB-Tree solo requieren como máximo 2 operaciones de rotación, es decir, ambas son O(1); pero cuando eliminar un nodo causa un desequilibrio en el árbol, el peor de los casos En el escenario AVL necesita mantener el equilibrio de todos los nodos en la ruta desde el nodo eliminado hasta el nodo raíz, por lo que la magnitud de rotación requerida es O (logN), mientras que RB-Tree solo necesita 3 rotaciones como máximo, lo que solo requiere O ( 1) la complejidad;
  • Sin embargo, debido a que el árbol rojo-negro no está tan equilibrado como el árbol AVL, el rendimiento de búsqueda del árbol rojo-negro es peor que el del árbol AVL. Este pobre rendimiento en la búsqueda vale la pena el rendimiento de rotación al insertar y eliminar. Esta es la razón por la que los árboles rojo-negro se utilizan en muchas situaciones en lugar de árboles AVL, como mapas y conjuntos en STL. Por lo tanto, RB-Tree es más eficiente en escenarios que requieren la inserción y eliminación de una gran cantidad de nodos . Naturalmente, dado que AVL está altamente equilibrado, la eficiencia de búsqueda de AVL es mayor .
Introducción a otras especies de árboles y aplicaciones.

Supongo que te gusta

Origin blog.csdn.net/Staokgo/article/details/132922474
Recomendado
Clasificación