Tabla de contenido
Libros o vídeos interesantes/legibles relacionados
Sitios web recomendados para aprender algoritmos y estructuras de datos
Complejidad temporal y espacial
Breve descripción de la estructura de datos.
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
-
Conceptos básicos del lenguaje C (puedes leer libros, Bilibili, etc.) →
-
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 →
-
Estructuras de datos y algoritmos (tabla lineal/árbol/gráfico/hash + clasificación/búsqueda/planificación, etc., aprendizaje bajo demanda) →
-
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. →
-
Opcional "Introducción a la personalización de la CPU" →
-
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
-
Introducción a la experiencia de aprendizaje | Codificación Xiaolin (xiaolincoding.com) . Introducción | Codificación Xiaolin (xiaolincoding.com) .
-
tangtangcoding/C-CppLearning: aprendizaje de lenguaje C y C++ (github.com) , con mucho contenido.
-
Sistema gráfico Xiaolin , Notas: Sistema gráfico (codificación Xiaolin)_Blog-CSDN de NiXGo , recomendado.
-
Red ilustrada Xiaolin , recomendada.
-
Ilustración dibujada a mano de HTTP. 30 diagramas de preguntas comunes de entrevistas HTTP.
-
Tutorial de TCP/IP | Tutorial para principiantes (runoob.com) . Tutorial HTTP | Tutorial para principiantes (runoob.com) .
-
"Autocultivo del lenguaje C integrado" habla desde la arena hasta la CPU, desde el editor hasta el compilador, desde el lenguaje C de alto nivel hasta la administración de memoria y desde GNU hasta la programación multitarea.
-
(Completado) (Pequeña Tortuga) Estructuras de datos y algoritmos_bilibili_bilibili .
-
El profesor Guojitang da una conferencia sobre [Estructura de datos y lenguaje de algoritmo C] (muy agudo)_ Bilibili_bilibili habla lentamente.
-
Libro de código abierto "Nueva interpretación de algoritmos" , ¿por qué lo subrayé? , "¡Ajá!" algoritmo".
Sitios web recomendados para aprender algoritmos y estructuras de datos
-
Code Caprice (programmercarl.com) , recomendado, integral y relativamente completo.
-
Introducción a la sección de estructura de datos - OI Wiki (oi-wiki.org) .
-
Tutorial de introducción al algoritmo (implementación en varios idiomas) (biancheng.net) .
-
Introducción a los conceptos básicos de algoritmos - OI Wiki (oi-wiki.org) . Una introducción a la sección de programación dinámica - OI Wiki (oi-wiki.org) .
-
Una introducción a la sección de cadenas - OI Wiki (oi-wiki.org) .
-
Una introducción a la teoría de grafos - OI Wiki (oi-wiki.org) .
-
Consejos de programación: las 15 estructuras de datos más útiles y los 15 algoritmos más importantes_Comunidad de diseño y tecnología robótica (eet-china.com) . Una introducción completa a 30 estructuras de datos y algoritmos importantes (se recomienda guardar como favorito) - Comunidad en la nube - Huawei Cloud (huaweicloud.com) .
Preguntas de revisión
-
Las 100 preguntas más populares de LeetCode sobre bilibili .
-
Apéndice al final de este artículo: Adjunto: Resumen de preguntas sobre algoritmos.
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.