Galería de mapas mentales Mapa mental del árbol de estructura de datos.
Resume los puntos de conocimiento de los árboles de estructura de datos. Los contenidos principales incluyen definiciones y términos básicos, propiedades de árboles, definiciones y términos básicos de árboles binarios, propiedades de árboles binarios y estructuras de almacenamiento de árboles binarios.
Editado a las 2023-01-06 10:54:13,Este es un mapa mental sobre una breve historia del tiempo. "Una breve historia del tiempo" es una obra de divulgación científica con una influencia de gran alcance. No sólo presenta los conceptos básicos de cosmología y relatividad, sino que también analiza los agujeros negros y la expansión. del universo. temas científicos de vanguardia como la inflación y la teoría de cuerdas.
¿Cuáles son los métodos de fijación de precios para los subcontratos de proyectos bajo el modelo de contratación general EPC? EPC (Ingeniería, Adquisiciones, Construcción) significa que el contratista general es responsable de todo el proceso de diseño, adquisición, construcción e instalación del proyecto, y es responsable de los servicios de operación de prueba.
Los puntos de conocimiento que los ingenieros de Java deben dominar en cada etapa se presentan en detalle y el conocimiento es completo, espero que pueda ser útil para todos.
Este es un mapa mental sobre una breve historia del tiempo. "Una breve historia del tiempo" es una obra de divulgación científica con una influencia de gran alcance. No sólo presenta los conceptos básicos de cosmología y relatividad, sino que también analiza los agujeros negros y la expansión. del universo. temas científicos de vanguardia como la inflación y la teoría de cuerdas.
¿Cuáles son los métodos de fijación de precios para los subcontratos de proyectos bajo el modelo de contratación general EPC? EPC (Ingeniería, Adquisiciones, Construcción) significa que el contratista general es responsable de todo el proceso de diseño, adquisición, construcción e instalación del proyecto, y es responsable de los servicios de operación de prueba.
Los puntos de conocimiento que los ingenieros de Java deben dominar en cada etapa se presentan en detalle y el conocimiento es completo, espero que pueda ser útil para todos.
Árbol
primera parte
Definiciones y términos básicos.
Nodo raíz, nodo hoja, borde, nodo rama, árbol vacío: un número con 0 nodos, subárbol, ruta entre nodos: de arriba a abajo. Longitud del camino: el número de aristas pasadas.
Características: Hay un solo nodo llamado raíz. Cada nodo, excepto el nodo raíz, tiene un solo predecesor. Todos los nodos pueden tener muchos sucesores.
Un árbol ordenado está desordenado. De izquierda a derecha, ¿está ordenado o desordenado?
árboles y bosques
Descripción de atributos de nodo y árbol
Grado de árbol: la cantidad de hijos que tiene un árbol con la mayor cantidad de nodos secundarios
Altura del nodo: contando de abajo hacia arriba
Nivel de nodo, profundidad: contando de arriba a abajo
Grado de nodo: ¿Cuántos hijos tiene un nodo?
naturaleza del arbol
Número de nodos = total grado 1
Árboles de grado m y árboles m-arios.
Un árbol de grado m: el grado de cada nodo es <= m, y al menos un nodo tiene grado m. Debe ser un árbol no vacío con al menos m 1 nodos.
Árbol m-ario: el grado de cualquier nodo <= m, el grado de todos los nodos está permitido <m, puede ser un árbol vacío
El i-ésimo nivel de un árbol con grado m tiene como máximo m^i-1 nodos, y el árbol m-ario es el mismo
Un árbol m-ario con altura h tiene como máximo nodos m^h-1/m-1.
Un árbol m-ario con altura h tiene al menos h nodos, y un árbol con altura h y grado m tiene al menos h m-1 nodos.
La altura mínima de un árbol m-ario con n nodos es (log)[m](n(m-1) 1 redondeado hacia arriba
la segunda parte
Definición de árbol binario y terminología básica.
concepto basico
Características: cada nodo tiene como máximo dos subárboles y los subárboles izquierdo y derecho no se pueden revertir.
Varios árboles binarios especiales.
árbol binario completo
La altura es h y el número de nodos es 2^h-1
La numeración comienza desde 1 en orden jerárquico y el nodo principal del nodo i se redondea hacia abajo a i/2.
árbol binario completo
Tiene una correspondencia uno a uno con el árbol binario completo y solo se puede eliminar de atrás hacia adelante. La cola es similar.
i<=n/2 se redondea al siguiente nodo de rama, y si es mayor o igual a n/2, se redondea al nodo de hoja.
árbol de clasificación binaria
Las claves de todos los nodos en el subárbol derecho son mayores que las claves del nodo raíz y las claves de todos los nodos en el subárbol izquierdo son menores que
Se utiliza para ordenar y buscar elementos.
árbol binario equilibrado
La diferencia de profundidad entre el subárbol izquierdo y el subárbol derecho de cualquier nodo del árbol no excede 1
Más gordo, con la menor cantidad de capas posible.
Mayor eficiencia de búsqueda
Propiedades de los árboles binarios
Propiedades de los árboles binarios
n0=n2 1
El resto es igual que arriba.
Propiedades de los árboles binarios completos.
La altura de un árbol binario completo con n nodos es log2(n 1) redondeado hacia arriba y (log2n) 1 redondeado hacia abajo.
Según que el número de nodos sea n, podemos deducir el número de nodos con grados 0, 1 y 2.
Estructura de almacenamiento de árbol binario
almacenamiento secuencial
Cree una matriz estática para almacenar el árbol en orden de arriba a abajo, de izquierda a derecha. La estructura del árbol contiene dos variables, una es el valor de los datos y la otra es el valor bool para determinar si el nodo está vacío. Durante la inicialización, se requiere un bucle para configurar cada nodo para que esté vacío (el valor bool es verdadero)
funcionar
El hijo izquierdo de i nodo 2i
El hijo derecho de i nodo 2i 1
El nodo padre de i se redondea a la baja a i/2
Redondear log2(n 1)
árbol binario completo
Determinar si me queda un hijo 2i<=n
Determinar si i tiene un hijo adecuado 2i 1<=n
Determinar si el nodo i es una hoja o una rama i> redondear hacia abajo a n/2
En el almacenamiento secuencial de árboles binarios, los números de nodo del árbol binario deben coincidir con el árbol binario completo, de modo que las relaciones lógicas entre los nodos puedan reflejarse en los números almacenados secuencialmente. Sólo tiene sentido que los árboles binarios completos se almacenen secuencialmente.
En el peor de los casos, un solo árbol con solo el hijo correcto requiere al menos 2^h-1 unidades de almacenamiento secuenciales.
almacenamiento en cadena
La estructura tiene tres variables, una es el valor y las otras dos son las variables de puntero secundario izquierda y derecha.
Una lista enlazada de árbol binario con n nodos tiene un total de n 1 campos de enlace vacíos.
La ventaja es que es muy conveniente encontrar los hijos izquierdo y derecho de un nodo, pero la desventaja es que encontrar el nodo padre requiere atravesarlo desde el principio. El método consiste en establecer un puntero de nodo principal más en la estructura.
la tercera parte
Recorrido de primer/medio/post-orden del árbol binario
recorrido de preorden
alrededor de la raíz
expresión de prefijo
paso
Si está vacío, no hagas nada.
acceder al nodo raíz
Recorrido de preorden del subárbol izquierdo
Preordenar atraviesa el subárbol derecho
recorrido en orden
raíz izquierda derecha
Expresión en orden, requiere delimitador de inicio
ruokong no hace nada
Recorrido en orden del subárbol izquierdo
acceder al nodo raíz
Recorrido en orden del subárbol derecho
recorrido posterior al pedido
raíces izquierda y derecha
expresión sufijo
Si está vacío, no hagas nada.
Recorrido de postorden del subárbol izquierdo
Recorrido de postorden del subárbol derecho
acceder al nodo raíz
Cada nodo se pasará tres veces en cada recorrido, y los tres recorridos visitan el nodo durante el primer, segundo y tercer paso en secuencia.
Recorrido de orden de nivel del árbol binario
pensamiento algorítmico
Inicializar una cola auxiliar
Deje que el nodo raíz se una a la cola
Si la cola no está vacía, deje que el nodo raíz salga de la cola y permita que los hijos izquierdo y derecho del nodo raíz se unan a la cola (los hijos izquierdo y derecho existen)
Repita el paso 3 hasta que la cola esté vacía.
Construir un árbol binario a partir de una secuencia transversal
Si solo se proporciona una de las secuencias transversales de orden anterior, medio y posterior, no se puede determinar de manera única un árbol binario.
Se deben combinar dos y uno de ellos debe ser una secuencia intermedia.
El principio es que el nodo raíz se puede determinar en función de los niveles delantero y trasero, y luego los subárboles izquierdo y derecho se dividen según el orden medio.
Concepto de árbol binario de pista
señales
Idea: Hay n 1 dominios de enlace vacíos para n nodos. Usamos el dominio de enlace vacío de este nodo para almacenar el predecesor y el sucesor de este nodo en cada recorrido de secuencia. Establezca rtag, ltag indica si apunta al niño rag=1 o a la pista rag=0.
Pista precursora: servida por el puntero del niño izquierdo
Pista sucesora: servida por el puntero del hijo correcto
Predecesor en orden: apunta al predecesor del nodo en el recorrido en orden
La razón es que si no utilizamos métodos de subprocesos, necesitamos atravesar los nodos nuevamente, lo cual es ineficiente. El método simple es usar dos punteros para recorrer en secuencia y registrar, y luego usar los dos punteros para encontrar el nodo para juzgar la equivalencia. Dos tipos de sentencias antes y después corresponden a antecesor y sucesor.
Enhebrado de árboles binarios
Tres tipos de implementaciones de código transversal
Modificación de los tres algoritmos transversales Al visitar un nodo, la información de pista que conecta el nodo y el nodo predecesor es.
Utilice un puntero previo para registrar el nodo predecesor del nodo al que se accede actualmente.
Fácil de cometer errores
Procesamiento de rchild y rtag del último nodo
Reserva pistas para prestar atención al problema del círculo mágico del amor. Cuando ltag = 0, el subárbol izquierdo se puede rastrear en preorden.
Encuentre el predecesor y el sucesor en el árbol binario de pistas
Encuentre el predecesor y el sucesor del nodo p en el árbol binario de pistas en orden
Buscando un sucesor
Determinar el valor de rtag.
si 0
Bucle para encontrar el nodo izquierdo del subárbol derecho hasta que sea un nodo hoja, luego este nodo es el sucesor
si 1
Entonces el hijo derecho de p es el sucesor
Encuentra un pionero
Determinar el valor de ltag.
si 0
Haga un bucle para encontrar el hijo derecho del subárbol izquierdo hasta que sea un nodo hoja, luego este nodo es el predecesor.
si 1
Entonces el hijo izquierdo de p es el predecesor
precedencia
Encuentra un pionero
Determinar ltag=1
es el puntero izquierdo
etiqueta l=0
En el recorrido previo al pedido, los hijos izquierdo y derecho solo pueden ser sucesores y no predecesores.
El método alternativo es recorrer desde cero.
Utilice una lista enlazada de tres puntas en su lugar y agregue un puntero al nodo principal
Si hay un nodo padre y p es el hijo izquierdo
Entonces el nodo padre de p es el predecesor
Si hay un nodo padre y p es el hijo correcto
El hermano Zuo no está vacío.
El predecesor de p es el último nodo del subárbol hermano izquierdo en el recorrido de preorden.
El hermano izquierdo está vacío.
El nodo padre es el predecesor.
Si p es el nodo raíz
sin precursor
Buscando un sucesor
Determinar ltag=1
es el puntero izquierdo
etiqueta l=0
Supongamos que queda un niño.
Entonces el hijo izquierdo es el sucesor.
no queda niño
es el niño correcto
Epílogo
Encuentra un pionero
Determinar ltag=1
es el puntero izquierdo
etiqueta l=0
Debe quedar un niño
Supongamos que no existe un niño adecuado
Entonces el niño izquierdo es el precursor.
tener un hijo adecuado
Entonces el niño adecuado es el precursor.
Buscando un sucesor
Determinar etiqueta = 1
es el puntero correcto
etiqueta = 0
p debe tener un hijo adecuado
En el recorrido posterior al orden, los subárboles izquierdo y derecho solo pueden ser el predecesor de la raíz, no el sucesor.
Recorrer desde cero usando métodos locales
Utilice una lista vinculada de tres puntas para agregar un puntero principal en su lugar
Puede encontrar el nodo padre
p es el niño correcto
El nodo padre de p es el sucesor.
p es el hijo izquierdo
El hermano correcto está vacío.
El nodo padre de p es el sucesor.
El hermano correcto no está vacío.
El sucesor de p es el primer nodo en el subárbol hermano derecho que se recorre en postorden.
P es el nodo raíz
p no tiene sucesor
cuarta parte
estructura de almacenamiento de árboles
Notación parental (almacenamiento secuencial)
como definir
Defina dos estructuras, una para cada nodo y otra para la estructura de árbol.
Almacene los árboles en una matriz en orden de arriba a abajo y de izquierda a derecha
El puntero del nodo principal del nodo raíz es -1, y el valor del puntero del nodo principal de otros nodos es el subíndice de matriz del nodo principal.
funcionar
No es necesario almacenar físicamente los nuevos elementos para ordenarlos.
Eliminar elemento
La opción 1 cambia el valor del puntero del nodo principal del elemento eliminado a -1
Opción 2: cubrir el último nodo con el nodo que se va a eliminar
Si es un nodo hoja, es muy conveniente eliminarlo. ¿Qué pasa si no es un nodo hoja?
Es necesario recorrer desde el principio y eliminar todos sus subárboles.
Ventajas y desventajas: la ventaja es que es fácil encontrar el nodo principal, pero encontrar el nodo secundario requiere recorrerlo desde el principio.
Representación infantil (almacenamiento en cadena secuencial)
como definir
Definir tres estructuras
estructura de lista enlazada
una estructura de árbol
La estructura de un nodo.
Almacene cada nodo secuencialmente y almacene el puntero principal de la lista secundaria en cada nodo.
Representación del hermano menor (almacenamiento encadenado)
Hay dos punteros en la estructura, uno que apunta al hijo izquierdo y el otro que apunta al hermano derecho del hijo izquierdo.
Ventajas: puede utilizar operaciones de árbol binario para procesar árboles directamente
Presentar la estructura de un árbol binario en lógica física.
Implementar la conversión de árbol y árbol binario.
Realizar la conversión de árboles y bosques binarios.
Los nodos raíz de cada árbol se consideran hermanos.
Recorrido de árboles y bosques.
recorrido del árbol
recorrido de la raíz del árbol
Si el árbol no está vacío, visite primero el nodo raíz y luego realice un recorrido de raíz primero en cada subárbol por turno.
primer recorrido en profundidad
La secuencia transversal previa a la raíz del árbol es la misma que la secuencia de pedido previo del árbol binario correspondiente de este árbol.
Recorrido de la raíz posterior del árbol
Si el árbol no está vacío, primero realice un recorrido posterior a la raíz en cada subárbol por turno y finalmente visite el nodo raíz.
primer recorrido en profundidad
El recorrido posterior del árbol es el mismo que la secuencia en orden del árbol binario correspondiente a este árbol.
Recorrido a nivel de árbol
Implementado usando colas
Si el árbol no está vacío, el nodo raíz se agrega a la cola.
Si la cola no está vacía, el elemento principal se retira de la cola y se accede a él, y los elementos secundarios del elemento se agregan a la cola.
Repita el paso anterior hasta que la cola esté vacía.
recorrido de amplitud primero
Viajando por el bosque
Preordenar recorrido del bosque.
El efecto es equivalente a recorrer primero la raíz de cada árbol en secuencia.
Equivalente al recorrido de preorden de un árbol binario en secuencia
recorrido en orden
Equivale a realizar un recorrido posterior a la raíz en cada árbol por turno
Equivalente al recorrido en orden de un árbol binario
Primero primero primero, Shusen Er. Después del medio, Shusen dos.
la quinta parte
árbol de huffman
Camino correcto y longitud.
El peso del nodo: un valor con algún significado práctico (como la importancia del nodo)
La longitud total de la ruta de un nodo: el producto de la longitud de la ruta (número de aristas pasadas) desde la raíz del árbol hasta el nodo y el peso del nodo.
La longitud total del camino del árbol.
La suma de las longitudes de camino ponderadas de todos los nodos de las hojas de la especie de árbol.
Definición del árbol de Huffman
En un árbol binario que contiene n nodos de hoja ponderados, el árbol binario con la longitud de ruta total más pequeña se denomina árbol de Huffman, también conocido como árbol binario óptimo.
La estructura del árbol de Huffman.
Cada vez que los dos nodos con los pesos más pequeños se combinan en un árbol, el peso del nuevo nodo generado es la suma de los dos nodos. Continúe los pasos anteriores en secuencia hasta que se combinen todos los nodos.
naturaleza
Cada nodo inicial eventualmente se convierte en un nodo hoja, y el nodo con el peso más pequeño tiene la longitud de ruta más grande hasta el nodo raíz.
El número total de nodos del árbol de Huffman es 2n-1
No hay ningún nodo con grado 1 en el árbol de Huffman
El árbol de Huffman no es único, pero wpl debe ser el mismo y óptimo
Codificación Huffman
Codificación de longitud fija: cada carácter está representado por bits binarios de igual longitud
Codificación de longitud variable: permite representar diferentes caracteres mediante longitudes desiguales de bits binarios
Codificación de prefijo: si ninguna codificación es el prefijo de otra codificación, dicha codificación se denomina codificación de prefijo.
La codificación y decodificación de prefijos son inequívocas.
La codificación de Huffman se obtiene utilizando un árbol de Huffman. Cada carácter del conjunto de caracteres se utiliza como un nodo hoja y la frecuencia de cada carácter se utiliza como el peso del nodo para construir un árbol de Huffman.
naturaleza
Los árboles de Huffman no son únicos y los códigos de Huffman no son únicos.
Aplicación: Telégrafo y datos comprimidos.
Y busca en la colección.
El conjunto de búsqueda de unión es una estructura lógica, una implementación específica de un conjunto. Solo realiza dos operaciones: unión y búsqueda. Se utiliza un bosque para representar un conjunto y cada árbol es un subconjunto disjunto.
funcionar
Buscar: comience desde el elemento especificado, vaya hasta el norte y busque el nodo raíz.
Determinar si dos elementos están en el mismo conjunto. Encuentre las raíces de dos elementos por separado y determine si los nodos raíz son iguales
Y: simplemente haga de otro árbol de lecciones un subárbol de otro árbol.
Estructura de almacenamiento: Representación parental de un árbol.
Código
Inicialización: deje que el puntero principal de cada nodo apunte a -1
Encontrar
y
Optimización de la fusión: utilice el valor absoluto del nodo raíz para representar el número total de nodos en el árbol, de modo que los árboles pequeños se puedan fusionar en árboles grandes.
El peor momento en el que la complejidad de las operaciones de optimización y búsqueda cambia de on a olog2n
La altura del árbol construido con este método no excede (redondeado hacia abajo log2n) 1
Mayor optimización de la búsqueda de sindicatos
Optimización de la operación de búsqueda: comprima la ruta, primero busque el nodo raíz y luego cuelgue todos los nodos en la ruta de búsqueda debajo del nodo raíz