Galería de mapas mentales Mapa mental de estructura de datos
Este es un mapa mental sobre la estructura de datos, que incluye los conceptos básicos de estructura de datos, tablas lineales, pilas y colas, etc. ¡Espero que esto ayude!
Editado a las 2023-11-07 11:40:27,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.
estructura de datos
Capítulo uno Introducción
1. Conceptos básicos de estructura de datos.
1. Conceptos básicos y terminología
1.Datos
Un portador de información es una colección de números, caracteres y todos los símbolos que pueden ser reconocidos y procesados por computadoras que describen los atributos de las cosas objetivas.
2. Elementos de datos
La unidad básica de datos, que consta de elementos de datos, la unidad indivisible más pequeña.
3. Objetos de datos
Una colección de elementos de datos con las mismas propiedades, un subconjunto de datos.
4.Tipo de datos
Una colección de valores y un conjunto de operaciones definidas en la colección.
tipo atómico
El valor no se puede dividir
tipo de estructura
El valor se puede dividir más
tipo de datos abstractos
5. Tipos de datos abstractos
1. Definición: Un modelo matemático y un conjunto de operaciones definidas en el modelo.
2. Características: La definición sólo depende de su conjunto de características lógicas, y no tiene nada que ver con cómo se representa e implementa dentro del ordenador.
3. Representación: (objetos de datos, relaciones de datos, conjuntos de operaciones básicas)
6.Estructura de datos
1. Estructura: la relación entre elementos de datos.
2. Definición: Colección de elementos de datos que tienen una o más relaciones específicas entre sí.
3. Contenido: estructura lógica, estructura de almacenamiento, operaciones de datos.
Estructura lógica: el diseño de un algoritmo.
Estructura de almacenamiento: implementación de un algoritmo.
2. Tres elementos de la estructura de datos.
1. Estructura lógica de los datos.
1. Definición: La relación lógica entre elementos de datos, que no tiene nada que ver con el almacenamiento y es independiente de la computadora.
2. Clasificación
estructura lineal
mesa lineal
Cara a cara
estructura no lineal
recolectar
Pertenecen al mismo conjunto
Árbol
uno a muchos
Figura/Red
muchos a muchos
2. Estructura de almacenamiento de datos
1. Definición: Representación de la estructura de datos en una computadora (también llamada imagen/estructura física)
2. Incluyendo: representación de elementos de datos y representación de relaciones.
3. Clasificación
almacenamiento secuencial
Ventajas: Acceso aleatorio, los elementos ocupan el menor espacio de almacenamiento.
Desventajas: solo se puede utilizar un bloque adyacente de unidades de almacenamiento, lo que provoca una mayor fragmentación externa
almacenamiento en cadena
Ventajas: Sin fragmentación
Desventajas: los punteros de almacenamiento ocupan espacio de almacenamiento adicional y solo se puede acceder a ellos de forma secuencial;
Almacenamiento de índice
Definición: cree una tabla de índice adicional, cada elemento se denomina elemento de índice (palabra clave, dirección)
Ventajas: recuperación rápida
Desventajas: ocupa más espacio de almacenamiento; agregar y eliminar datos requiere modificar la tabla de índice, lo que lleva más tiempo.
almacenamiento de hash
Definición: Calcule directamente la dirección de almacenamiento del elemento (almacenamiento Hash) en función de la palabra clave del elemento
Ventajas: la recuperación, adición y eliminación de nodos son rápidas
Desventajas: si la función hash no es buena, se producirán conflictos entre las unidades de almacenamiento de elementos, lo que aumentará el costo de tiempo y espacio.
3. Operaciones de datos
1. Definición de operación: Señale la función de operación según la estructura lógica.
2. Implementación de la operación: Señale los pasos operativos específicos de la operación de acuerdo con la estructura de almacenamiento.
Resumen de preguntas
1. Propenso a errores
1. Pertenece a una estructura lógica
lista ordenada
2. Una cola circular es una cola representada por una tabla de secuencia. Es una estructura de datos, no una estructura de datos abstracta.
3. Los espacios de almacenamiento de diferentes nodos pueden ser discontinuos, pero los espacios de almacenamiento dentro de los nodos deben ser continuos.
4. Dos estructuras de datos diferentes, la estructura lógica y la estructura física, pueden ser exactamente iguales, pero las operaciones de datos son diferentes.
Los árboles binarios y los árboles de clasificación binaria tienen diferentes momentos para buscar nodos.
2. Algoritmos y evaluación de algoritmos.
1. Conceptos básicos de algoritmos.
1. Definición: descripción de los pasos para resolver un problema específico, una secuencia finita de instrucciones.
2.Características
1. Finitud
2.Certidumbre
3. Viabilidad
4.Entrada
5.Salida
3. Buen algoritmo
1. Corrección
2. Legibilidad
3. Robustez
4. Eficiencia y bajos requisitos de almacenamiento.
2. Medición de la eficiencia del algoritmo.
1. Complejidad del tiempo O (n)
Definición: Mide qué tan rápido aumenta el tiempo de ejecución de un algoritmo a medida que aumenta el tamaño del problema.
2. Complejidad espacial S (n)
1. Definición: Mide qué tan rápido aumenta el espacio requerido por el algoritmo a medida que aumenta el tamaño del problema.
2. El algoritmo funciona in situ: el espacio auxiliar requerido por el algoritmo es constante, es decir, O (1)
Resumen de preguntas
1. Propenso a errores
1. Fusione dos listas enlazadas ascendentes de longitud m, n en una lista enlazada descendente de m n (tome el elemento más pequeño, método de interpolación principal)
1. Mejor caso: O(min(m,n))
El que requiere menos
2. Peor caso: O(max(m,n)) =O(m n)
Ambas listas enlazadas han sido atravesadas una vez.
2. Cálculo de la complejidad del tiempo.
1.suma = i;
O(n^1/2)
k-ésima vez: suma = 1 2 3 ... k ≥n
2.i=i*2
O(log₂n)
3. Algoritmo recursivo
1.T(n)=2T(n/2) n (n>1) (cuando n=1: T(n)=1)
O(nlog₂n)
2. Supongamos n = 2 ^ k, primero encuentre la fórmula general de T (2 ^ k) de acuerdo con la condición de recursividad y luego conviértala a n, es decir, obtenga la complejidad del tiempo.
3. Para el mismo algoritmo, cuanto mayor sea el nivel del lenguaje implementado, menor será la eficiencia de ejecución.
Capítulo 2 Tabla lineal
1. Definición y operaciones básicas de tablas lineales.
1.Definición de tabla lineal
1.Definición: secuencia finita del mismo tipo de datos
2. Nota: Las listas lineales son estructuras lógicas, las listas secuenciales y las listas vinculadas se refieren a estructuras de almacenamiento.
2. Operaciones básicas de tablas lineales.
1. Nota: & representa una referencia en C. Si se pasa una variable de puntero y es necesario cambiarla en el cuerpo de la función, se debe usar una referencia a la variable de puntero (los punteros a punteros también se pueden usar en C)
2. Operaciones principales
2. Representación secuencial de tablas lineales.
1. Definición de tabla de secuencia
1. La tabla de secuencia requiere tres partes.
La posición inicial del espacio de almacenamiento.
Espacio máximo de almacenamiento de la tabla de secuencia.
La longitud actual de la tabla de secuencia.
2. Asignación estática
3. Asignación dinámica
4. Declaración de asignación dinámica
Lenguaje C: L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
C: L.data=nuevo ElemType[InitSize];
5. Nota: La asignación dinámica no es almacenamiento en cadena, también es una estructura de almacenamiento secuencial y la estructura física no cambia: es un método de acceso aleatorio, pero el tamaño del espacio asignado se puede determinar en tiempo de ejecución.
6. Características: acceso aleatorio, alta densidad de almacenamiento, inserción y eliminación requieren mover una gran cantidad de elementos
2. Implementación de operaciones básicas en la tabla de secuencia.
1. Operación de inserción O (n)
2. Eliminar operación O (n)
3. Buscar por valor (búsqueda secuencial) O(n)
Resumen de preguntas
1. Propenso a errores
1. La tabla lineal debe ser una secuencia finita.
2. Inserte un número en la i-ésima posición de la tabla de secuencia. El valor legal de i es: 1≤i≤n 1.
Insertar en la posición n 1 equivale a agregar al final de la tabla
2. Algoritmo
1. Invertir todos los elementos de la lista de secuencia.
1. Escanee la primera mitad e intercambie el i-ésimo elemento (0≤i<n/2) con el elemento correspondiente (n-i-1) en la segunda mitad.
Espacio O(1)
1.1 En la matriz A [m n], hay dos tablas de secuencia con longitudes myn, y las posiciones están intercambiadas.
1. Pensamientos
1. Primero invierta el orden de todos los elementos en A (n,n-1,...,m,m-1,...,1)
2. Luego use el algoritmo de orden inverso para los primeros n elementos y los últimos m elementos respectivamente.
2. Date cuenta
1. Configure la función Reverse() para implementar el orden inverso desde cualquier posición de izquierda a derecha.
2. Configure la función Exchange() para realizar el intercambio de posición de dos tablas de secuencia con longitudes de myn.
3.Reverse() tiene tres parámetros. El primero es la matriz que debe invertirse siguiendo el método anterior. Intercambie el elemento izquierdo con su elemento correspondiente (derecha-izquierda-1)
4.Exchange() tiene tres parámetros, el primero es la matriz A y las longitudes restantes son myn.
5.Exchange() llama a Reverse() y pasa parámetros (A,0,m n-1) por primera vez. La segunda vez (A,0,n-1), la tercera vez (A,n,m n-1)
3. Descripciones similares
1. Mueva los elementos en A a las posiciones p izquierdas.
1. Trate los primeros p elementos como matriz B
2. Trate los últimos elementos n-p como matriz C
3. Completa el intercambio de las posiciones B y C.
Tiempo O(n), espacio O(1)
2. La lista secuencial (no ordenada) elimina todos los elementos de datos con valor x
1. Utilice k para registrar el número de elementos que no son iguales a x (valor inicial = 0), que es la posición actual que debe insertarse.
2. Escanee la tabla de secuencia. Si no es x, coloque este elemento en la k-ésima posición y k aumentará en 1.
3. La longitud de la última tabla modificada = k
Tiempo O(n), espacio O(1)
2.1 La lista secuencial (no ordenada) elimina todos los elementos con valores entre syt
1. Simplemente cambie k para registrar el número de elementos menores que so mayor que t.
3. La lista de secuencia ordenada elimina todos los elementos entre los valores dados syt
1. Primero busque el primer elemento ≥ s (el primer elemento eliminado)
2. Busque el primer elemento> t (el siguiente elemento después del último elemento eliminado)
3. Mueva directamente los siguientes elementos hacia adelante y finalmente modifique la longitud de la tabla.
4. Eliminar todos los elementos con valores duplicados de la lista ordenada.
1. La idea es similar a la clasificación por inserción directa. Inicialmente, el primer elemento se considera una lista ordenada no repetitiva.
2. Determine a su vez si los siguientes elementos son iguales que el último elemento de la lista ordenada no repetitiva anterior.
3. Dos punteros: i siempre apunta al último elemento de la lista ordenada, j es el puntero de trabajo
4.1 Cambiar lista ordenada a lista desordenada
1. Usando una tabla hash, el tiempo es O (n)
5. Fusionar dos listas ordenadas en una lista ordenada y devolver el resultado mediante la función
1. La función tiene tres parámetros, el último es la lista vinculada de resultados, tipo de referencia
2. Compare los elementos del encabezado de las dos listas vinculadas en orden y coloque el más pequeño en la nueva lista.
3. Verifique qué tabla queda y agregue la parte restante al final de la nueva tabla.
6. Una secuencia ascendente S de longitud L, la mediana es ┍L/2┑ Encuentre la mediana de dos secuencias ascendentes de igual longitud A y B
1. Primero encuentre las medianas a y b de A y B respectivamente y compárelas.
2. Si a=b, entonces a es la mediana requerida
3. Si a<b, descarte la mitad más pequeña de A y descarte la mitad más grande de B. Se requiere que las longitudes de los dos descartes sean iguales.
4. Si a>b, descarte la mitad mayor de A y descarte la mitad más pequeña de B. Se requiere que las longitudes de los dos descartes sean iguales.
5. Repita los pasos 2, 3 y 4 hasta que ambas secuencias contengan solo un elemento y el más pequeño sea la mediana requerida.
Nota: Para garantizar que las longitudes descartadas sean iguales cada vez
1. Cuando la secuencia es un número impar, se conserva el punto medio.
2. Cuando la secuencia es un número par, debido a que la posición del punto medio es relativamente primera, Por lo tanto, al descartar la parte más pequeña, debes descartar el punto medio junto. Para garantizar que la longitud descartada sea igual a la parte mayor
3. Los casos 3 y 4 deben discutirse por separado.
Tiempo O(log₂n), espacio O(1)
7. Si el número de elementos con valor x > n/2, se llama elemento principal Encuentre el elemento principal de A.
1. Seleccionar elementos principales candidatos
1. Coloque el primer número a en c como elemento principal candidato y registre el número de apariciones de a como 1.
2. Si el siguiente elemento = a, cuente 1, de lo contrario cuente -1
3. Cuando el recuento disminuya a 0, reemplace el elemento principal candidato, coloque el siguiente número en c y vuelva a contar = 1
4. Repetir proceso hasta el final.
2. Determinar si el elemento en c es el elemento principal real.
1. Escanee nuevamente para contar el número de apariciones de c. Si >n/2, es el elemento principal.
Tiempo O(n), espacio O(1)
Nota: Si utiliza la clasificación por conteo: tiempo O(n), espacio O(n)
8. Encuentra el entero positivo más pequeño que no aparece en la matriz, menos tiempo
1. Intercambie espacio por tiempo, asigne una matriz B [n] para marcar, registre si aparece un número entero positivo de 1-n y el valor inicial es todo 0
2. No se realiza ninguna acción para números menores o iguales a 0, o mayores que n.
3. Si 0<A[i]≤n, sea B[A[i]-1]=1; de lo contrario, no se realizará ninguna operación.
4. Recorra B, encuentre el primer B [i] == 0 y devuelva i 1. Si no todos son 0, devuelva i 1 (i = n al saltar del bucle)
3. Representación vinculada de una tabla lineal.
1. Definición de lista enlazada individualmente
1.Descripción de los tipos de nodos.
2. Características: desperdicio de espacio, acceso no aleatorio
3. La diferencia entre puntero principal y nodo principal
1. Independientemente de si hay un nodo principal o no, el puntero principal siempre apunta al primer nodo de la lista vinculada.
2. El nodo principal es el primer nodo en la lista vinculada con el nodo principal y generalmente no almacena información.
4. Ventajas de introducir nodos principales.
1. La operación en la primera posición de la lista vinculada es coherente con la operación en otras posiciones.
2. Independientemente de si la lista vinculada está vacía o no, el puntero principal apunta al puntero no nulo del nodo principal, y las listas vacías y no vacías se tratan de la misma manera.
2. Implementación de operaciones básicas en listas enlazadas individualmente.
1. Método de inserción de encabezado para crear una lista vinculada
2. Cree una lista vinculada utilizando el método de inserción de cola
3. Encuentre el valor del nodo por número de serie
4. Encuentra nodos de la tabla por valor.
5. Insertar operación de nodo
Operación de inserción directa: busque primero el nodo anterior, la complejidad del tiempo es O (n)
Extensión: convierta la operación de inserción hacia adelante en una operación de inserción hacia atrás y luego intercambie los datos de los dos nodos. La complejidad del tiempo es O (1).
6. Eliminar operación de nodo
Busque primero el nodo predecesor y luego elimine el nodo, O (n)
Extensión: primero intercambie datos con el nodo sucesor y luego elimine el nodo sucesor, O (1)
7. Encuentra la operación de longitud de la tabla.
Cuente el número de nodos de datos
3. Lista doblemente enlazada
1. Descripción de tipos de nodos en listas doblemente enlazadas
2. Insertar operación
3. Eliminar operación
4. Lista circular enlazada
1. Lista circular individualmente enlazada
1. Condición nula: si el puntero del nodo principal apunta al puntero principal
2. Cuando opere en el principio y el final de una lista enlazada individualmente: no configure el puntero principal, solo configure el puntero final, lo cual es más eficiente.
3. Puede recorrer toda la lista vinculada comenzando desde cualquier nodo.
2. Lista circular doblemente enlazada
Condición nula: el campo anterior y el campo siguiente del nodo principal apuntan al puntero principal.
5. Lista enlazada estática
1. Definición: utilice una matriz para describir una estructura de almacenamiento encadenada, que también tiene un campo de datos y un campo de puntero. El puntero es la dirección relativa del nodo (subíndice de matriz), también llamado cursor.
2.Forma
3.Fin de bandera: siguiente==-1
4.Atención
1. Al igual que la tabla de secuencia, se debe asignar un espacio de memoria continuo por adelantado.
2. La inserción y eliminación solo requieren modificar el puntero y no requieren mover elementos.
3. Muy inteligente en lenguajes de alto nivel (Básico) que no admiten punteros.
6. Comparación entre lista de secuencia y lista enlazada
1.Método de acceso
Se puede acceder a la lista de secuencia de forma secuencial o aleatoria. Solo se puede acceder a la lista vinculada de forma secuencial desde el encabezado.
2. Estructura lógica y estructura física.
3. Buscar, insertar y eliminar
1. Buscar por valor
Cuando está fuera de servicio, es O(n)
Cuando se solicita, la tabla de secuencia se puede buscar por la mitad, O(log₂n)
2. Buscar por número de serie
La lista de secuencia es O (1), la lista vinculada es O (n)
4. Asignación de espacio
5. Cómo elegir la estructura de almacenamiento
1. Consideraciones de almacenamiento
Las listas enlazadas se utilizan cuando es difícil estimar la longitud y el tamaño del almacenamiento, pero la densidad de almacenamiento de las listas enlazadas es baja.
2. Consideraciones basadas en operaciones
Acceda con frecuencia a elementos de datos por número de serie utilizando una tabla de secuencia
3. Consideraciones ambientales
Las listas secuenciales son fáciles de implementar, las listas vinculadas se basan en punteros
Si es más estable, elija la lista de secuencia; si es más dinámica, elija la lista vinculada.
Resumen de preguntas
1. Propenso a errores
1. La estructura de almacenamiento en cadena es más conveniente que la estructura de almacenamiento secuencial para representar varias estructuras lógicas.
2. El almacenamiento secuencial no solo se puede utilizar para almacenar estructuras lineales, sino también estructuras de gráficos y árboles (árboles binarios completos).
3. Las listas enlazadas estáticas necesitan asignar un gran espacio continuo, y la inserción y eliminación no requieren elementos móviles.
4. Si se utiliza una lista enlazada individualmente para representar la cola, se debe utilizar una lista enlazada circular con un puntero de cola.
5. Dada una matriz unidimensional, el tiempo mínimo para construir una lista enlazada individualmente ordenada es O (nlog₂n)
Primero ordene la matriz y luego construya una lista enlazada individualmente
6. Las operaciones más utilizadas en listas vinculadas son insertar después del último elemento y eliminar el primer elemento. La operación que ahorra más tiempo es.
1. Lista enlazada circular única sin nodo principal ni puntero final
2. Incluso si es una lista doblemente enlazada, siempre que no haya un puntero de cola, se debe encontrar el nodo de cola y el tiempo es O (n)
ten cuidado
1. Al insertar un nodo: primero opere en el nodo sucesor del nodo insertado y luego opere en el nodo original
Capítulo 3 Apilar y poner en cola
1.Pila
1.Concepto básico de pila.
1. Definición de pila: una lista lineal con inserción y eliminación en un extremo
2.Características de la pila: último en entrar, primero en salir
3. Operaciones básicas de la pila: sin restricciones, se puede utilizar directamente
2. La estructura de almacenamiento secuencial de la pila.
1. Implementación de pila secuencial.
1. Puntero superior de la pila: S.top Elemento superior de la pila: S.data[S.top]
2. Empuje a la pila: el puntero primero se incrementa en 1 y luego el valor se envía al elemento superior de la pila.
3. Haga estallar la pila: primero tome el valor del elemento en la parte superior de la pila y luego disminuya el puntero en la parte superior de la pila en 1.
4. Condiciones para el juicio vacío y el juicio pleno: varían debido a las diferentes condiciones reales dadas.
2. Operaciones básicas de pila secuencial.
3. Pila compartida
1. Definición: Coloque la parte inferior de las dos pilas en ambos extremos del espacio compartido y la parte superior de las dos pilas se extienda hacia el medio.
2. Juicio en blanco: top0=-1 top1=MaxSize
3. Frase completa: top1-top0=1
Esta fórmula es válida sólo bajo las condiciones anteriores para sentencia nula. Si las condiciones son diferentes, la fórmula también será diferente.
4. Empuje hacia la pila: top0 primero agrega 1 y luego asigna un valor, top1 primero disminuye 1 y luego asigna un valor, y ocurre lo contrario cuando sale de la pila.
Nota: El puntero superior de la pila apunta a las diferentes operaciones del elemento superior de la pila y el elemento al lado del elemento superior de la pila (S.top=0)
1. Elemento superior de la pila
Empujar hacia la pila:S.data[S.top]=x Extraer de la pila:x=S.data[S.top--]
2. El siguiente elemento del elemento superior de la pila.
Empujar hacia la pila:S.data[S.top]=x Extraer de la pila:x=S.data[--S.top]
3. Las condiciones de evaluación para pila vacía y pila llena también cambiarán.
3. Estructura de almacenamiento de cadena de pila
1. Ventajas: Facilita que múltiples pilas compartan espacio de almacenamiento, mejora su eficiencia y evita el desbordamiento de la pila.
2. Características: Todas las operaciones se realizan en la cabecera de la tabla. Por lo general, no hay un nodo principal. El puntero principal se utiliza como puntero superior de la pila para facilitar la inserción/eliminación de nodos.
4. Secuencia pop de pila
1. Después de cada elemento de la secuencia pop, todos los elementos más pequeños forman una serie decreciente.
Para secuencias crecientes
2.f(n)=
f(2)=2, f(3)=5, f(4)=14
Resumen de preguntas
1. Propenso a errores
1. La pila y la cola tienen la misma estructura lógica, no una estructura de almacenamiento.
Las listas, pilas y colas lineales son todas estructuras lineales.
2. La lista vinculada no tiene un nodo principal y todas las operaciones se realizan al principio de la lista. Es la pila de enlaces más inadecuada.
1. Una lista enlazada circular unidireccional con solo punteros de nodo principal y sin punteros de nodo final
2. Motivo: después de insertar el nodo, aún es necesario convertirlo en una lista circular enlazada individualmente y encontrar el nodo de cola, lo que lleva O (n) tiempo.
3.Solución
1. Si se utiliza el nodo principal: la parte superior de la pila toma el primer nodo y el puntero de la pila toma el nodo principal.
2. Si no hay un nodo principal: la parte superior de la pila toma el segundo nodo y el puntero de la pila toma el primer nodo.
3. Ambos mantienen el primer nodo sin cambios y no necesitan encontrar el elemento final de la tabla.
3. Inserte un nodo x en una pila de cadena (sin el nodo principal) cuyo puntero superior sea superior
x->siguiente=arriba; arriba=x
4. La secuencia de inserción es 1,2,...,n, y la secuencia pop es P1, P2,...,Pn. Si P2 = 3, el número de valores posibles de P3 es n-1.
1. Obviamente, se pueden obtener 4, 5,..., n después de 3
2.P1 puede ser 1 y P3 puede ser 2.
3.P1 puede ser 2 y P3 puede ser 1
4.P1 puede ser 4 y P3 puede ser cualquier número excepto 1, 3 y 4.
5. Al reescribir un programa recursivo de forma no recursiva, es posible que la pila no sea aplicable
1. Calcular la iteración de la secuencia de Fibonacci solo requiere un bucle
6. Las definiciones de los punteros en la parte superior de la pila, el principio de la cola y el final de la cola no son únicos. Asegúrese de revisar la pregunta detenidamente.
2. Algoritmo
1. Determinar si una lista enlazada es centralmente simétrica
1. Empuje la primera mitad de los elementos en la pila en secuencia. Al procesar la segunda mitad, al acceder a un elemento de la lista vinculada, saque un elemento de la pila para determinar si son iguales.
2. Tenga en cuenta que no hay ninguna anomalía cuando el número es par. Cuando el número es impar, se debe omitir primero el nodo central.
3. No es necesaria una pila real, simplemente use la matriz como pila y use el puntero de trabajo i como puntero superior de la pila.
2.Cola
1. Concepto básico de cola
1. Definición: Tabla lineal que solo permite la inserción en un extremo de la tabla y el borrado en el otro extremo.
2.Operaciones básicas
2. Estructura de almacenamiento secuencial en cola
1. Almacenamiento secuencial en cola
1. Dos punteros: el frente apunta al elemento principal de la cola y el trasero apunta a la siguiente posición del elemento final de la cola.
2. Estado inicial (equipo vacío): Q.front==Q.rear==0
3. Ingrese a la cola: primero envíe el valor al último elemento de la cola y luego agregue 1 al último puntero de la cola.
4. Quitar de la cola: primero tome el valor del elemento principal y luego agregue 1 al puntero principal
5. Existe un desbordamiento falso
6.Descripción del tipo
2. Cola circular
1. Estado inicial (equipo vacío): Q.front==Q.rear==0
2. Avance el puntero frontal: Q.front=(Q.front 1)%MaxSize
3. Avance el puntero de cola de cola: Q.rear=(Q.rear 1)%MaxSize
4. Longitud de la cola: (Q.rear MaxSize-Q.front)%MaxSize
5. Distinga entre equipos vacíos y llenos.
1. Sacrifica una unidad y únete al equipo para usar una unidad menos (comúnmente usado)
Cola llena: (Q.trasero 1)%MaxSize==Q.delantero
Equipo vacío: Q.front==Q.rear
Número de elementos en la cola: (Q.rear MaxSize-Q.front)%MaxSize
2. Agregue un miembro de datos que indique la cantidad de elementos: Q.size
3. Agregue miembros de datos de etiqueta: operación de eliminación de etiqueta = 0: la cola está vacía, operación de inserción de etiqueta = 1: la cola está llena
3. Operación de cola circular
3. Estructura de almacenamiento de la cadena de colas
1. Almacenamiento en cadena de cola
1.Descripción del tipo
2. Lista enlazada única con nodo principal: operaciones unificadas de inserción y eliminación
3. Adecuado para situaciones en las que los elementos de datos cambian mucho, no hay desbordamiento de cola ni asignación de almacenamiento irrazonable en varias colas.
2. Operaciones básicas de colas encadenadas.
4. Cola de doble extremo
1. Definición: una cola que permite que ambos extremos (front-end y back-end) entren y salgan de la cola.
2. Estructura lógica: estructura lineal.
3. Entrada restringida deque
4. Deque restringido de salida
Resumen de preguntas
1. Propenso a errores
1. Cuando se utiliza una cola de almacenamiento encadenada para realizar una operación de eliminación, se pueden modificar tanto el puntero principal como el final.
Generalmente, solo es necesario modificar el puntero principal de la cola. Si solo hay un elemento, es necesario modificar el puntero final.
2. En la cola en cadena, cuando el elemento señalado por x ingresa a la cola, realice la operación
1.trasero->siguiente=x,x->siguiente=nulo,trasero=x;
2. Debido a que x se inserta al final de la cola, debe establecerse en vacío (frase intermedia), que es más estricta
2. Tipo de pregunta
1. Determinar el estado inicial y completo de la cola circular.
1. Matriz A [0...n-1], el frente apunta a la cabeza del equipo, la parte trasera apunta a la cola del equipo El primero se almacena en A[0], preguntando sobre la situación inicial.
1. Al ingresar a la cola, el frente no se mueve y el trasero 1 finalmente apunta a A [0]. Entonces frente inicial = 0, trasero = n-1
Nota: Cuando se trata de problemas específicos, puede utilizar algunas situaciones especiales (dibujar bocetos simples) para juzgar las situaciones vacías y llenas, lo cual es más rápido que pensar directamente.
2. Determine la secuencia que no puede obtener la cola de doble extremo restringida de entrada / salida
1. Ingresar directamente según las 4 opciones una por una, utilizando el método de eliminación
2. Situación de error general: el último número en cola no se puede intercalar entre los dos números que están adelantados (2,3,1)
3. Aplicación de pila y cola.
1. Aplicación de coincidencia de pila en paréntesis
1. Pensamientos
1. Configure una pila vacía y lea los paréntesis secuencialmente
2. Si es ), saldrá de la pila si se combina con la parte superior de la pila (o es ilegal).
3. Si es (, empújelo a la pila como una nueva expectativa más urgente).
4. El algoritmo finaliza y la pila está vacía; de lo contrario, la secuencia de corchetes no coincide
2. Aplicación de pila en evaluación de expresiones.
1. Expresión postfijo: el operador está después del operando, sin paréntesis
2. El proceso de convertir infijo en sufijo.
1. Agregue paréntesis a todos los operadores y sus operandos según la precedencia de los operadores (no es necesario agregar paréntesis si existen originalmente)
2. Mueva el operador después del paréntesis correspondiente.
3. Retire los soportes
Nota: La expresión de prefijo coloca el operador delante del paréntesis y los demás son iguales.
3. Idea de algoritmo de infijo a sufijo
1. Números: agregados directamente a la expresión del sufijo
2. Si es (: empujar para apilar
3. Si es): agregue los operadores en la pila a la expresión postfijo en secuencia hasta ( y elimine ( en la pila
4.Si - */
1. La pila está vacía y empujada hacia la pila.
2. La parte superior de la pila está ( , empujada hacia la pila
3. Mayor que la prioridad del elemento en la parte superior de la pila, empújelo hacia la pila [si está en el mismo nivel, ejecute 4 también]
4. De lo contrario, [menor o igual a la prioridad de la parte superior de la pila], coloque los operadores en secuencia hasta que el operador esté por debajo o (o la pila esté vacía), empújelo hacia la pila.
5. Se completa el recorrido. Si la pila no está vacía, muestre todos los elementos en secuencia.
4. Proceso de expresión de cálculo de sufijos
1. Escanea cada término de la expresión secuencialmente.
2. Operando: empujar sobre la pila
3. Operador <op>: salga continuamente de dos operandos xey de la pila para formar una instrucción de operación x<op>y y envíe el resultado del cálculo nuevamente a la pila.
3. Aplicación de pila en recursividad.
1. Dos condiciones
1. Expresión recursiva (cuerpo recursivo)
2. Condiciones de contorno (salida recursiva)
2. La esencia de la recursividad: ¿se puede transformar el problema original en un problema más pequeño con las mismas propiedades pero a menor escala?
3. Desventajas: hay muchas recursiones que pueden provocar fácilmente un desbordamiento de la pila; contiene muchos cálculos repetidos y no es eficiente.
4. Ventajas: El código es simple y fácil de entender.
5. Conversión: debe lograrse con la ayuda de la pila.
4. Aplicación de cola en recorrido jerárquico.
5. Aplicación de colas en sistemas informáticos.
1. Resuelva el problema de la discrepancia de velocidad entre el host y los dispositivos externos
1. Configure un búfer de datos de impresión, pausar la salida cuando esté llena, hacer otras cosas y esperar a que la impresora envíe una solicitud.
2. Resolver problemas de competencia de recursos causados por múltiples usuarios.
1. Organice cada solicitud en una cola de acuerdo con el orden de tiempo y asigne la CPU al primer usuario de la cola cada vez.
Resumen de preguntas
subtema
4. Almacenamiento comprimido de matrices especiales.
1. Definición de matriz (estructura lógica)
2. Estructura de almacenamiento de la matriz (almacenamiento secuencial)
1. Dos métodos de mapeo: primero fila, primero columna
3. Almacenamiento comprimido de matrices.
1. Almacenamiento comprimido: varios elementos con el mismo valor solo asignan un espacio, 0 no asigna espacio
2. Matrices especiales: muchos elementos matriciales idénticos o elementos cero, distribuidos regularmente
1. Matriz simétrica
2.matriz triangular
1. Matriz triangular inferior
2. Matriz triangular superior
3. Matriz tridiagonal
4. Matriz dispersa
1. Almacenamiento: configure elementos distintos de cero y las filas y columnas correspondientes en un triplete (etiqueta de fila, etiqueta de columna, valor)
2. Desventajas: Pérdida de características de acceso aleatorio.
Capítulo 4 Árboles y árboles binarios
1.Concepto básico de árbol
1. Definición de árbol
2.Terminología básica
1. Grado de nodo
El número de nodos secundarios de un nodo.
2. Grado de árbol
El grado máximo de un nodo en un árbol.
3.Profundidad del nodo
Comenzando desde el nodo raíz y acumulando capa por capa de arriba a abajo.
4.Altura del nodo
Comenzando desde los nudos de las hojas y acumulando capa por capa de abajo hacia arriba.
5. Altura del árbol (profundidad)
El número máximo de niveles de nodos en el árbol.
6. El camino entre dos nodos.
La secuencia de nodos que pasan entre dos nodos.
7. Longitud del camino
El número de aristas pasadas en el camino.
8.Atención
Las ramas del árbol están dirigidas (los padres señalan a los niños), el camino es de arriba a abajo y no hay camino entre dos niños.
3. Naturaleza de los árboles
1. Número de nodos = grado de todos los nodos 1
2. El i-ésimo nivel de un árbol con grado m tiene como máximo m^(i-1) nodos.
3. Un árbol m-ario con altura h tiene como máximo (m^h-1)/(m-1) nodos.
Suma de series geométricas
2. Concepto de árbol binario
1. La definición de árbol binario y sus principales características.
1. Definición de árbol binario
1. Los subárboles se pueden dividir en izquierdo y derecho, y el orden no se puede invertir arbitrariamente.
2. La diferencia entre un árbol binario y un árbol ordenado de grado 2
1. Un árbol de grado 2 tiene al menos 3 nodos y un árbol binario puede estar vacío.
2. El orden izquierdo y derecho de los hijos de un árbol ordenado con grado 2 es relativo a otro hijo. Un niño no necesita distinguir entre izquierda y derecha. Se determina el orden izquierdo y derecho de un árbol binario
2. Varios árboles binarios especiales.
1. Árbol binario completo
Cada nivel del árbol contiene la mayor cantidad de nodos.
2. Árbol binario completo
1. Definición: Cada nodo corresponde a un árbol binario completo, no necesariamente el máximo en cada nivel.
2. Naturaleza
1. Los nodos de hoja están solo en las dos capas más grandes.
2. Si solo hay un nodo con grado 1, el nodo solo tiene hijos
3. Árbol de clasificación binaria
1. Las claves de todos los nodos en el subárbol izquierdo son menores que las del nodo raíz.
2. Las palabras clave de todos los nodos en el subárbol derecho son mayores que las del nodo raíz.
3. Los subárboles izquierdo y derecho son cada uno de ellos un árbol de clasificación binario.
4.Árbol binario equilibrado
La diferencia de profundidad entre los subárboles izquierdo y derecho de cualquier nodo no excede 1
3. Propiedades de los árboles binarios
1.n0=n₂ 1
Número de nodos de hoja = número de nodos con grado 2 1 (n=n0 n₁ n₂=n₁ 2n₂ 1)
2. La enésima capa tiene como máximo 2 ^ (n-1) nodos.
3. Un árbol binario con altura h tiene como máximo 2^h-1 nodos.
4. Para árboles binarios completos
1. El nodo padre i/2 del nodo i (tome el límite)
2. El hijo izquierdo del nodo i es 2i y el hijo derecho es 2i 1
3. El nivel donde se encuentra el nodo i es ㏒₂i (tomar el límite) 1
5.La altura de un árbol binario completo con n nodos es ㏒₂n (quitado del límite) 1
2. Estructura de almacenamiento del árbol binario.
1.Almacenamiento secuencial
1. Adecuado para árboles binarios completos y árboles binarios completos.
2. Generalmente, algunos nodos vacíos que no existen se agregan al árbol binario.
3. Nota: Solo iniciando el almacenamiento desde el subíndice 1 de la matriz se pueden satisfacer las propiedades anteriores.
Es fácil ignorarlo al escribir un programa.
4. Distinga entre el almacenamiento secuencial de árboles y árboles binarios.
1. En el árbol: el subíndice de la matriz es el número de nodo y el contenido sobre el subíndice indica la relación entre los nodos.
2. En un árbol binario: el subíndice representa tanto el número de nodo como la relación entre nodos.
2. Almacenamiento en cadena
1. La lista vinculada binaria tiene tres campos: datos, lchild, rchild
2. Una lista enlazada binaria con n nodos tiene n 1 campos de enlace vacíos (el nodo raíz no usa un puntero) para formar una lista enlazada de pistas.
3. Recorrido de árbol binario y árbol binario de pistas
1. recorrido del árbol binario
1. Recorrido de reserva
2. Recorrido en orden
3. Recorrido posterior al pedido
El orden se refiere a cuándo se visita el nodo raíz.
4. Conversión de algoritmos recursivos y algoritmos no recursivos (orden medio)
1. Pensamientos
1. Primero escanee todos los nodos izquierdos del nodo raíz (no visitado) y empújelos hacia la pila uno por uno.
2. Extraiga un nodo de la pila (no queda ningún hijo secundario o ya ha sido visitado) y acceda a él.
3. Escanee su hijo derecho y empújelo hacia la pila.
4. Luego escanee todos los nodos izquierdos del hijo derecho y empújelos hacia la pila uno por uno.
5. Continúe así hasta que la pila esté vacía.
2. Implementación del algoritmo
3. La eficiencia de ejecución de los algoritmos no recursivos es mayor que la de los algoritmos recursivos.
5. Recorrido de nivel (cola)
1. Pensamientos
1. Primero coloque el nodo raíz en la cola, luego quítelo de la cola y acceda al nodo.
2. Si hay un subárbol izquierdo, agregue el nodo raíz del subárbol izquierdo a la cola.
3. Si hay un subárbol derecho, agregue el nodo raíz del subárbol derecho a la cola.
4. Luego retire la cola y visite el nodo de retirada de la cola.
5. Repita hasta que la cola esté vacía.
2. Implementación del algoritmo
6. Construya un árbol binario a partir de la secuencia transversal.
1. Reserva y reserva a mitad de camino
1. En preorden: el primero es el nodo raíz
2. En orden: el nodo raíz se divide en dos subsecuencias, el subárbol delantero izquierdo y el subárbol trasero derecho.
3. En preorden: busque dos subsecuencias, y el primer nodo de cada una también es el nodo raíz.
2. Orden posterior y a mitad del pedido
El último nodo en postorden es equivalente al primer nodo en preorden
3. No se permiten el primer pedido ni el último pedido.
2. Árbol binario de pistas
1. Conceptos básicos
1.Propósito: Acelerar la búsqueda de predecesores y sucesores de nodos.
2. Reglamentos
1. Si no hay un subárbol izquierdo, deje que lchild apunte al nodo predecesor; si no hay un subárbol derecho, deje que rchild apunte al nodo sucesor.
El predecesor y el sucesor se determinan mediante un método transversal específico.
2. Agregue dos campos de bandera para indicar si el puntero actual se refiere al predecesor (1) o al hijo izquierdo (0)
3.Pista: Indicaciones sobre predecesores y sucesores
4. Subprocesamiento: el proceso de atravesar un árbol binario en un orden determinado para convertirlo en un árbol binario subproceso.
2.Construcción
1. La esencia de las pistas
1. Recorra el árbol binario una vez y verifique si los campos de puntero izquierdo y derecho del nodo están vacíos. Si están vacíos, cámbielos para que apunten a las pistas predecesoras y sucesoras.
2. En la secuencia transversal en orden: el primer nodo es el nodo más a la izquierda y el último nodo es el nodo más a la derecha.
3. Nodo precursor
1. El puntero izquierdo es la pista y el nodo al que apunta es el nodo predecesor.
2. El puntero izquierdo es el hijo izquierdo y el nodo más a la derecha de su subárbol izquierdo es el nodo predecesor.
4. Nodo sucesor
1. El puntero derecho es la pista y el nodo al que apunta es el nodo sucesor.
2. El puntero derecho es el hijo derecho y el nodo más a la izquierda de su subárbol derecho es el nodo sucesor.
2. Implementación del recorrido en orden de subprocesos
3. A veces, también se agrega un nodo principal a la lista vinculada de pistas para formar una lista vinculada de pistas bidireccional.
1.lchild apunta al nodo raíz, rchild apunta al último nodo recorrido en orden
2. Recorrido en orden, el primer nodo lchild y el último nodo rchild apuntan al nodo principal
3.Traverse
1. Se puede implementar un algoritmo no recursivo para atravesar árboles binarios utilizando árboles binarios de pistas.
1. Primer nodo Primer nodo (nodo más a la izquierda) en el orden medio
2. El nodo sucesor Nextnode en el orden medio
2. Implementación del algoritmo
4.árbol, bosque
1. Estructura de almacenamiento de árboles
1. Expresión de los padres
1. Definición: almacenamiento de espacio continuo, cada nodo agrega un pseudopuntero para indicar la posición de los padres en la matriz, el subíndice del nodo raíz es 0 y su pseudopuntero es -1
2. Características: Los padres se pueden obtener rápidamente, pero el niño debe atravesar toda la estructura.
2. Representación infantil
1. Definición: conecte los hijos de cada nodo en una estructura lineal utilizando una única lista vinculada
2. Características: Es conveniente preguntar por los niños, pero inconveniente preguntar por los padres.
3. Notación de los hermanos de los niños (hijo de la izquierda, hermano de la derecha)
1. Definición: el puntero izquierdo apunta al primer hijo, el puntero derecho apunta al primer hermano y la lista binaria vinculada se utiliza como estructura de almacenamiento.
2. Ventajas: conveniente para convertir un árbol en un árbol binario, fácil de encontrar hijos
3. Desventajas: es problemático encontrar padres. Será conveniente agregar padres para señalar a los padres.
2. Conversión de árboles, bosques y árboles binarios.
1. Convierta el árbol en un árbol binario.
El puntero izquierdo apunta al primer hijo, el puntero derecho apunta al primer hermano, la raíz no tiene hermanos y el árbol binario no tiene un subárbol derecho.
2. Convertir bosque en árbol binario
La raíz de cada árbol binario sirve como subárbol derecho del árbol binario anterior.
3. Convertir árbol binario en bosque (único)
1. La raíz y el subárbol izquierdo del árbol binario se utilizan como la forma de árbol binario del primer árbol y luego se convierten en un árbol (el hijo derecho se convierte en hermano)
2. El subárbol derecho de la raíz y su hijo izquierdo sirven como segundo árbol, y el hijo derecho sirve como tercer árbol, y así sucesivamente.
3. Atravesamiento de árboles y bosques.
1. Primer recorrido de raíz del árbol.
Visite primero la raíz y luego recorra cada subárbol de izquierda a derecha, que es lo mismo que el recorrido de la raíz primero del árbol binario correspondiente.
2. Recorrido de la raíz posterior del árbol.
Recorra cada subárbol de izquierda a derecha y luego visite la raíz, que es lo mismo que el recorrido de la raíz media del árbol binario correspondiente.
3. Recorrido del bosque con reserva previa.
Igual que el recorrido de raíz primero de un árbol binario
4. Atraviesa el bosque en secuencia.
Igual que el recorrido de raíz en un árbol binario
4. Aplicación de árboles - búsqueda sindical.
1.3 operaciones
1.Union (S, Root1, Root2): fusiona dos subcolecciones y conecta la raíz Root2 con la raíz Root1
S[Raíz2]=Raíz1
2.Find(S,x): Encuentra la raíz del árbol que contiene x hasta encontrar un número negativo
mientras(s[x]>=0) x=S[x]; devolver x;
3.Inital(es): Cada elemento del conjunto S se inicializa como un subconjunto con un solo elemento (a todos los elementos se les asigna un valor de -1)
2. Estructura de almacenamiento: representación principal del árbol, el subíndice del nodo raíz es el nombre del subconjunto, el nodo principal del nodo raíz es un número negativo y el tamaño es el número de nodos del subconjunto
5. Aplicación de árboles y árboles binarios.
1. Árbol de clasificación binaria (árbol de búsqueda binaria BST)
1.Definición
1. Las claves de todos los nodos en el subárbol izquierdo son menores que las del nodo raíz.
2. Las palabras clave de todos los nodos en el subárbol derecho son mayores que las del nodo raíz.
3. Los subárboles izquierdo y derecho son cada uno de ellos un árbol de clasificación binario.
El recorrido en orden puede obtener una secuencia ordenada creciente
2. Encuentra
1. Implementación no recursiva, la recursividad es simple pero ineficiente
3.Insertar
1. El nuevo nodo insertado debe ser un nodo hoja (solo se insertará cuando el árbol esté vacío)
4.Construcción
1. Incluso si los elementos insertados son los mismos pero en diferentes órdenes, el BST construido será diferente.
5.Eliminar
1. Nodo hoja: eliminar directamente
2.i tiene solo un subárbol izquierdo/derecho: hagamos que el subárbol de i se convierta en el subárbol del nodo padre de i, reemplazando la posición de i
3.i tiene dos subárboles a la izquierda y a la derecha: reemplace i con el sucesor/predecesor directo de i, luego elimine el sucesor/predecesor directo y convierta al caso 1,2
6. Análisis de eficiencia de búsqueda
1. Longitud promedio de búsqueda ASL = (número de cada capa * número de capas correspondientes) / número total
2. Peor caso: similar a la lista ordenada individualmente enlazada O(n)
3. Mejor caso: árbol binario equilibrado O(㏒₂n)
4. Proceso de búsqueda: similar a la búsqueda binaria, pero el árbol de decisión de la búsqueda binaria es único.
2. Árbol binario equilibrado (árbol AVL)
1.Definición
1. Árbol binario equilibrado: el valor absoluto de la diferencia de altura entre los subárboles izquierdo y derecho de cualquier nodo no supera 1
2. Factor de equilibrio: la diferencia de altura entre los subárboles izquierdo y derecho del nodo -1,0,1
2. Insertar (insertar primero y luego ajustar)
1. El objeto de cada ajuste es el subárbol mínimo desequilibrado
2.LL rotación equilibrada (rotación única derecha)
0.A es el nodo raíz del subárbol mínimo desequilibrado. Asegúrese de encontrar A claramente.
1. Motivo: se inserta un nuevo nodo (puede ser izquierdo o derecho) en el subárbol izquierdo L de B, el hijo izquierdo de A y el subárbol con A como raíz está desequilibrado.
2.Método
1. Gire el hijo B izquierdo de A hacia arriba hacia la derecha y reemplace A como nodo raíz.
2.A gira hacia abajo hacia la derecha y se convierte en el nodo raíz del subárbol derecho de B.
3. El subárbol derecho original de B se utiliza como subárbol izquierdo de A.
3.Rotación equilibrada RR (rotación única izquierda)
4.Rotación equilibrada LR (doble rotación primero hacia la izquierda y luego hacia la derecha)
1. Motivo: se inserta un nuevo nodo (puede ser izquierdo o derecho) en el subárbol derecho c del hijo izquierdo B de A, y el subárbol con A como raíz está desequilibrado.
2.Método
1. Gire el nodo raíz c del subárbol derecho del hijo izquierdo B de A hacia la izquierda y hacia arriba hasta la posición del nodo B.
2. Luego gire el nodo c hacia la derecha y levántelo hasta la posición del nodo A.
5.RL rotación equilibrada (doble rotación derecha y luego izquierda)
3. Encuentra
1. La profundidad máxima de un árbol binario equilibrado que contiene n nodos es O (㏒₂n) y la longitud de búsqueda equilibrada es O (㏒₂n).
3. Árbol de Huffman y codificación de Huffman
1.Definición
1. La longitud de ruta ponderada (WPL) del nodo
El producto de la longitud del camino (número de aristas) desde el nodo raíz hasta cualquier nodo y el peso del nodo.
2. Longitud ponderada del camino del árbol.
La suma de las longitudes de ruta ponderadas de todos los nodos de hoja.
3. Árbol de Huffman (árbol binario óptimo)
Árbol binario con longitud de ruta ponderada mínima
2.Construcción
1.Proceso de construcción
1. Seleccione los dos nodos con los pesos más pequeños para construir un nuevo nodo. El peso es la suma de los dos nodos.
2. Luego seleccione el nodo restante con el peso más pequeño, constrúyalo con el nuevo nodo y repita el proceso.
2.Características
1. Los nodos iniciales son todos nodos hoja. Cuanto menor sea el peso, mayor será la longitud del camino hasta el nodo raíz.
2. Cree n-1 nuevos nodos, un total de 2n-1 nodos
3. No hay ningún nodo de grado 1.
3. Codificación Huffman
1. Codificación de longitud fija
Utilice una representación binaria de la misma longitud para cada carácter.
2. Codificación de longitud variable
Utilice bits binarios de longitud desigual para representar diferentes caracteres
3. Codificación de prefijo
Ninguna codificación es un prefijo de otra codificación.
4.Proceso de codificación de Huffman
La secuencia marcada en la ruta desde el nodo raíz hasta el personaje, 0 va al hijo izquierdo, 1 va al hijo derecho
Capítulo 5 Imagen
1. Conceptos básicos de gráficas.
1. Definición de gráfico
0.G=(V,E),V(G): Conjunto finito no vacío de vértices E(G): Conjunto de aristas |V|: Número de vértices (orden del gráfico) |E|: Número de aristas
0.1 Nota: La tabla lineal puede ser una tabla vacía y el árbol puede ser un árbol vacío, pero el gráfico no puede ser un gráfico vacío: el conjunto de vértices no debe estar vacío y el conjunto de aristas puede estar vacío.
1. Gráfico dirigido
<v,w>: arco de v a w (v es adyacente a w/w es adyacente a v) v: cola del arco w: cabeza del arco
2. Gráfico no dirigido
(v,w)=(w,v)
3. Diagrama sencillo
No hay aristas duplicadas y no hay aristas desde el vértice hacia sí mismo.
4.Múltiples gráficos
Hay aristas duplicadas y hay aristas desde el vértice hacia sí mismo.
5. Gráfico completo (gráfico completo simple)
1. Gráfico completo no dirigido: hay n (n-1)/2 aristas entre dos vértices cualesquiera.
2. Gráfico completo dirigido: dos vértices cualesquiera tienen dos arcos en direcciones opuestas, n (n-1)
6. Subimagen
Generar subgrafo: subgrafo con el mismo conjunto de vértices
7. Gráfico conectado, gráfico conectado, componentes conectados (gráfico no dirigido)
1. Subgrafo conectado al máximo (componente conectado): un subgrafo conectado contiene todos los bordes, no necesariamente todos los vértices (no necesariamente un gráfico conectado)
2. Subgrafo mínimamente conectado: un subgrafo que mantiene la conectividad del gráfico mientras minimiza el número de aristas (puede ser un solo vértice)
Mínimo, máximo relativo al lado
8. Gráfico fuertemente conectado, componente fuertemente conectado (gráfico dirigido)
9. Árbol expansivo, bosque expansivo
1. Árbol de expansión de un gráfico conectado; un subgrafo conectado mínimo que contiene todos los vértices (n vértices tienen n-1 aristas)
2. En un gráfico no conexo, el árbol de expansión de componentes conectados constituye el bosque de expansión del gráfico no conexo.
10. Grado de vértice, grado de entrada, grado de salida
1. Grado de un vértice: el número de aristas con el vértice como punto final
1. Grado de nodo
El número de nodos secundarios de un nodo.
2. En un gráfico no dirigido: la suma de grados de todos los vértices = número de aristas * 2
3. En un gráfico dirigido: el grado de un vértice = grados de entrada y de salida, la suma de los grados de entrada de todos los vértices = la suma de los grados de salida = el número de aristas
11. Lado de la derecha, neto.
1. Imagen ponderada (neta): una imagen con pesos en el costado
12.Gráfico denso, gráfico disperso
13. Camino, longitud del camino, bucle.
1. Bucle/Bucle: la ruta donde el primer vértice y el último vértice son iguales
14. Camino simple, bucle simple
1. Camino simple: un camino en el que los vértices no aparecen repetidamente
2. Bucle simple: excepto el primer vértice y el último vértice, los demás vértices no aparecen repetidamente.
15. Distancia
1. Si existe el camino más corto de v a w, es una distancia. Si no existe, se registra como infinito.
16. árbol dirigido
1. Un gráfico dirigido en el que el grado de entrada de un vértice es 0 y el grado de entrada de los otros vértices es 1.
2. Almacenamiento de imágenes y operaciones básicas.
1. Método de matriz de adyacencia (secuencial)
1.Definición
1. Una matriz unidimensional almacena información de vértices y una matriz bidimensional almacena información de bordes.
2.Características
1. Gráfico no dirigido/gráfico dirigido: el número de elementos distintos de cero en la i-ésima fila es el grado/grado exterior del i-ésimo vértice
2. Es fácil determinar si hay aristas, pero es difícil determinar cuántas aristas hay.
3. Los gráficos densos son adecuados para utilizar matrices de adyacencia.
4.Aⁿ[i][j]: El número de caminos de longitud n desde el vértice i hasta el vértice j
2. Método de lista de adyacencia (enlace)
1.Definición
1. Combine el almacenamiento secuencial y vinculado para crear una lista vinculada individualmente para cada vértice i
2. Tabla de vértices: puntero del campo de vértice (datos) a la primera lista de adyacencia (firstarc)
3. Tabla de borde: campo de punto de adyacencia (adjvex) Campo de puntero que apunta a la siguiente lista de adyacencia (nextarc)
2.Características
1. Gráfico no dirigido: espacio de almacenamiento O (|V| 2|E|) gráfico dirigido: O(|V| |E|)
2. Utilice el método de lista de adyacencia para ahorrar espacio en gráficos dispersos.
3. Lista de enlaces cruzados (gráfico dirigido)
1.Definición: almacenamiento en cadena de gráficos dirigidos.
2. Estructura
1. ArcNode: 5 dominios
1. Dominio de cola (tailvex), dominio de cabeza (headvex): indica la cola del arco y la cabeza del arco
2. Dominio de cadena hlink, tlink: indica el siguiente arco con la misma cabeza/cola de arco
<v,w>: arco de v a w (v es adyacente a w/w es adyacente a v) v: cola del arco w: cabeza del arco
3.campo de información: información relacionada con el arco
2. Puntero de vértice (VNode): 3 campos
1.campo de datos: información de datos del vértice (nombre del vértice)
2. dominio primero en entrar, dominio primero en salir: tome este vértice como el primer nodo de la cabeza/cola del arco
3. Nota: los nodos Vertex se almacenan secuencialmente
3.Características
1. Es fácil encontrar el arco con vi como cola y el arco con vi como cabeza. Es fácil encontrar el grado exterior/interior del vértice.
2. Quiere decir que no es único, pero determina una gráfica.
4. Lista múltiple de adyacencia (gráfico no dirigido)
1.Definición: otra cadena de almacenamiento de gráficos no dirigidos
2. Estructura
1. Cada borde está representado por un nodo.
1.marcar campo de bandera: si se ha buscado este borde
2.ivex,jvex: las posiciones de los dos vértices unidos al borde en el gráfico
3.ilink,jlink: apunta al siguiente borde unido al vértice ivex/jvex
4.info: campo de puntero para información diversa
2. El vértice está representado por un nodo.
1.campo de datos: información relacionada de los vértices
2.dominio del primer borde: el primer borde unido al vértice
3.Características
1. Los bordes adjuntos al mismo vértice están conectados en la misma lista vinculada y cada nodo de borde está vinculado en dos listas vinculadas al mismo tiempo.
2. Cada borde tiene un solo nodo
5. Operaciones básicas de gráficos.
1. Independientemente de la estructura de almacenamiento del gráfico, los diferentes métodos de almacenamiento tienen un rendimiento diferente
2. Operaciones específicas
3. Recorrido del gráfico
1. Búsqueda en amplitud (BFS)
1.Definición
Un algoritmo transversal jerárquico similar a un árbol binario, que da prioridad al nodo descubierto más temprano.
2. Pensamientos
1. Primero visite el vértice inicial v
2. Visite todos los vértices adyacentes no visitados de v en secuencia
3. Luego comience desde estos vértices y visite todos sus nodos no visitados.
3. Descripción del algoritmo
1. Búsqueda jerárquica, accediendo a un lote de nodos hacia adelante, a diferencia de la profundidad primero donde hay una situación hacia atrás, no es recursiva
2. Utilice la matriz de marcas auxiliares de la cola (ya sea que se visite el vértice)
3. Implementación del algoritmo
4.Análisis de desempeño
1. Complejidad espacial: O(|V|)
Con la ayuda de la cola auxiliar, los vértices se ponen en cola una vez
2. Complejidad del tiempo
1. Lista de adyacencia: O(|V| |E|)
2. Matriz de adyacencia: O(|V|²)
La esencia del recorrido del gráfico: el proceso de encontrar sus puntos adyacentes para cada vértice
5.BFS resuelve el problema del camino más corto de fuente única
5. Árbol de expansión en amplitud
1. Definición: árbol transversal obtenido durante el recorrido en amplitud
2. Características: Único en la matriz de adyacencia, no único en la lista de adyacencia
Lo mismo ocurre con DFS
2. Primera búsqueda en profundidad (DFS)
1.Definición
De manera similar al recorrido de un árbol en orden anticipado, se le da prioridad al último nodo descubierto.
2. Pensamientos
1. Primero visite el vértice inicial v
2. Visite cualquier vértice adyacente no visitado w de v
3. Luego visite cualquier vértice adyacente no visitado w2 de w
4. Repita hasta que ya no pueda acceder hacia abajo y regrese sucesivamente al vértice visitado más recientemente.
3. Descripción del algoritmo
1. Partiendo de un vértice, usando forma recursiva
2. Implementación del algoritmo
4.Análisis de desempeño
1. Complejidad espacial: O(|V|)
Usando una pila de trabajo recursiva
2. Complejidad del tiempo
1. Lista de adyacencia: O(|V| |E|)
2. Matriz de adyacencia: O(|V|²)
5. Árbol/bosque que abarca primero la profundidad (gráfico no conectado)
3. Recorrido de gráficos y conectividad de gráficos.
1. Gráfico no dirigido
1. Conectado: visite todos los vértices en un recorrido
2. No conectado: visite todos los vértices de los componentes conectados en un recorrido
2. Gráfico dirigido
1. Si hay una ruta desde el vértice inicial hasta cada vértice, se puede acceder a todos los vértices; de lo contrario, no
3. Se agrega un segundo bucle for al algoritmo y luego se selecciona el punto inicial.
El primer bucle for inicializa los vértices a FLASE
4. Gráfico no dirigido: el número de llamadas a BFS o DFS = el número de componentes conectados del gráfico
4. Aplicación de diagramas
1. Árbol de expansión mínima (MST)
1.Definición
El árbol de expansión con la suma más pequeña de pesos de aristas.
2.Características
1. La forma del árbol no es única, la suma de los pesos de los bordes es única.
2. Número de aristas = número de vértices - 1
3. Pensamientos generales
Cuando T no forma un árbol de expansión, encuentre un borde de costo mínimo y no se generará ningún bucle después de agregar T
4. Dos algoritmos
1.Algoritmo Prim (Prim)
1. Pensamiento (expandiéndose desde el vértice)
1. Inicialización: primero seleccione cualquier vértice como vértice inicial
2. Bucle (hasta que se incluyan todos los vértices): luego seleccione el borde con el peso más pequeño entre los bordes adyacentes de este vértice y no formará un ciclo.
3. Luego seleccione el borde con el peso más pequeño entre los bordes adyacentes de los dos vértices que no forme un bucle.
2.Características
1. Complejidad temporal: O (| V | ²), no depende de | E |, adecuado para gráficos con aristas densas
2.Algoritmo Kruskal (Kruskal)
1. Pensamiento (aumento de peso)
1. Inicialización: primero incluya todos los vértices, sin aristas
2. Bucle (hasta que se convierta en un árbol): seleccione los bordes en orden de peso creciente sin formar un ciclo hasta que se incluyan n-1 bordes
2.Características
1. Utilice un montón para almacenar conjuntos de aristas, con una complejidad temporal de O (|E|log|E|), que es adecuado para gráficos con aristas dispersas y muchos vértices.
2. Camino más corto
1.Algoritmo de Dijkstra para encontrar el camino más corto desde una única fuente
1. Variables auxiliares
1. Conjunto S: registra los vértices del camino más corto que se han encontrado, y el valor inicial es 0
2.dist []: registra la longitud de ruta más corta actual (actualizada continuamente) desde el punto de origen v0 a otros vértices. El valor inicial es arcos [v0] [i].
3.ruta []: ruta [i] es el nodo predecesor de la ruta más corta desde el punto de origen a i, y su valor se puede rastrear hasta la ruta más corta de v0 a vi.
2. Pensamientos
1. Inicialización: el conjunto S es {0}, dist [] es la distancia desde el vértice inicial 0 a cada vértice y no hay infinito. El vértice inicial 0 en la ruta [] es -1 (siempre sin cambios), la distancia de 0 a otros puntos es 0 y la distancia de 0 a otros puntos es infinita.
2. Seleccione el punto j con el valor restante más pequeño en dist[]. Si dist[j] arcs[j][k]<dist[k], actualice dist[k]. Agregue este punto al conjunto S. Si dist[k] se actualiza, deje path[k]=j
3. Repita la operación en los puntos restantes del conjunto S hasta que S contenga todos los puntos.
3.Características
1. La complejidad temporal de una sola fuente es O(|V|²), y la de todos los pares de nodos es O(|V|³)
2. El algoritmo no se aplica cuando hay pesos negativos en los bordes.
2.El algoritmo de Floyd encuentra el camino más corto entre los vértices.
1. Pensamientos
1. Genere recursivamente una secuencia de matriz cuadrada de orden n, comenzando desde A﹣¹ hasta Aⁿ﹣¹
Superíndice de matriz más paréntesis
2.Inicialmente: si hay un borde entre dos vértices cualesquiera, el peso se considera el camino más corto. Si no hay un borde, es infinito.
3. Luego, agregue gradualmente el vértice k (k de 0 a n-1) a la ruta original como un vértice intermedio. Si la ruta disminuye, reemplace la ruta original.
4.A (k) [i] [j]: desde el vértice i hasta el vértice j, la longitud del camino más corto cuyo número de nodo intermedio no es mayor que k
2.Características
1. Complejidad del tiempo: O(|V|³)
2. Se permiten bordes con pesos negativos y no se permite que los bordes que contienen pesos negativos formen un bucle.
3. Aplicable a gráficos no dirigidos ponderados, considerados gráficos dirigidos con doble arista de ida y vuelta.
3.Clasificación topológica
1. Gráfico acíclico dirigido (gráfico DAG)
No hay ciclos en grafos dirigidos.
2. El vértice representa la red activa (red AOV)
El gráfico DAG representa un proyecto, los vértices representan actividades y los bordes dirigidos <vi, vj> representan esa actividad i que debe preceder a la actividad j.
3. Clasificación topológica (en gráfico DAG)
1.Definición
1. Cada vértice aparece solo una vez
2. Si A está delante de B, no hay camino de B a A.
2. Método de implementación
1. Seleccione un vértice sin predecesor del gráfico DAG y envíelo
2. Elimina el vértice y todos los bordes dirigidos a partir de él.
3. Repita los pasos 1 y 2 hasta que el gráfico esté vacío/no haya ningún nodo sin predecesor (debe haber un ciclo en el gráfico)
3.Características
1. Complejidad del tiempo O(|V| |E|)
Generar vértices mientras se eliminan bordes
4.Atención
1. El proyecto puede comenzar desde un vértice con grado 0.
2. Un vértice tiene múltiples sucesores directos y el resultado no suele ser único.
3. La matriz de adyacencia es una matriz triangular y existe una clasificación topológica, pero no necesariamente al revés. Los números de vértices se pueden reorganizar de acuerdo con los resultados de la clasificación, y la matriz de adyacencia es una matriz triangular.
4. Camino crítico
1. Utilice bordes para representar redes activas (red AOE)
1.Definición
Los vértices representan eventos, los bordes dirigidos representan actividades y los pesos representan costos (tiempo)
2. Dos propiedades
1. Después de que ocurre el evento representado por el vértice, pueden comenzar las actividades representadas por los bordes dirigidos a partir del vértice.
2. Solo cuando todas las actividades representadas por aristas dirigidas que ingresan a un determinado vértice terminan, puede ocurrir el evento representado por el vértice.
2. Varios conceptos
1. Vértice inicial (punto de origen): solo hay un vértice con grado de entrada 0, el comienzo de todo el proyecto
2. Vértice final (sumidero): solo hay un vértice con un grado de salida de 0, que es el final de todo el proyecto.
3. Ruta crítica: la ruta con la longitud máxima de ruta.
4. Actividades Críticas: Actividades en la ruta crítica
5. Tiempo mínimo: longitud del camino crítico
3. Varios parámetros
1. El momento de aparición más temprano Ve(k) del evento vk
1. Definición: La longitud del camino más largo desde el vértice V a Vk determina la hora de inicio más temprana de todas las actividades a partir de Vk.
2. Método de búsqueda: agregue pesos desde el punto de origen hacia atrás y tome el valor máximo de diferentes rutas.
Todas las actividades deben completarse antes de que pueda comenzar el evento. Tome el valor máximo.
2. La última hora de aparición Vl(k) del evento vk
1. Definición: La última vez que ocurrirá este tiempo sin retrasar la finalización de todo el proyecto.
2. Cómo encontrarlo: Vl (punto de hundimiento) = Ve (punto de hundimiento), reste los pesos del punto de hundimiento hacia adelante y tome el valor mínimo de diferentes caminos
Tome el valor mínimo para garantizar que todo el proyecto no se retrase.
3. El momento de aparición más temprana e(i) de la actividad ai
1. Definición: El momento más temprano en que ocurrió el evento representado por el punto de inicio de la actividad.
2. Cómo encontrar: <Vk, Vj> representa la actividad ai, entonces e(i)=Ve(k)
4. El último momento de aparición l(i) de la actividad ai
1. Definición: La diferencia entre la última hora de ocurrencia del evento representada por el punto final de la actividad y el tiempo requerido para la actividad.
2. Cómo encontrar: <Vk,Vj> representa la actividad ai,l(i)=Vl(j)-Peso(Vk,Vj)
5. La diferencia de actividades d(i)=l(i)-e(i)
4. Camino crítico
Las actividades con la diferencia d()=0 entre todas las actividades constituyen el camino crítico
Capítulo 6 Búsqueda
1. Conceptos básicos de búsqueda
1. Tabla de búsqueda (estructura de búsqueda): recopilación de datos utilizada para la búsqueda
2. Adecuado para tablas de búsqueda estáticas: búsqueda secuencial, búsqueda media, búsqueda hash
3. Adecuado para tablas de búsqueda dinámica: los árboles de clasificación binaria, la búsqueda hash, los árboles binarios equilibrados y los árboles B son mejoras de los árboles de clasificación binaria.
4. Longitud media de búsqueda (ASL)
2. Búsqueda secuencial y búsqueda binaria.
1. Búsqueda secuencial (búsqueda lineal)
1. Búsqueda secuencial de tablas lineales generales.
1. Características del algoritmo
1. Introduzca el centinela (el primer elemento de la matriz) y busque de atrás hacia adelante. No es necesario juzgar si la matriz cruzará el límite, lo que mejora la eficiencia del programa.
2. Ventajas y desventajas
1. Desventajas: cuando n es grande, la eficiencia es baja
2. Ventajas: No existen requisitos para el almacenamiento de elementos de datos ni requisitos de orden.
3.Rendimiento
1.Éxito ASL=(n 1)/2
2.ASL falló=n 1
agregar un centinela
2. Búsqueda secuencial en lista ordenada
1. Árbol de decisión: los nodos circulares son nodos de existencia, los nodos rectangulares son nodos de falla (intervalo), n éxitos deben tener n 1 nodo de falla
2. La longitud de búsqueda para llegar al nodo fallido = el número de capas de un nodo circular encima de él
3. Sólo la falla de ASL es diferente = (1 2 ... n n)/n 1
Los dos últimos nodos fallidos están en el mismo nivel, ambos son n
2. Media búsqueda (búsqueda binaria)
1. Características del algoritmo
1. Condición de bucle: bajo≤alto garantiza que todos apunten al mismo valor al final; de lo contrario, habrá un número menos para buscar.
2.mid=(low high)/2 equivale a eliminar los límites
2.Rendimiento
1. Complejidad del tiempo: O (log₂n)
2.ASL: Número de capas por capa * número de nodos por capa / número de puntos de resumen, n capa tiene 2ⁿ﹣¹ nodos
3. Búsqueda de bloques (búsqueda por orden de índice)
1. Características del algoritmo
1. Absorba las ventajas respectivas de la búsqueda secuencial y la búsqueda binaria, tiene una estructura dinámica y es adecuada para búsquedas rápidas.
2. Pensamientos
1. Dividido en varios subbloques, los bloques se pueden desordenar y los bloques se pueden ordenar.
2. La palabra clave más grande en el primer bloque <todos los registros en el segundo bloque, y así sucesivamente.
3. Cree una tabla de índice que contenga la palabra clave más grande de cada bloque y la dirección del primer elemento de cada bloque, ordenada por palabra clave.
3. Proceso de búsqueda
1. Determine el bloque en la tabla de índice y busque secuencialmente/por la mitad
2. Buscar secuencialmente dentro del bloque
4.Rendimiento
ASL=tabla de índice ASL intrabloque ASL
Resumen de preguntas
1. Propenso a errores
1. La velocidad de la media búsqueda ahora es generalmente más rápida. En casos especiales, la búsqueda secuencial puede ser más rápida.
2. Rendimiento temporal de la búsqueda binaria y el árbol de clasificación binaria
1. La mitad de la búsqueda se mide mediante un árbol de decisión binario y ASL siempre es O (log₂n)
2. El árbol de clasificación binaria está relacionado con el orden de entrada de los datos y el peor de los casos es O (n)
3. Cuando se busca por la mitad, el valor medio está acotado
2.Fórmula
1. La altura del árbol de decisión binario: ┎log₂(n 1)┒ o ┕log₂n┙ 1
1. ¿Es un árbol binario equilibrado, con diferencias de altura como máximo 1, o un árbol de clasificación binario?
2. El número de comparaciones de nodos fallidos (la diferencia no excede 1)/el número máximo de comparaciones
3. Número total de nodos n=2^h-1
2. La longitud de bloque óptima de la tabla de secuencia de índice de n registros:
Todos se buscan secuencialmente, la longitud del bloque es b, la tabla de índice ASL = (n/b 1)/2, la ASL intrabloque = (b 1)/2 y la desigualdad básica se usa para la suma.
3. Búsqueda secuencial ASL=(n 1)/2, búsqueda de índice ASL=tabla de índice ASL ASL intrabloque
3. Tipo de pregunta
1. Determinar si un árbol es un árbol de decisión de búsqueda binaria.
Tome el último nodo a comparar (la posición media del árbol) y determine si los límites superior e inferior son consistentes (también puede determinar primero los límites superior e inferior desde el nodo raíz)
2. Utilice una idea similar para bloquear la búsqueda directamente en la lista ordenada: W252
La longitud de búsqueda dentro de un bloque es diferente para cada segmento
4.Puntos de conocimiento
Método de búsqueda de 1.k puntos: la complejidad temporal del éxito y el fracaso es O (logk (n))
La profundidad de un árbol k-ario con n nodos es ┕logk(n)┙ 1
2. Cuando las probabilidades de búsqueda son diferentes, la forma más eficaz es utilizar la búsqueda secuencial.
Ordenar en orden descendente de probabilidad de búsqueda
3.árbol B y árbol B
1.B-tree y sus operaciones básicas
1.Definición
0.B-tree (un árbol de búsqueda equilibrado de múltiples rutas con un factor de equilibrio de 0 para todos los nodos), el número máximo de nodos secundarios es el orden del árbol B (m)
1. Cada nodo tiene como máximo m subárboles (como máximo m-1 palabras clave)
2. Si el nodo raíz no es un nodo terminal, hay al menos dos subárboles y 1 palabra clave.
3. Todos los nodos que no son hoja, excepto el nodo raíz, tienen al menos ┎m/2┒ subárboles y al menos ┎m/2┒-1 palabras clave.
4. Todas las estructuras de nodos que no son hojas.
1. Las palabras clave están ordenadas en orden ascendente.
2. Todos los números del subárbol izquierdo <corresponden a la palabra clave, todos los números del subárbol derecho> corresponden a la palabra clave
5. Todos los nodos hoja están al mismo nivel, sin información (nodos externos/nodos de falla)
2.La altura del árbol B.
1. Altura mínima
Cada nodo tiene como máximo m subárboles y m-1 palabras clave
h≥logm(n 1) n≤(m-1)(1 m m² ... m^(h-1))=m^h-1
2. Altura máxima
La primera capa tiene al menos un nodo, la segunda capa tiene al menos 2 nodos, la tercera capa tiene al menos 2┎m/2┒,..., y la h 1.ª capa tiene al menos 2┎m/2┒^ (h-1) nodos.
La capa h1 es un nodo hoja (nodo de falla), el número es n 1 (número de intervalos) y hay n-1 nodos de falla para n palabras clave.
n 1≥2┎m/2┒^(h-1)
3.Búsqueda de árbol B
Similar a un árbol de búsqueda binario
4.Inserción en el árbol B
1. Posicionamiento: debe insertarse en un nodo que no sea hoja en el nivel más bajo
2.Insertar
1. La cantidad de palabras clave para cada nodo que no falló está dentro de [┎m/2┒-1,m-1]
2. Si el número de palabras clave después de la inserción es <m, inserte directamente> m-1 y divida el nodo;
3. Método de división
1. Divida el nodo original después de insertar la llave en dos partes desde la posición media ┎m/2┒
2. El nodo en la posición media ┎m/2┒ se inserta en el nodo principal y las partes izquierda y derecha se utilizan como subárboles izquierdo y derecho.
3. Si el nodo principal también excede el límite superior, continúe dividiendo hasta llegar al nodo raíz. La altura del árbol B es 1.
5.Eliminación del árbol B
1. En el nodo terminal
1. Eliminar palabras clave directamente
Número de palabras clave>┎m/2┒-1
2. Los hermanos son suficientes
1. El número de palabras clave = ┎m/2┒-1, y las palabras clave de los nodos hermanos adyacentes derecho (izquierdo) son >┎m/2┒
2. Método de transposición padre-hijo: uno de los nodos padres ingresa al nodo eliminado y uno de los nodos hermanos ingresa al nodo padre.
3. No hay suficientes hermanos para pedir prestado (método de fusión)
1. El número de palabras clave = ┎m/2┒-1 y las palabras clave de los nodos hermanos adyacentes derecho (izquierdo) = ┎m/2┒-1
2. Método de combinación: combine uno de los nodos principales con uno de los nodos hermanos para reemplazar el nodo eliminado. El nodo principal tiene una palabra clave menos.
3. Si el nodo principal es el nodo raíz y se reduce a 0, elimine el nodo raíz directamente y el nuevo nodo después de la fusión se convertirá en la raíz.
4. El nodo principal no es el nodo raíz y se reduce a ┎m/2┒-2, y luego se ajusta o fusiona con sus hermanos (pedir prestado primero cuando haya suficiente disponible)
2. No en el nodo terminal
1. Si el número de palabras clave en el subárbol izquierdo> ┎m/2┒-1, reemplace k con el nodo predecesor de k (el nodo más a la derecha del subárbol izquierdo) y luego elimine k de forma recursiva
2. Si el número de palabras clave en el subárbol derecho>┎m/2┒-1, reemplace k con el nodo sucesor de k (el nodo más a la izquierda del subárbol derecho) y luego elimine k de forma recursiva.
3. Si el número de palabras clave en los subárboles izquierdo y derecho = ┎m/2┒-1, combine directamente los dos subárboles y elimine k directamente
2.Concepto básico de árbol B
1.Definición
1. Cada nodo de rama tiene como máximo m subárboles (nodos secundarios)
2. El nodo raíz no hoja tiene al menos dos subárboles, y todos los nodos no hoja, excepto el nodo raíz, tienen al menos ┎m/2┒ subárboles
3. El número de subárboles de un nodo = el número de palabras clave
En B-tree: el número de subárboles de un nodo = el número de palabras clave 1
4. Todos los nodos hoja contienen todas las palabras clave (ordenadas) y punteros a los registros correspondientes, y los nodos hoja adyacentes están vinculados entre sí según el tamaño.
5. Todos los nodos de rama (índices que pueden considerarse índices) solo contienen el valor máximo de las palabras clave en cada uno de sus nodos secundarios y punteros a los nodos secundarios.
2.Características
1. Dos punteros principales: uno apunta al nodo raíz y el otro apunta al nodo hoja con la palabra clave más pequeña.
2. Dos operaciones de búsqueda: búsqueda desde el orden mínimo de palabras clave/búsqueda multidireccional desde el nodo raíz
3. Nota: Al buscar, la búsqueda no finaliza cuando el nodo que no es hoja es igual al valor dado. La búsqueda continúa hacia abajo hasta el nodo hoja. Independientemente de si la búsqueda es exitosa o no, es una ruta desde el nodo raíz hasta el nodo hoja.
Resumen de preguntas
1. Propenso a errores
1. Cuando el número de palabras clave en un nodo ≠ el número de subárboles, no debe ser un árbol B
2. Todos los nodos que no son hoja, excepto el nodo raíz, tienen al menos ┎m/2┒ subárboles y al menos ┎m/2┒-1 palabras clave.
Preste especial atención al nodo raíz: hay al menos dos subárboles y 1 palabra clave
3. Cuando el árbol B se divide después de la inserción, siempre que el nodo raíz no se divida, la altura no será 1
2.Fórmula
1. Altura mínima: h≥logm(n 1)
2. Altura máxima: n 1≥2┎m/2┒^(h-1)
3.Puntos de conocimiento
1. Para un árbol B de tercer orden: cuando el número de nodos es el más pequeño, es similar a un árbol binario completo; cuando el número de nodos es el más grande, es similar a un árbol ternario completo;
Puntos de resumen = m^h-1
2.El árbol B se utiliza para el índice de archivos/índice de bases de datos
4.Tabla hash
1. Conceptos básicos de tablas hash.
1. Función hash
La función que asigna palabras clave a las direcciones correspondientes se registra como Hash(clave)=dirección (puede ser subíndice de matriz/índice/dirección de memoria)
2.Conflicto
Dos o más palabras clave diferentes se asignan a la misma dirección
3.Sinónimos
Colisión de diferentes palabras clave
4.Tabla hash
Una estructura de datos a la que se accede directamente en función de palabras clave, idealmente O(1)
2.Método de construcción de la función hash
0.Puntos de atención
1. El dominio de definición debe contener todas las palabras clave y el rango de valores depende del tamaño/rango de direcciones de la tabla hash.
2. Las direcciones deben ser igualmente probables y estar distribuidas uniformemente.
3. Haz la función lo más simple posible y calcúlala en poco tiempo.
1. Método de direccionamiento directo
1. Función: H(tecla)=a*tecla b
2. Características: sin conflictos, adecuado para una distribución básicamente continua de palabras clave
2. Método de división con resto
1. Función: H(tecla)=tecla%p
2. Selección de P: el número primo p que no es mayor que m (longitud de la tabla hash) pero más cercano o igual a m
3. Método de análisis digital
1. Seleccione una cantidad de bits con una distribución digital relativamente uniforme como dirección hash
2. Características: Adecuado para colecciones de palabras clave conocidas
4.Método para encontrar la mitad del cuadrado.
1. Los dígitos del medio del valor cuadrado se utilizan como dirección hash.
2. Aplicable a situaciones donde los valores de cada bit no son lo suficientemente uniformes/son menores que la cantidad de bits requeridos para la dirección hash.
5. Método de plegado
1. Divida la palabra clave en varias partes con el mismo número de dígitos y tome la suma de superposición como dirección hash.
2. Adecuado para una gran cantidad de dígitos y los dígitos de cada bit están distribuidos de manera aproximadamente uniforme.
3. Formas de manejar los conflictos
1. Ley de Dirección Abierta
0.Definición
1. Las direcciones gratuitas están abiertas tanto a sinónimos como a no sinónimos.
2. Fórmula recursiva: Hi=[H(key) di]%m, di: secuencia incremental
1. Método de detección lineal
1.Definición: di=0,1,2,...,m-1
2. Características: hace que una gran cantidad de elementos se reúnan en direcciones hash adyacentes, lo que reduce la eficiencia de la búsqueda.
2. Método de detección de cuadrados (método de detección secundario)
1. Definición: di=0²,1²,-1²,2²,-2²,...,k²,-k²
2.Características
1. Ventajas: Puede evitar problemas de acumulación
2. Desventaja: solo se puede detectar la mitad de las células
3.Método de repetición (método de doble hash)
1. Definición: di=Hash₂(clave), Hi=[H(clave) i*Hash₂(clave)]%m
i es el número de conflictos
2.Características
1. Utilice la segunda función hash para calcular el incremento de dirección.
2. Todas las posiciones se pueden detectar hasta m-1 veces
4. Método de secuencia pseudoaleatoria
1.Definición: di=secuencia pseudoaleatoria
5.Atención
1. No puede eliminar físicamente los elementos existentes a voluntad, ya que truncará las direcciones de búsqueda de otros elementos con la misma dirección hash.
2. Se puede marcar para eliminación y eliminación lógica.
3. Efectos secundarios: después de varias eliminaciones, la tabla hash parece estar muy llena, pero de hecho todavía hay muchas ubicaciones no utilizadas y requieren un mantenimiento regular.
2. Método de cremallera (método de enlace)
1. Definición: todos los sinónimos se almacenan en una lista enlazada lineal, identificada de forma única mediante una dirección hash.
2. Adecuado para situaciones frecuentes de inserción y eliminación, y puede eliminarse físicamente directamente
4. Búsqueda de hash y análisis de rendimiento.
1. Proceso de búsqueda
0.Inicialización: Dirección=Hash(clave)
1. Verifique si hay un registro en Addr
1. No hay registro, la búsqueda falló
2. Hay un registro y la búsqueda igual es exitosa, espere la ejecución 2;
2. Calcule la "siguiente dirección hash" utilizando el método de manejo de conflictos proporcionado, establezca Addr en esta dirección y transfiérala a 1.
2. Eficiencia de búsqueda
1. Depende de: función hash, método de manejo de colisiones, factor de carga
2. Factor de llenado (α): define qué tan llena está una tabla
α=número de registros en la tabla n/longitud de la tabla hash m
3. La duración promedio de la búsqueda depende de α y no depende directamente de n o m.
Resumen de preguntas
1. Propenso a errores
1. K sinónimos se completan en la tabla hash mediante detección lineal, lo que requiere K (K 1)/2 veces de detección.
1 2...K
2. La probabilidad de conflicto es proporcional al tamaño del factor de carga.
Cuanto más lleno esté, más probabilidades habrá de que entre en conflicto.
3. La función hash no se puede construir utilizando una función de número aleatorio y no se pueden realizar búsquedas normales.
2. Puntos de conocimiento
1. Causas de la acumulación
Las secuencias de sonda para conflictos de sinónimos y diferentes secuencias de sonda para sinónimos no sinónimos están entrelazadas
2. Número medio de detecciones = duración media de la búsqueda
3. Tipo de pregunta
1.Éxito en ASL
Número de búsquedas = número de conflictos 1
2.ASL falló
Determine el total de posiciones de búsqueda requeridas en función de la función hash y busque cada posición hasta que esté vacía. Si no está vacía, utilice el método de manejo de conflictos correspondiente para buscar nuevamente. Si está vacía, también debe compararse.
5. brochetas
1. Definición de cadena
1. Cadena de espacios: compuesta por uno o más espacios, no una cadena vacía
2. Las tablas lineales utilizan un solo elemento como objeto de operación y las cadenas utilizan subcadenas como objeto de operación.
2. Estructura de almacenamiento de cadenas
1. Representación de almacenamiento secuencial de longitud fija
1. Similar al almacenamiento secuencial de tablas lineales, asigne matrices de longitud fija
2. Truncamiento: los valores de cadena que excedan la longitud predefinida se descartarán.
2. Representación del almacenamiento de asignación de montón
1. Utilice malloc() y free() para asignar y eliminar dinámicamente
3. Representación del almacenamiento blockchain
1. Almacenamiento vinculado similar a una lista lineal, cada nodo puede contener uno o más caracteres
3. Operaciones básicas de cadenas.
1. Subconjunto mínimo de operaciones (5): no se puede implementar utilizando otras operaciones de cadena
1.Asignación de cadena: StrAssigh
2. Comparación de cadenas: StrCompare
3. Conexión de cadena: Concat
4. Encuentra la longitud de la cuerda: StrLength
5. Buscar subcadena: SubString
4. Patrón de combinación de cuerdas
1.Definición: operación de posicionamiento de subcadena
2. Pensamientos
1. A partir del carácter pos de la cadena principal, compárelo con el primer carácter de la cadena del patrón.
2. Si son iguales, continúe comparando los caracteres siguientes uno por uno.
3. Si no es igual, comience la comparación nuevamente desde el siguiente carácter de la cadena principal.
3. Eficiencia
Peor complejidad de tiempo: O (mn)
5. Algoritmo de coincidencia de patrones mejorado: algoritmo KMP
1. Prefijos de cadenas y valores coincidentes parciales
1. Prefijo: todas las subcadenas del encabezado excepto el último carácter (solo puede comenzar desde la primera posición)
2. Sufijo: todas las subcadenas finales excepto el primer carácter (solo puede comenzar desde la última posición)
3. Valor de coincidencia parcial: las longitudes de prefijo y sufijo más largas son iguales
2.Eficiencia
1. Complejidad del tiempo: O (m n)
3. Resuelve la siguiente matriz (manual)
1.siguiente valor de matriz = longitud del mismo prefijo y sufijo más largo 1
2. La cadena en sí no se puede utilizar como prefijo o sufijo.
3. Por lo general, siguiente [1] = 0 (depende de la pregunta específica, si es -1, aún use 0 para el cálculo y, finalmente, todos los números son -1)
4. Cuando el elemento i-ésimo en el siguiente [i] no coincide, la longitud de la cadena es i-1, excluyendo el elemento i-ésimo.
5. Cuando la cadena es larga, solo puedes contar las primeras para obtener la respuesta.
Resumen de preguntas
1. Puntos de conocimiento
1.La mayor ventaja del algoritmo KMP
La cadena principal no retrocede, el puntero i no se mueve, j=siguiente[j]
2. Tipo de pregunta
1. Una forma rápida de resolver next[], suponiendo que next[n] se esté resolviendo actualmente, next[n-1]=m
0.Predeterminado siguiente[1]=0, siguiente[2]=1
El subíndice también puede comenzar desde 0 y el valor numérico también puede comenzar desde -1.
1. La cadena tiene n-1 caracteres. Si los primeros m caracteres son iguales que los últimos m caracteres, entonces siguiente [n] = m 1, vaya a 3.
2. Cuando los primeros m números son diferentes de los últimos m números, si m = 1, entonces el siguiente [n] = 1, vaya a 3. De lo contrario, sea m=m-1, luego compare el primer m-1 y el último m-1, si son iguales vaya a 1, si son diferentes continúe a 2.
3. Finalizar la operación
2.Proceso de coincidencia de KMP
Cuando el valor de next [] comienza desde 0, el número de subíndice comienza desde 1. Cuando no hay coincidencia, el puntero i no se mueve, j = next [j]
3. Propenso a errores
1. Durante el examen, debes distinguir si el siguiente [] valor comienza en 0 o 1
Capítulo 7 Clasificación
1. Conceptos básicos de clasificación.
1. Definición de clasificación
1. La estabilidad de un algoritmo no puede medir la calidad de un algoritmo.
2. Clasificación interna: todos los elementos se colocan en la memoria.
3. Clasificación externa: movimiento constante entre memoria y memoria externa
Resumen de preguntas
1. Propenso a errores
1. Es posible que el algoritmo de clasificación implementado en la lista de secuencia no se implemente en la lista vinculada.
2. Si utiliza diferentes métodos de clasificación para ordenar la misma tabla lineal, los resultados de clasificación obtenidos pueden ser diferentes.
2.Fórmula
1. El número mínimo de comparaciones para ordenar n palabras clave es ┍log₂(n!)┑
2. Ordenación por inserción
1. Ordenación por inserción directa
1. Pensamientos
1. Supongamos que el primer elemento ha sido ordenado.
2. A partir del segundo elemento, compárelo con el anterior en secuencia. Si no se satisface el intercambio inmediato, clasifique en su lugar y mueva repetidamente los elementos ya organizados hacia atrás.
2.Características
1. Copie A [0] como centinela para evitar subíndices fuera de límites, facilitar la asignación y eliminar la necesidad de solicitar variables temporales.
2. Compara y mueve al mismo tiempo
3.Análisis de desempeño
1. Eficiencia del tiempo
1. Mejor caso: O(n)
Solo es necesario comparar una vez cada vez, no es necesario moverse
2. Peor caso: O(n²)
2. Aplicabilidad
Tanto la secuencia como la cadena son adecuadas. La mayoría de los algoritmos solo son adecuados para la secuencia.
4. Implementación del algoritmo
2. Ordenación por inserción a mitad de camino
1. Pensamientos
1. Primero doblar por la mitad para encontrar la posición donde se insertará el elemento.
2. Mueva todos los elementos después de la posición a insertar uniformemente
2.Características
1. Solo se reduce el número de elementos de comparación y el número de movimientos no ha cambiado.
2. El número de comparaciones no tiene nada que ver con el estado inicial, solo n
3.Análisis de desempeño
1. Complejidad del tiempo: O (n²)
Solo está relacionado con el número de movimientos (bucle for de dos niveles) y no tiene nada que ver con el número de comparaciones. La comparación es solo una operación completada en el bucle for.
2. Estable
4. Implementación del algoritmo
3. Clasificación en colina (reduciendo la clasificación incremental)
1. Pensamientos
1. Primero, tome el tamaño del paso como n/2, divídalo en varios grupos y utilice la clasificación por inserción directa en cada grupo.
2. Reduzca el tamaño del paso a la mitad y continúe hasta que el tamaño del paso sea 1.
2.Características
1. Aún no se ha encontrado la mejor secuencia incremental y no se puede calcular la complejidad del tiempo.
3.Análisis de desempeño
1. Eficiencia del tiempo
Peor caso: O(n²)
2. inestable
Las mismas palabras clave pueden dividirse en diferentes subtablas.
4. Implementación del algoritmo
Resumen de preguntas
1. Propenso a errores
1. La complejidad temporal de la ordenación por media inserción es O (n²)
3. Clasificación de intercambio
1. Clasificación de burbujas
1. Pensamientos
1. A partir del último elemento, compare los dos elementos adyacentes. Si están en orden inverso, intercámbielos.
2. Una operación de burbujeo dará como resultado el intercambio del elemento más pequeño a la primera posición.
3. En la siguiente ronda de burbujeo, el elemento más pequeño determinado en la ronda anterior ya no participará y la columna a ordenar se reducirá en un elemento.
4. El resultado de cada burbuja es que el elemento más pequeño de la secuencia se coloca en la posición final y se completa hasta n-1.
2.Características
1. La subsecuencia ordenada generada mediante la clasificación de burbujas debe estar ordenada globalmente, lo cual es diferente de la clasificación por inserción directa.
3.Análisis de desempeño
1. Eficiencia del tiempo
1. Mejor caso: O(n)
Después de burbujear, la bandera sigue siendo Falsa, no hay intercambio de elementos y el bucle salta directamente.
4. Implementación del algoritmo
2. Clasificación rápida (método divide y vencerás)
1. Pensamientos
1. Cada vez, el primer elemento de la tabla actual se toma como pivote base (valor de pivote) para dividir la tabla.
2.i apunta al primer elemento (base), j apunta al último elemento
3. Comience con j, busque el primer elemento más pequeño que la línea de base de atrás hacia adelante. j apunta a la posición de este elemento y reemplace el elemento señalado por i con este elemento.
4. A partir de i, busque el primer elemento más grande que la línea de base de adelante hacia atrás. i apunta a la posición de este elemento y reemplace el elemento señalado por j con este elemento.
5. Comience desde j nuevamente y repita hasta que se detenga el contacto entre i y j. Coloque el valor de referencia en la posición de contacto y divida la secuencia en dos partes. El frente es menor que el valor de referencia y el último es mayor que el valor de referencia. .
6. Tome el primer elemento de las dos subsecuencias como valor de referencia y repita la operación.
2.Características
1. No se genera una subsecuencia ordenada, pero se colocará un elemento en la posición final después de cada pasada de clasificación.
2. Cuanto más ordenado sea el algoritmo, menor será la eficiencia y cuanto más desordenado sea el algoritmo, mayor será la eficiencia.
3.Análisis de desempeño
1. Eficiencia espacial
Caso promedio: O(㏒₂n)
El algoritmo es recursivo y requiere una pila de trabajo recursiva, cuyo tamaño es la profundidad del árbol recursivo.
Peor caso: O(n)
2. Eficiencia del tiempo
1. Peor caso: O(n²)
La secuencia es básicamente en orden o en orden inverso.
2. Mejor caso (caso promedio): O(n㏒₂n)
4. inestable
La palabra clave de intercambio existe
4. Formas de mejorar la eficiencia
1. Cuando la subsecuencia obtenida por división recursiva es pequeña, ya no es necesaria la recursividad y se utiliza la clasificación por inserción directa para el trabajo posterior.
2. Intente elegir un punto de referencia que pueda dividir los datos.
1. Seleccione tres elementos de la cabeza, la cola y el medio, y luego tome el valor medio
2. Seleccionar aleatoriamente puntos de referencia para garantizar que no ocurra el peor de los casos.
5. Implementación del algoritmo
Resumen de preguntas
1. Propenso a errores
1. La situación más rápida cuando un grupo de números se ordena mediante clasificación rápida
Cada punto de referencia seleccionado divide la tabla en dos subtablas de longitud similar.
2. Al buscar posibles secuencias, se deben considerar ambos órdenes (de grande a pequeño, de pequeño a grande)
2. Puntos de conocimiento
1. La clasificación rápida es más adecuada para el almacenamiento secuencial.
3.Pensamiento algorítmico
1. Algoritmo para mover todos los números impares delante de todos los números pares (mínimo tiempo/espacio)
1. Primero encuentre un número par L (i) de adelante hacia atrás, luego encuentre un número impar L (j) de atrás hacia adelante, intercambie los dos y repita hasta i> j
2. Basado en clasificación rápida, un recorrido, tiempo O (n), espacio O (1)
2. Problema de la bandera holandesa: una secuencia de bloques que consta únicamente de rojo, blanco y azul, de modo que los bloques estén organizados en el orden de rojo, blanco y azul, y el tiempo es O (n)
1. Escanee secuencialmente, intercambie el rojo hacia el frente y el azul hacia atrás
2. Tres punteros, un puntero de trabajo, uno que apunta a la cabeza, otro que apunta a la cola, declaración de cambio
Nota: Los números positivos, los números negativos y el 0 se ordenan de la misma manera.
3. Encuentre el késimo elemento más pequeño en la matriz L[1...n]
0. Puede usar la clasificación directa para obtener k elementos o más O (nlog₂n) / usar un montón superior pequeño O (n klog₂n)
1. Más emocionante, basado en una clasificación rápida, el tiempo es O (n)
2. Seleccione un punto de referencia y realice la misma operación de división que la clasificación rápida, dividida en L[1...m-1] y L[m 1...n], L(m) es el punto de referencia
3. Discuta la relación entre m y k.
1.m=k, el benchmark es el elemento que buscas
2.m <k, el elemento que estás buscando está en la segunda mitad, continúa buscando recursivamente el k-mésimo elemento más pequeño en la segunda mitad
3.m>k, el elemento que estás buscando está en la primera mitad, continúa buscando recursivamente el k-ésimo elemento más pequeño en la primera mitad
4. n números constituyen un conjunto A, que se divide en dos subconjuntos disjuntos A1 y A2. Los números son n1 y n2, y la suma de los elementos es s1 y s2. Satisfacer |n1-n2| mínimo y |s1-s2|
1. Coloque los n/2 elementos más pequeños en A1 y el resto en A2, imite la clasificación rápida y procese la posición de referencia i por separado después de dividir
2. Si i = n/2, se completa la agrupación.
3. Si i<n/2, coloque la base y todos los elementos anteriores en A1 y continúe dividiendo los elementos después de i
4. Si i>n/2, coloque la base y todos los elementos posteriores en A2 y continúe dividiendo los elementos antes de i
5. No es necesario ordenar todos los elementos, tiempo promedio O (n), espacio O (1)
4.Seleccione ordenar
1. Clasificación de selección simple
1. Pensamientos
1. Encuentre el elemento más pequeño en la primera pasada e intercambie este elemento con el primer elemento.
1. Encuentre el elemento más pequeño en la segunda pasada, intercambie este elemento con el segundo elemento y repita n-1 veces.
2.Características
1. Cada pasada de clasificación puede determinar la posición final de un elemento.
3.Análisis de desempeño
1. La complejidad del tiempo es siempre O (n²)
El número de movimientos de elementos rara vez es O(n), pero el número de comparaciones no tiene nada que ver con el estado inicial y siempre es n(n-1)/2.
2. inestable
El intercambio directo después de encontrar el elemento más pequeño destruirá el pedido original.
4. Implementación del algoritmo
2. Ordenación del montón
1. Pensamientos
1. Definición de montón
Montón raíz grande (árbol binario completo): el elemento más grande es el nodo raíz y el valor de cualquier nodo no raíz es menor o igual que el valor de su nodo padre
1.1 operaciones de montón
1. Elimina el elemento superior del montón.
Primero intercambie el último elemento con el elemento superior del montón. Después de eliminarlo, ajuste el elemento superior del montón hacia abajo para convertirse en un montón.
2. Insertar operación
Primero coloque el nuevo nodo al final del montón y luego ajústelo hacia arriba al montón
2. Construya el montón inicial (montón raíz grande)
1. Haga juicios desde el último nodo de la penúltima capa en adelante.
2. Mire solo el subárbol del nodo (no el nodo principal). Si hay un nodo en el subárbol que es más grande que el nodo raíz, busque el más grande e intercámbielo con el nodo raíz.
3. Si el montón del siguiente nivel se destruye después del intercambio, continúe usando el método anterior para ajustar el montón del siguiente nivel hasta el nodo raíz.
3. Genere el elemento superior (valor máximo) del montón, coloque el último elemento en la parte superior del montón y ajuste la parte superior del montón hacia abajo para convertirse en un montón superior grande.
4. Repita la operación hasta que solo quede un elemento en el montón.
2.Análisis de desempeño
1. La complejidad del tiempo es siempre O(n㏒₂n)
El tiempo de construcción del montón es O (n), y luego hay n-1 ajustes hacia abajo, cada vez O (h)
2. inestable
Al construir un montón, se alterará el orden original.
3. Complejidad espacial: O (1)
Utilice sólo un número constante de unidades auxiliares.
3. Implementación del algoritmo
La clasificación de selección es inestable
Resumen de preguntas
1. Preguntas clásicas
1. Cada elemento tiene dos elementos de datos k1 y k2. Ordene: mire primero k1, con el más pequeño primero; k1 tiene el mismo valor, luego mire k2, con el más pequeño primero.
1. Primero determine el orden de clasificación. Primero debe ordenarse K2 y luego k1.
2. No existen requisitos de estabilidad para la clasificación k2. Intente elegir un algoritmo con alta eficiencia.
3. Se debe utilizar un algoritmo estable para ordenar k1; de lo contrario, puede alterar el k2 ordenado.
2. Tipo de pregunta
1. Número de comparaciones al insertar/eliminar elementos del montón
2. Solo quiero obtener la secuencia ordenada parcial antes del késimo (k≥5) elemento más pequeño
1. Burbuja/selección simple/clasificación de montón disponible
2. Los dos primeros tiempos son kn
3. Clasificación del montón, el montón inicial que se construirá no excede 4n, el tiempo para obtener k elementos es klog₂n, un total de 4n klog₂n, óptimo cuando k≥5
3. Determinar si una secuencia de datos es un pequeño montón raíz
1. Es necesario dividir dos situaciones, la secuencia es un número impar y un número par.
2. Cuando es un número impar: no hay un solo nodo de rama, puede comparar directamente el nodo principal con los dos nodos secundarios.
3. Cuando es un número par: hay un solo nodo de rama, que se puede juzgar por separado, y otros nodos son normales.
5. Combinar clasificación y clasificación por base
1. Combinar clasificación
1. Pensamientos
1. Primero divida en n subtablas con longitud 1 y combínelas en pares.
2. Obtenga las sublistas con longitud 2 y combínelas de dos en dos nuevamente, y repita
2.Análisis de desempeño
1. Complejidad espacial: O (n)
Los datos combinados deben copiarse en la matriz auxiliar, la longitud es n
2. Complejidad del tiempo: O (n㏒₂n)
Cada fusión es O (n) y se realiza un total de n veces. La subsecuencia dividida no tiene nada que ver con el estado inicial.
3. Implementación del algoritmo
2. Clasificación por base
1. Pensamientos
1. Menos significativo primero (LSD)
1. Primero, coloque la secuencia en 10 colas (0 ~ 9, de arriba hacia adentro y de abajo hacia afuera) según el tamaño de los dígitos individuales.
2. Quitar de la cola todos los elementos de la primera cola en secuencia hasta la décima cola.
3. Luego se repite la operación de entrar y salir de la cola según el dígito de las decenas, y se realiza la misma operación para el dígito de las centenas.
4. Cuando el bit más alto también se retira de la cola, la secuencia está en orden.
2. Bit más significativo primero (MSD)
1. Primero, coloque la secuencia en 10 colas (0 ~ 9, de arriba hacia adentro y de abajo hacia afuera) según el tamaño del bit más alto.
2. Ordene las colas cuyo número no sea 1 de forma recursiva y vuelva a colocarlas en 10 colas según el tamaño del siguiente dígito más alto.
3. Hasta que solo haya 1 número en todas las colas, la recursividad finaliza, recopila cada cola y regresa a la capa anterior.
2.Características
1. Sin comparar, adopte la idea de clasificación de varias palabras clave
3. Análisis de rendimiento (LSD)
1. Complejidad espacial: O (r)
r es la base del número (qué sistema base)
2. Complejidad del tiempo: O (d (n r))
Realice d tiempos de asignación y recolección. Una asignación es O (n) y una colección es O (r). No tiene nada que ver con el estado inicial.
3. Estable
Tanto la asignación como la recaudación se realizan de forma secuencial.
Resumen de preguntas
1. Propenso a errores
1. ¿Qué método se debe utilizar para ordenar archivos de datos de 10 TB?
Ordenación por combinación, el archivo es demasiado grande, no se puede usar la ordenación interna, solo se puede usar la ordenación externa, generalmente se usa la ordenación por combinación
2. Puntos de conocimiento
1. Fusionar dos listas ordenadas con n elementos cada una en una lista ordenada
1. El número mínimo de comparaciones es: n
2. El número máximo de comparaciones es: 2n-1
3. Tipo de pregunta
1. ¿Cuántas comparaciones de códigos de clasificación se realizan en la clasificación por base?
Hizo varias asignaciones y colecciones.
6. Comparación y aplicación de varios algoritmos de clasificación interna.
1. Comparación de algoritmos de clasificación internos.
2. Aplicación del algoritmo de clasificación interna (resumen)
1. Selección de algoritmo
1.n es más pequeño
1. El registro en sí es pequeño.
Inserción directa (menos comparaciones)/selección simple (menos intercambios)
2. El récord en sí es grande.
elección sencilla
1.1 Escala media (n<1000)
La clasificación en colina es una buena opción
2. n es muy grande (elige el que tenga menos tiempo)
1. inestable
1. Clasificación rápida: el mejor método, con el tiempo promedio más corto cuando se distribuye aleatoriamente
2. Clasificación en montón: requiere menos espacio auxiliar que la clasificación rápida
2. Estable
Ordenación por fusión: pero tiene la mayor complejidad espacial
3.n es muy grande, la cantidad de palabras clave es pequeña y se puede descomponer
La clasificación Radix es mejor
4. La secuencia está básicamente en orden.
Clasificación por inserción directa (mayor eficiencia/menor número de comparaciones)/clasificación por burbujas
La complejidad del tiempo en el mejor de los casos es O(n)
5.El resultado después de varias clasificaciones.
1. Coloque un elemento en la posición final a la vez.
Selección simple/clasificación en montón, clasificación por burbujas/clasificación rápida (intercambio)
Sólo el elemento clasificado rápidamente no es el elemento más valioso, los otros 3 son los más valiosos (primero/último)
2. Los primeros elementos están en orden, pero no la posición final.
insertar directamente
3. Es posible que todos los elementos no estén en su posición final antes de que comience el último viaje.
insertar directamente
4. No hay garantía de que habrá un elemento en la posición final.
Inserción directa/Ordenación por colinas/Ordenación por combinación
6. Varios de los más
1. Actualmente, el mejor algoritmo de clasificación interna en términos de rendimiento medio.
Ordenación rápida
2. Algoritmos que ocupan más espacio
Combinar orden O(n)
Quicksort es O(n) en el peor de los casos
3. ¿Cuál es el más rápido cuando básicamente está en orden?
clasificación por inserción directa
4. En el mejor de los casos, se puede lograr un tiempo lineal.
inserción directa/clasificación de burbujas
7.0 El tiempo del algoritmo es independiente de la secuencia inicial.
Ordenación por selección (selección simple/ordenación en montón)/ordenación por combinación/ordenación por base
7.1 El número de pasadas de clasificación no tiene nada que ver con la secuencia inicial.
La inserción directa/selección simple son todas n-1 veces, y la clasificación por base se fija en d veces.
7.2 El número de movimientos no tiene nada que ver con la secuencia inicial.
Ordenación por base
La clasificación Radix no tiene nada que ver con la secuencia inicial.
8. Encuentre la estructura de datos menos eficiente
Montón: diseñado principalmente para ordenar y desordenado durante la búsqueda.
9. Si el almacenamiento secuencial se reemplaza por el almacenamiento en cadena, se reducirá la eficiencia del tiempo.
Clasificación en colinas/clasificación en montón (aprovechando las características de acceso aleatorio de las tablas secuenciales)
2. Mejoras para fusionar ordenación
Combinado con ordenación por inserción directa: primero use la inserción directa para obtener subsecuencias ordenadas más largas y luego fusionarlas en pares, aún estables
3. Algoritmo basado en comparación.
El proceso de decisión de comparación se puede describir mediante un árbol binario, por lo que lleva al menos O (n㏒₂n) tiempo
4. El registro en sí contiene una gran cantidad de información.
El uso de listas vinculadas como estructuras de almacenamiento puede evitar perder mucho tiempo moviendo registros
7.Clasificación externa
1. Conceptos básicos de clasificación externa.
1. Reducir la cantidad de lecturas y escrituras de memoria externa
Aumentar el número de rutas de fusión/reducir el número de segmentos de fusión
2. Aumente el número de rutas de fusión (m)
árbol perdedor
Después del uso, el número de comparaciones no tiene nada que ver con m. Puede aumentar m para reducir la altura del árbol de combinación.
3. Reducir la cantidad de segmentos fusionados
clasificación por selección de permutación
Aumente la longitud de los segmentos de combinación para reducir la cantidad de segmentos de combinación
4. Organice la secuencia de fusión de segmentos fusionados con diferentes longitudes.
mejor árbol de fusión
Árbol de Huffman generalizado al árbol m-ario
2. Método de clasificación externo (clasificación por combinación)
1. Dos etapas relativamente independientes
1. Obtenga el segmento/cadena de serie fusionados
Según el tamaño del búfer de memoria, los n registros se dividen en varios registros, que se leen en la memoria secuencialmente, se clasifican mediante clasificación interna y luego se vuelven a escribir en la memoria externa.
2. Fusione los segmentos fusionados uno por uno, de modo que los segmentos fusionados aumenten de pequeño a grande hasta que se completen.
2. Número de pasadas de fusión S = altura del árbol = ┌㏒mⁿ┐
n-el número de segmentos de fusión iniciales m-el número de rutas de fusión ┌┐-redondear hacia arriba
3. Árbol de perdedores y fusión equilibrado de múltiples vías
1. El tiempo de fusión interna aumenta con el crecimiento de m.
1. Compensa los beneficios obtenidos al reducir el número de accesos a la memoria externa debido al aumento de m.
2. No se puede utilizar la clasificación de combinación interna ordinaria
2. Árbol perdedor (árbol binario completo)
1. Nodo hoja
Registros que participan actualmente en la comparación.
2. Nodos internos
Memorice el número de secuencia del perdedor en los subárboles izquierdo y derecho y deje que el ganador continúe comparando hacia arriba hasta el nodo raíz.
3. Nodo raíz
El número de serie del número mínimo/máximo actual, no el valor en sí (ganador)
3. Después de usar el árbol perdedor para obtener el número de secuencia de valor mínimo, saque el número de valor mínimo, agregue la siguiente palabra clave en su posición, continúe la comparación y construya el árbol perdedor.
4. Después de usar el árbol perdedor, el número de comparaciones no tiene nada que ver con m. Puede aumentar m para reducir la altura del árbol de fusión.
5.m no es tan grande es mejor
A medida que m aumenta, el búfer de entrada aumenta, su capacidad disminuye y aumenta el número de intercambios de datos entre la memoria interna y externa.
4. Ordenación por selección de reemplazo (genera el segmento de fusión inicial más largo)
1. Pensamientos
1. Primero tome el número más pequeño a en el área de trabajo.
2. Luego, tome el número más pequeño entre los números mayores que a y colóquelo en esta sección de fusión, y el número menor que a se coloca en la siguiente sección de fusión.
5. Mejor árbol de fusión
1. Definición (árbol m-ary Huffman generalizado)
1. Nodo hoja
Un segmento de fusión inicial que participa en la fusión.
2. Peso del nudo de la hoja.
El número de registros en el segmento de fusión inicial.
3. Longitud del camino desde el nodo hoja hasta el nodo raíz
Número de pases de fusión
4.Nodos que no son hojas
Nuevos segmentos fusionados generados mediante la fusión
5. Longitud de ruta ponderada del árbol de fusión
Número total de registros leídos
Número de aristas pasadas por todos los nodos de la hoja * peso
2. Pensamientos
Deje que los segmentos de combinación con menos registros se combinen primero y los que tengan más registros se combinen al final.
3. El árbol de fusión óptimo es un árbol m-ario estricto
1. Si el último elemento que falta no es suficiente para formar un árbol m-ario estricto, agregue un "segmento virtual" con una longitud de 0 y combínelo primero.
2. Número de segmentos de fusión vacíos = m-u-1
u=(n0-1)%(m-1)
n0 - el número de nodos con grado 0 (el número de segmentos fusionados iniciales) árbol m-m
Resumen de preguntas
1. Tipo de pregunta
1. Hay n registros en total, el espacio de trabajo puede acomodar registros y se realiza una fusión equilibrada de m vías.
1. El número inicial de segmentos fusionados r=n/a, el número de pasadas fusionadas s=┌㏒m(r)┐
2,5 segmentos de combinación iniciales, cada uno con 20 registros, utilizando una combinación equilibrada de 5 vías, Número de comparaciones sin árbol perdedor y con árbol perdedor
1. No se utiliza ningún árbol perdedor: se deben comparar 5 registros 4 veces para seleccionar el más pequeño. Se requieren 100 registros en total para seleccionar el más pequeño, 99 operaciones.
2. Utilice el árbol perdedor: la altura del árbol perdedor es h = 3, seleccione el más pequeño cada vez y el número de comparaciones no exceda h, un total de 100 veces, no más de 300 veces
3. Realice una fusión equilibrada de m vías, el número de buffers de entrada y salida
1. Situación normal (funcionamiento en serie): se requieren m búfer de entrada y 1 búfer de salida
2. Operación paralela de entrada/salida: 2 m de búfer de entrada, 2 búfer de salida
4. El número total de archivos de entrada/salida disponibles al mismo tiempo no supera los 15
Se pueden realizar hasta 14 formas de fusionar