Galería de mapas mentales Algoritmos básicos de estructura de datos.
Las estructuras de datos son la forma en que las computadoras almacenan y organizan datos. Una estructura de datos se refiere a una colección de elementos de datos que tienen una o más relaciones específicas entre sí. A menudo, las estructuras de datos cuidadosamente seleccionadas pueden conducir a una mayor eficiencia operativa o de almacenamiento. Las estructuras de datos suelen estar relacionadas con algoritmos de recuperación y técnicas de indexación eficientes. Este mapa mental es una compilación de la estructura de datos del examen de ingreso de posgrado en computadora. Estas son las dos partes del algoritmo básico de la estructura de datos: búsqueda y clasificación. ¡Espero que esto ayude a mis amigos!
Editado a las 2019-09-18 12:58:50,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.
Algoritmos básicos de estructura de datos.
Encontrar
Métodos de búsqueda básicos
Método de búsqueda secuencial: escanee secuencialmente la tabla lineal comenzando desde un extremo de la tabla y compare las palabras clave escaneadas con los valores dados en secuencia.
Método de media búsqueda: la búsqueda requiere que la tabla lineal adopte una estructura de almacenamiento secuencial y que los elementos de la tabla estén ordenados por palabras clave. Compare la palabra clave registrada en la posición media de la tabla con la palabra clave de búsqueda. Si las dos son iguales, la búsqueda se realizará correctamente; de lo contrario, utilice el registro de la posición media para dividir la tabla en la primera y la última subtabla. registrado en la posición media es mayor que la palabra clave de búsqueda. Luego busque más en la subtabla anterior; de lo contrario, busque más en la siguiente subtabla
Método de búsqueda de bloques: divida la tabla lineal en varios bloques y requiera que la palabra clave más grande en el bloque anterior sea más pequeña que el siguiente bloque. Cree una tabla de índice, use el valor clave máximo en cada bloque como valor clave de la tabla de índice y guárdelo en una matriz auxiliar en el orden de los bloques. Al buscar, primero busque en la tabla de índice para determinar dónde está el nodo. que buscas se encuentra de cuadras. Dado que la tabla de índice está ordenada, la tabla de índice se puede buscar mediante búsqueda secuencial o búsqueda media y luego, el nodo correspondiente se puede encontrar mediante búsqueda secuencial en el bloque correspondiente, que es una combinación de los dos primeros métodos;
Estructuras de datos adecuadas para búsquedas.
Árbol binario
árbol de clasificación binaria
Propiedad básica: si el subárbol izquierdo no está vacío, entonces los valores de todos los nodos en el subárbol izquierdo son menores que el valor de su nodo raíz; si el subárbol derecho no está vacío, entonces los valores de todos los nodos en; el subárbol derecho es mayor que su valor de nodo raíz;
Operaciones básicas
Buscar: buscar hacia abajo desde el nodo raíz
Inserción: para una palabra clave que no existe en el árbol de clasificación binaria, la posición donde falla la búsqueda es la posición de inserción.
Eliminar: si es un nodo hoja, se puede eliminar directamente si el nodo tiene solo uno de los subárboles izquierdo y derecho, elimine el punto modificado y conecte directamente su subárbol a su nodo padre. subárboles, luego busque un nodo que pueda reemplazar su posición en su subárbol izquierdo o subárbol derecho.
árbol binario equilibrado
Propiedades básicas: es un árbol vacío o el valor absoluto de la diferencia de altura entre sus subárboles izquierdo y derecho no excede 1, y tanto el subárbol izquierdo como el derecho son árboles binarios equilibrados.
Método de construcción: coloque los elementos de la matriz en el árbol uno por uno. Si hay un nodo con un valor BF negativo y su subárbol izquierdo es más bajo que el subárbol derecho, gire en sentido antihorario alrededor del nodo para cambiar el nodo raíz. el nivel actual Después del ajuste fino, si su subárbol derecho es más bajo que el subárbol izquierdo, gire en el sentido de las agujas del reloj alrededor del nodo para cambiar el nodo raíz del nivel actual y luego ajuste.
multiárbol
Árbol B (árbol B)
Propiedades básicas: si es un árbol m-ario, el nodo raíz tiene al menos dos ramas, y los nodos no raíz y no hoja tienen al menos [m/2] ([] es la función de redondeo) ramas cada una; El nodo puede tener varias ramas de palabras clave, los nodos del árbol m-ario pueden acomodar hasta m-1 palabras clave; las palabras clave de los nodos en el mismo nivel están ordenadas de izquierda a derecha en orden de tamaño, comenzando desde el extremo izquierdo/derecho del. nodo o entre dos palabras clave Dirigir una rama El tamaño de las palabras clave en el nodo conectado por la rama debe estar entre las palabras clave conectadas en el nivel anterior (si se dirige desde el punto final izquierdo, debe ser más pequeño que la palabra clave del extremo izquierdo. , y si se dirige desde el extremo derecho, debe ser mayor que la palabra clave del extremo derecho).
Operaciones básicas
Buscar: buscar hacia abajo desde el nodo raíz
Inserción: para una palabra clave que no existe en el árbol B, la posición donde falla la búsqueda es la posición de inserción. Si el número de palabras clave de nodo es mayor que m-1 después de la inserción, el nodo debe dividirse: las palabras clave con valores centrados entre los nodos interpolados se fusionarán en el nodo de nivel superior Si la palabra clave del nodo de nivel superior. Si el número también excede el estándar, repita la operación.
borrar
El nodo eliminado se encuentra en el nodo terminal.
El número de palabras clave de nodo es mayor que [m/2] -1: eliminar directamente
El número de palabras clave de nodo es igual a [m/2]-1
Si el número de palabras clave en los nodos izquierdo y derecho de la palabra clave es mayor que [m/2] -1, tome prestadas palabras del nodo con un número de palabras clave mayor que [m/2] -1 para llenar la posición original.
Si el número de palabras clave en los nodos izquierdo y derecho de la palabra clave es igual a [m/2] -1, entonces los nodos izquierdo y derecho de la palabra clave se fusionarán en un solo nodo después de eliminar la palabra clave.
El nodo eliminado no está en el nodo terminal
① Siga el puntero izquierdo de la palabra clave hasta el nodo raíz del subárbol ② Baje por el puntero derecho de la palabra clave más a la derecha en el nodo raíz y use el mismo método hasta llegar al nodo terminal ③ Use el nodo terminal Haga clic para reemplazar el nodo que se eliminará y luego utilice el método de eliminar el nodo terminal para realizar el procesamiento posterior después de que el nodo terminal se reemplace hacia arriba.
árbol B
Propiedad básica: un nodo que contiene n palabras clave (incluidos los nodos terminales) tiene n ramas, donde [m/2]<=n<=m
La diferencia con el árbol B: en el árbol B, todos los nodos que no son hoja solo sirven como índice y no contienen la dirección de almacenamiento del registro correspondiente a la palabra clave. Solo están en el registro al que apunta el puntero de cada uno. nodo hoja. La dirección de almacenamiento de todas las palabras clave; cada palabra clave en el árbol B corresponde a la dirección de almacenamiento de un registro.
tabla de picadillo
Propiedad básica: calcula la dirección de la palabra clave en la tabla según la palabra clave proporcionada
Método de construcción
Método de direccionamiento directo: tome la palabra clave o una función lineal de la palabra clave como dirección Hash
Método de análisis numérico: tome varios dígitos de la palabra clave para formar una dirección Hash
Método cuadrado: tome los dígitos del medio después de elevar al cuadrado la palabra clave como dirección Hash
Método de dividir y dejar el resto: tome la palabra clave dividida por un número que no sea mayor que la longitud de la tabla Hash (generalmente el número primo más grande que no sea mayor que la longitud de la tabla) y divida la palabra clave por el número para obtener el resto como la dirección Hash
Métodos de manejo de conflictos
ley de direcciones abiertas
Método de sondeo lineal: después de que aparezca una dirección duplicada, sondee hacia atrás utilizando esta dirección como punto de partida hasta que aparezca el número de direcciones no utilizadas.
Método de detección de cuadrados: procese la dirección conflictiva d (d² 1) y utilice el valor calculado como dirección
Método de dirección en cadena: un método para conectar todos los sinónimos mediante una lista enlazada individualmente
clasificar
Clasificación interna: el proceso de clasificación en el que la columna a ordenar se almacena completamente en la memoria, adecuado para secuencias de elementos que no son demasiado grandes
Un método con complejidad temporal de O(n²)
Clasificación de burbujas: ① Compara elementos adyacentes. Si el primero es más grande que el segundo, cámbielos a ambos ② Haga lo mismo para cada par de elementos adyacentes, comenzando con el primer par y terminando con el último par. En este punto, el último elemento debe ser el número más grande. ③ Repita los pasos anteriores para todos los elementos excepto el último. ④ Continúe repitiendo los pasos anteriores para cada vez menos elementos hasta que no haya pares de números para comparar.
Ordenación por selección simple: suponga que el número de registros en la secuencia ordenada es n. Tomo 1, 2,..., n-1, busco el registro con el código de clasificación más pequeño de todos los registros n-i 1 (Ri, Ri 1,..., Rn) y lo intercambio con el i-ésimo registro. Después de ejecutar n-1 veces, se completa la clasificación de la secuencia de registros.
Clasificación por inserción directa: primero, los primeros datos se clasifican primero y luego, en cada pasada, se inserta un dato a ordenar en la posición apropiada de un grupo de registros que se ha ordenado según el tamaño de su clave. Se insertan todos los datos a ordenar.
Método con complejidad temporal de O(n^3/2)
Clasificación Hill: primero tome un número entero d1 menor que n como primer incremento y agrupe todos los registros del archivo. Todos los registros cuya distancia sea múltiplo de d1 se colocan en el mismo grupo. Primero realice la clasificación por inserción directa dentro de cada grupo; luego, tome el segundo incremento d2<d1 y repita la agrupación y clasificación anterior hasta el incremento dt=1 (dt<...<d2<d1)
Un método con complejidad temporal O(nlog2n)
Clasificación del montón: construya la secuencia que se ordenará en un árbol binario y luego realice ajustes de transposición para garantizar que todos los nodos secundarios sean más pequeños que sus nodos principales. En este momento, el valor del nodo raíz debe ser el valor máximo. Y construya un árbol binario nuevamente, repita las operaciones anteriores.
Clasificación por combinación bidireccional: ① Forme varios grupos binarios y ajústelos al orden dentro del grupo ② Combine los grupos binarios ordenados en un grupo y ajústelos al orden dentro del grupo ③ Combine todos los datos en un grupo para completar la clasificación
Un método con complejidad temporal O (nlog(r)m) (r es la base tomada y m es el número del montón)
Clasificación por base: configure diez espacios, denominados espacio 0, espacio 1,..., espacio 9. Primero, corresponda los registros en la secuencia a cada espacio principal uno por uno de acuerdo con el valor de un solo dígito y colóquelos en cada espacio. Complete la clasificación en cada espacio, luego saque cada registro del espacio 0 para formar una nueva secuencia y luego repita el trabajo en bits más altos hasta que se complete la clasificación de bits más altos.
Clasificación externa: los archivos que se van a ordenar no se pueden cargar en la memoria a la vez y se requieren múltiples intercambios de datos entre la memoria y el almacenamiento externo para ordenar el archivo completo.
Algoritmo convencional
Combinar clasificación: divida la secuencia inicial en m segmentos de registros más pequeños, clasifique estos segmentos de registros y compare continuamente los valores mínimos desde los extremos más pequeños de cada segmento de registros hasta que se complete la clasificación.
subalgoritmo importante
Árbol perdedor: cuando la clasificación por fusión detecta el valor mínimo, si no usa el árbol perdedor, debe comparar los valores k leídos k-1 veces. Después de usarlo, solo necesita realizar log2k veces. de seleccionar el mejor valor es O(log2k), la complejidad del tiempo de construcción del árbol es O(klog2k) y la altura del árbol perdedor es [log2k] 1
Establecer
① Para los k registros leídos, se establece un árbol binario con dos nodos cualesquiera como grupo. El valor más pequeño de cada grupo es el ganador. El número de secuencia correspondiente al perdedor se utiliza como el nodo padre de ambos, y la secuencia. El número correspondiente al ganador es El número de secuencia se utiliza como el nodo principal del nodo principal. Si queda un registro, se procesará el siguiente proceso ② Procese el registro sobrante y compare su número de secuencia con un determinado árbol binario. y fusionarlo en un árbol de acuerdo con el principio del ganador en la cima. Y conectar los valores de registro sobrantes en este nodo como sus nodos secundarios. ③ Compare los árboles binarios y fusionarlos en un árbol de acuerdo con el ganador en la cima. principio (el nodo raíz del árbol perdedor tiene solo una rama, y el resto se ajusta al árbol binario en principio)
Ajustamiento
Después de eliminar el valor mínimo en el árbol de perdedores, los registros recién leídos deben agregarse para formar el árbol de perdedores. En este momento, el árbol de perdedores debe ajustarse para cumplir con los criterios del árbol de perdedores. Método de ajuste: complete las vacantes con registros recién leídos y luego compare paso a paso de abajo hacia arriba el número de serie del ganador es el nodo principal del número de serie del perdedor hasta que se complete el ajuste.
Clasificación por selección de reemplazo: según el tamaño del búfer, se lee un registro de la memoria externa. Cuando el registro llena el búfer, se selecciona el más pequeño y se vuelve a escribir en la memoria externa. Su posición vacante se reemplaza por la siguiente. lee el registro y el registro de salida se convierte en el registro inicial actual. Parte del segmento fusionado. Si el nuevo registro ingresado es más pequeño que el registro extraído en el segmento de combinación, se generará como alternativa a otros segmentos de combinación iniciales. Repita las operaciones anteriores.
Árbol de fusión óptimo: los segmentos de fusión de diferentes longitudes se obtienen mediante clasificación por selección de reemplazo. Cada segmento se coloca en un árbol de Huffman de acuerdo con su longitud (consulte el capítulo sobre árboles para conocer el método. Comenzando desde el nodo raíz, se alcanza cada segmento). El doble de la suma del número de aristas pasadas por el nodo es el número de E/S correspondientes al árbol de fusión óptimo (número mínimo de E/S).