Breve descripción de la estructura de datos, complejidad temporal y espacial, sitios web de aprendizaje recomendados.

Tabla de contenido

Ruta de aprendizaje TI

Libro difícil relacionado

Libros o vídeos interesantes/legibles relacionados

Sitios web recomendados para aprender algoritmos y estructuras de datos

Preguntas de revisión

Complejidad temporal y espacial

Breve descripción de la estructura de datos.

concepto basico


Una breve introducción a las estructuras de datos y algoritmos y una revisión de la informática. Este artículo no es un tutorial básico , este artículo enumerará una gran cantidad de sitios web de aprendizaje y referencia. Como es la práctica antigua, un artículo es una colección (este artículo utiliza entrada de voz (versión para PC del método de entrada iFlytek) para acelerar la codificación, pero aún mantiene un estilo de escritura conciso).

Estructura de datos + algoritmo = programa. Estructura de datos: modelado de problemas de la vida real que sea consistente con el almacenamiento en computadora; algoritmo: pasos para resolver problemas del mundo real (consistentes con finitud, certeza, factibilidad, etc.).


Ruta de aprendizaje TI

  1. Conceptos básicos del lenguaje C (puedes leer libros, Bilibili, etc.) →

  2. Los Tres Mosqueteros del Lenguaje C: “C y Punteros”, “Trampas y Defectos de C” y “Programación Experta en C”, clásicos que durarán para siempre →

  3. Estructuras de datos y algoritmos (tabla lineal/árbol/gráfico/hash + clasificación/búsqueda/planificación, etc., aprendizaje bajo demanda) →

  4. Disciplinas informáticas. "Principios de composición informática"/"Arquitectura informática"; "Sistema operativo informático"/"Sistema operativo moderno"/"Comprensión profunda de los sistemas informáticos"; "Principios de compilación" opcionales y "Análisis exhaustivo de GCC"; red protocolos como "Red informática" ", "Explicación detallada TCP-IP Volumen 1/Volumen 2/Volumen 3", etc. →

  5. Opcional "Introducción a la personalización de la CPU" →

  6. Dirección: dirección de Linux integrado, dirección de verificación/diseño de chip/FPGA, dirección de algoritmo específico (como CV, ML, DL), etc.

Para obtener más detalles, consulte el resumen de rd2coding/Road2Coding: Road to Programming (github.com) , que es más completo.

Libro difícil relacionado

Simplemente busque el nombre sin dar un enlace.

  • ¿Qué libro sobre "Estructuras de datos y algoritmos" es el mejor? - Zhihu (zhihu.com) Esta respuesta enumera algunos buenos libros sobre estructuras de datos y algoritmos.

  • "Introducción a los algoritmos" (Clásico) es un libro de introducción a los algoritmos en la disciplina de la informática.

  • "Arquitectura informática" (clásica), "Sistema operativo informático"/"Sistema operativo moderno"/"Comprensión profunda de los sistemas informáticos".

  • "El secreto de la codificación", introducción/recomendación relacionada Quiero practicar los conocimientos de "El secreto de la codificación", ¿qué software me resulta útil? -Zhihu (zhihu.com) . "Principios de compilación" (clásico), "Análisis en profundidad de GCC".

  • Protocolos de red como "Red informática" y "Explicación detallada TCP-IP Volumen 1/Volumen 2/Volumen 3" Si desea  obtener más información sobre el protocolo HTTP, ¿cuáles son los libros recomendados? -Zhihu (zhihu.com) .

  • Relacionado con la aplicación integrada: "GNU Make", "Depuración con GDB", "Desarrollo avanzado de programas de Linux", "Programación multiproceso POSIX", "Tutorial básico de Linux integrado", "Manual completo de desarrollo de aplicaciones de Linxu integrado", "Explicación detallada de Desarrollo de aplicaciones Linux embebidas.

  • Relacionado con el nivel inferior integrado: Relacionado con el kernel: "Comprensión profunda del kernel de Linux", "Análisis de escenarios del código fuente del kernel de Linux", "Diseño e implementación del kernel de Linux"; relacionado con el controlador: "Controlador de dispositivo Linux", "Controlador de dispositivo Linux" explicación detallada del desarrollo", "Introducción y práctica del desarrollo de controladores de Linux".

Libros o vídeos interesantes/legibles relacionados


Sitios web recomendados para aprender algoritmos y estructuras de datos

Preguntas de revisión


Complejidad temporal y espacial

La complejidad del tiempo representa el orden de magnitud en el que el número de sentencias ejecutadas dentro de un algoritmo aumenta en el peor de los casos a medida que aumenta el número de bucles n. La cantidad de veces que se usa una declaración (frecuencia) en un algoritmo se expresa como f (n), n es el número de ciclos de declaraciones de bucle en el algoritmo y los cambios en n cambian directamente la cantidad de declaraciones utilizadas en todo el algoritmo. ; la complejidad temporal es O(g(n)) La definición de es que para un algoritmo, si y sólo si hay enteros positivos c y n0 tales que f(n) ≤ cg(n) se cumple para todo n ≥ n0, entonces la complejidad temporal asintótica del algoritmo es f(n) = O(g(n)), g(n) es una función de n.

Comparación de la tasa de crecimiento de la frecuencia de las declaraciones para cada complejidad temporal: O(log_2(n)) < O(n) < O(n*log_2(n)) < O(n^2) < O(n^3) < O (2 ^ n) < O (n!), Los tres primeros son buenos, los dos últimos son inaceptables y el resto son insatisfactorios.

El tiempo de ejecución del programa no solo depende del tamaño del problema, sino que también puede cambiar con el estado de los datos, es decir, su complejidad temporal cambiará. Generalmente, al evaluar algoritmos, se utiliza la complejidad temporal del peor de los casos.

La complejidad del espacio es muy parecida.

Breve descripción de la estructura de datos.

Para un proyecto de software, si la estructura de datos está bien diseñada, será particularmente conveniente llamar, modificar y consultar cuando se implementen funciones posteriores, lo que puede lograr el doble de resultado con la mitad de esfuerzo.

concepto basico

Varias categorías de estructuras de datos.

  • Mesa lineal:

    • orden (matriz),

    • Lista enlazada (lista enlazada (lista enlazada individualmente, lista enlazada doblemente, lista enlazada circular (unidireccional, bidireccional), lista enlazada estática (implementada con la ayuda de una matriz))),

    • Especial (pila (FILO), cola/montón (FIFO)).

  • Árbol: árbol binario, árbol rojo-negro, etc.

  • Gráfico: gráfico no dirigido, gráfico dirigido, etc.

  • Índice/Hash: mapas, tabla hash.

Dividir según la relación

  • Según la relación lógica (relación de conexión de elementos):

    Colección, lineal (matriz, pila, cola/montón, lista enlazada, etc.), árbol (uno a muchos), gráfico (muchos a muchos).

  • Según relación de almacenamiento:

    • Almacenamiento secuencial: como las matrices, debe solicitar espacio con anticipación (asignación estática (realizada en tiempo de compilación) o asignación dinámica (malloc y gratuita)). Ventajas: la ubicación física es continua y compacta, y se puede acceder a ella de forma aleatoria o directa; Desventajas: se producirá fragmentación de la memoria y se deben seguir los cambios al agregar, eliminar o cambiar (es necesario mover una gran cantidad de elementos).

    • Almacenamiento vinculado: como listas vinculadas, árboles y gráficos, debe solicitar espacio con anticipación (asignación dinámica (malloc y gratuita)). Ventajas: encadenado, discreto, basado en nodos, el espacio se puede asignar dinámicamente, fácil de cambiar (cambiar la dirección del nodo); Desventajas: gran ocupación de espacio, búsqueda inconveniente (es necesario recorrer toda la lista vinculada).

    • Almacenamiento de índice: la forma estructural de "datos de índice" (valor-clave, también llamado mapas). "mapa" en Java y C++, y "diccionario" en Python.

    • Almacenamiento hash: como tabla hash (Hash Table), etc.

Operaciones de datos

  • Las operaciones básicas que debe implementar cada estructura de datos básica son: agregar (insertar), eliminar (eliminar), cambiar (actualizar), verificar (recuperar), juzgar (vacío, lleno), ordenar (ordenar), restablecer (restablecer).

  • Se pueden implementar operaciones más complejas utilizando las operaciones básicas anteriores.

La complejidad temporal de la operación.

Los conceptos específicos se mencionan en la sección "Complejidad del tiempo y el espacio" del artículo " Especificaciones de escritura de C y MCU y otros ". (Estructura de datos) La complejidad del tiempo se puede resolver en diez minutos (complejidad del tiempo del algoritmo) - Jianshu (jianshu.com) . Un conjunto de diagramas para comprender la "complejidad del tiempo"_ 12 26 Blog de 25 - CSDN Blog_Time Complexity .

  • Buscar: O(1) para estructura de almacenamiento secuencial, O(n) para lista enlazada individualmente.

  • Inserción y eliminación: O(n) para estructura de almacenamiento secuencial, O(1) para lista enlazada individualmente.

Supongo que te gusta

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