Algoritmos y Estructuras de Datos
📖 Descripción de la Materia
Objetivo General
Introducir a los estudiantes en los conceptos fundamentales de algoritmos y estructuras de datos, esenciales para el desarrollo de software eficiente y efectivo. Se enfatizará la importancia de seleccionar las estructuras de datos adecuadas para resolver problemas específicos y se enseñarán métodos para evaluar la eficiencia de los algoritmos en términos de tiempo y espacio.
Objetivos Específicos
- Dominar el uso de punteros y gestión dinámica de memoria
- Aplicar conceptos de programación orientada a objetos en C++
- Implementar y optimizar funciones recursivas
- Diseñar e implementar estructuras de datos lineales y no lineales
- Analizar la complejidad temporal y espacial de algoritmos
- Seleccionar algoritmos de ordenamiento y búsqueda apropiados según el contexto
Competencias a Desarrollar
- Conceptuales: Fundamentos teóricos de algoritmos, estructuras de datos y análisis de complejidad
- Procedimentales: Implementación eficiente de estructuras de datos, optimización de algoritmos y resolución de problemas computacionales
- Actitudinales: Pensamiento analítico, atención al detalle y compromiso con la eficiencia en el desarrollo de software
📚 Plan de Estudios
- Unidad 1: Punteros y memorias
- 1.1 Variables, memoria y direcciones
- 1.2 Paso de parámetros mediates punteros
- 1.3 Uso dinámico de la memoria. Reserva y liberación de memoria
- 1.4 Aritmética de Punteros
- 1.5 Usos y Ejemplos
- Unidad 2: Conceptos básicos de objetos y clases
- 2.1 Clases y Objetos
- 2.2 Métodos y atributos privados y públicos
- 2.3 Herencia
- 2.4 Constructores
- 2.5 usos y ejemplos
- Unidad 3: Estructuras lineales
- 3.1 Arreglos y Vectores
- 3.2 Listas simplemente enlazadas
- 3.3 Pilas
- 3.4 Colas
- 3.5 Usos y Ejemplos
- Unidad 4: Complejidad algorítmica
- 4.1 Complejidad temporal y espacial
- 4.2 Funciones asintóticas Notación Big O, Omega O y Theta O
- 4.3 Ejemplos
- Unidad 5: Algoritmos de ordenamiento y búsqueda
- 5.1 Algoritmos de ordenamiento de Orden cuadrático
- 5.2 Algoritmos de ordenamiento de Orden logarítmico
- 5.3 Comparación y usos apropiados de cada algoritmo
- 5.4 Algoritmos de búsqueda: lineal, binaria y otros
- 5.5 Usos y ejemplos
- Unidad 6: Estructuras tipo árbol
- 6.1 Definición y formas de implementar árboles.
- 6.2 Árbol binario y m-ario
- 6.3 Balances y recorridos de arboles binarios
- 6.4 Otros tipos de árboles usuales
- 6.5 Usos y ejemplos
- Unidad 7: Otras estructuras de datos
- 7.1 Tablas y funciones de dispersión
- 7.2 Conjuntos y bolsas (set y bags)
- 7.3 Mapas de Bits
- Unidad 8: Grafos
- 8.1 Definición y formas de implementar grafos
- 8.2 Algoritmos sobre grafos dirigidos
- 8.3 Algoritmos sobre grafos no dirigidos
- 8.4 Usos ejemplos
- Unidad 9: Estrategias algorítmicas
- 9.1 Algoritmos “Divide y Vencerás”
- 9.2 Algoritmos voraces
- 9.3 Algoritmos de backtracking
- Unidad 10: Visión de conjunto e historia de los algoritmos y las estructuras de datos
- 10.1 Revisión histórica de los algoritmos y las estructuras de datos
🗂️ Índice de Contenidos
📝 Apuntes por Unidad
- 📁 Unidad 1: Punteros y Memoria
- 📁 Unidad 2: Recursividad
- 📁 Unidad 3: Estructuras Lineales - Parte 1
- 📁 Unidad 3: Estructuras Lineales - Parte 2
- 📁 Unidad 4: Complejidad Algorítmica
- 📁 Unidad 5: Ordenamiento y Búsqueda
- 📁 Unidad 6: Estructuras Tipo Árbol
- 📁 Unidad 7: Otras Estructuras
- 📁 Unidad 8: Grafos
- 📁 Unidad 9: Estrategias Algorítmicas
- 📁 Unidad 10: Visión de Conjunto
📚 Recursos Adicionales
- C Programming Notes
- Curso C++ sitio conclase
- Curso C++ Univ. Pardue
- Documentación oficial de C++
- W3Schools C++ Tutorial