0% encontró este documento útil (0 votos)
442 vistas8 páginas

Algoritmos y Estructuras de Datos

Este documento presenta un programa de la asignatura Algoritmos y Estructuras de Datos. La asignatura consta de 64 horas totales divididas en 4 horas semanales. Cubre temas como funciones, recursividad, estructuras de datos lineales y no lineales, algoritmos de ordenamiento y búsqueda, y programación dinámica utilizando Python. Los objetivos son que los estudiantes comprendan conceptos de programación y puedan implementar algoritmos para resolver problemas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
442 vistas8 páginas

Algoritmos y Estructuras de Datos

Este documento presenta un programa de la asignatura Algoritmos y Estructuras de Datos. La asignatura consta de 64 horas totales divididas en 4 horas semanales. Cubre temas como funciones, recursividad, estructuras de datos lineales y no lineales, algoritmos de ordenamiento y búsqueda, y programación dinámica utilizando Python. Los objetivos son que los estudiantes comprendan conceptos de programación y puedan implementar algoritmos para resolver problemas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

PROGRAMA

Algoritmos y Estructuras de Datos


-00184-
Dr. Diego Agustín Ambrossio
1. Cantidad de horas semanales y totales

Horas semanales: 4 hs. (cuatro horas)


Horas totales: 64 hs. (sesenta y cuatro horas)

2. Nombres de las/los integrantes del equipo docente

Docente: Dr. Diego Agustín Ambrossio.


Jefe de Trabajos Prácticos: Anl. Sis. Angel Leonardo Bianco.

3. Fundamentación

Introducir al estudiante a la abstracción de problemas mediante el uso de algoritmos y estructuras de datos


básicas, para la solución de problemas computacionales.
Algoritmos y Estructura de datos es una asignatura de naturaleza teórica–práctica orientada a desarrollar el
razonamiento para la solución de problemas a través de generación de programas.
Utilizando las estructuras de datos en el marco del paradigma de la programación procedural y su
contribución a la resolución de problemas del mundo real.
Construyendo sobre la articulación de contenidos de las cátedras 00175 - Introducción a la Programación y
00181 - Recolección de Datos y Análisis Primario de la Información. Los alumnos deberán afianzar y re-
evaluar sus conocimientos de programación procedural. Luego adaptando y optimizando sus conocimientos
previos, aplicando “buenas practicas” y estudiando en detalle los distintos tipos de estructuras de datos
apropiadas para resolver problemas complejos.
Finalmente, los conceptos de Complejidad Computacional, y la Validación y Verificación de Programas, son
herramientas imprescindibles, para la carrera profesional en Ciencias de Datos. Aquellos que
necesariamente serán requeridos en toda su vida profesional, y formando una solida base—junto a las
estructuras de datos complejas—para articular con las cátedras: 00187 – Modelado y Simulación, y 00190
– Modelado Multivariado, proveyendo una serie de herramientas teóricas (y practicas) para la correcta
formalización y modelado de datos.

4. Programa sintético

La materia abordará los conceptos fundamentales de la programación de computadoras, utilizando Python


como lenguaje de estudio. Los temas a abordar serán:
Unidad 1: Introducción a la Programación.

Unidad 2: Funciones.

Unidad 3: Recursividad.

Unidad 4: Tipos Abstractos de Datos, Encapsulamiento.

Unidad 5: Objetos en Python.

Unidad 6: Estructuras de Datos Lineales.

Unidad 7: Algoritmos de Ordenamiento y Busqueda.

Unidad 8: Archivos Secuenciales y de Acceso Aleatorio

Unidad 9: Nociones de Complidad Computacional.

Unidad 10: Programación Dinámica, Punteros y Estructuras Dinamicas.

5. Objetivos

Lograr que el alumno sea capaz de:

• Comprender y aplicar los conceptos de programación. Interpretar cada una de las fases de
desarrollo de un programa.
• Implementar algoritmos en un lenguaje de programación.
• Comprender y utilizar correctamente las distintas herramientas y símbolos de la diagramación lógica
de programas.
• Diagramar adecuadamente distintos procesos para ser codificados en cualquier lenguaje de
programación.
• Estudiar las estructuras de datos básicas para la implementación de tipos de datos abstractas
empleadas en aplicaciones computacionales.
• Conocer y utilizar algoritmos de búsqueda y ordenamiento.
• Desarrollar algoritmos para el mantenimiento y procesamiento de archivos secuenciales y directos.
• Resolver problemas mediante técnicas modulares y estructuradas.
• Resolver problemas utilizando Recursividad y analizar distintos tipos la misma.
• Analizar la complejidad y el orden de duración de un algoritmo.
• Comprender los conceptos de Validación y Verificación de Algoritmos.
• Fomentar la valoración de los algoritmos con base en el contexto de la solución computacional
donde son utilizados.
• Comprender las distintas técnicas de Programación Dinámica, tanto para optimizar las estructuras
de datos y algoritmos.
• Valorizar el pensamiento lógico individual y grupal.

6. Propósitos de la enseñanza

El curso es teórico practico, donde el estudiante debe desarrollar problemas en grupo e individualmente,
que permita poner en práctica los conocimientos adquiridos.

Las prácticas serán definidas por parte del profesor el cual dará́ únicamente los lineamientos generales a
seguir. El o los problemas escogidos y su solución aplicada deben ser expuestos por los grupos respectivos.

7. Contenidos

Unidad 1: Introducción a la Programación.

Reseña histórica de la programación. Ciclo de vida de un programa: Concepción, codificación, prueba y


mantenimiento. Código fuente, código objeto y código ejecutable. Tipos de Datos y Estructuras básicas de
datos provistas por Python (diccionarios, tuplas, listas, etc.)

Unidad 2: Funciónes.

Conceptos de función. Parámetros de entrada y salida. Tipos de pasaje de parámetros. Variables locales y
globales. Tiempo de vida. Anidamiento de procedimientos y funciones. Visibilidad y alcance.
Implementación en unidades

Unidad 3: Recursividad.

División de un problema en sub-problemas. Posposición del trabajo. Rastreo inverso. Programas de árbol
estructurado. Principios de recursión. Aplicación a estructuras de información dinámica.

Unidad 4: Tipos Abstractos de Datos, Encapsulamiento.

Tipos abstractos de datos. Abstracción y encapsulamiento. Implementación de un tipo abstracto de datos.


Tipos abstractos de datos y estructuras de datos. Encapsulamiento de modular.

Unidad 5: Objetos en Python.

Conceptos de básicos Objetos, clases, métodos. Definición de métodos de clase y métodos en objetos
instanciados. Ciclo de vida de los Objetos. TAD’s y encapsulamiento proveído por los objetos en Python.

Unidad 6: Estructuras de Datos Lineales.

Tipos de datos definidos por el usuario. Definición de estructuras de datos. Concepto de matriz. Listas,
vectores y matrices multidimensionales. Operaciones. Concepto de registro y campo. Definición,
almacenamiento y recuperación de registros.
Unidad 7: Algoritmos de Ordenamiento y Busqueda.

Búsqueda lineal, binaria, en tabla y en cadena. Clasificación de arreglos y registros. Clasificación por
inserción, selección e intercambio. Clasificación por método Shell. Métodos de clasificación avanzados.

Unidad 8: Archivos Secuenciales y de Acceso Aleatorio

Definición y tipos de archivo. Archivos de texto y binarios. Operaciones disponibles para un archivo:
lectura, escritura, lectura y escritura. Archivos secuenciales y de acceso directo. Archivos indexados.
Procesamiento de archivos secuenciales. Totalizadores y contadores. Procesamiento de archivos directos.
Almacenamiento, recuperación, actualización y borrado de datos en forma lógica y física. Directorios:
creación, cambio y borrado.

Unidad 9: Nociones de Complidad Computacional.

Definición de Complejidad Computacional. Notación “Big O” y calculo mediante acotación en relación a


otros problemas simples. Jerarquías de Complejidad Computacional. Análisis de Algoritmos vistos en clase.
Comparación entre distintos algoritmos de búsqueda. Relación entre Complejidad Computacional y
Complejidad Espacial.

Unidad 10: Programación Dinámica, Punteros y Estructuras Dinamicas.

Concepto de puntero. Variables y operadores de puntero. Expresiones de punteros: asignaciones,


aritmética y comparación. Funciones de asignación dinámica de memoria. Tipos de punteros. Operaciones
con punteros. Punteros y arrays

Definición de datos complejos. Tipos de datos complejos. Listas enlazadas: Fundamentos teóricos.
Operaciones de inserción e inserción ordenada, búsqueda y borrado. Listas doblemente enlazadas y
circulares. Pilas y Colas: Conceptos, especificación y operaciones.

8. Bibliografía y recursos audiovisuales

Bibliografía Obligatoria:
- [Joyanes, 2003] Joyanes Aguilar, L. (2003). Fundamentos de Programación; Algoritmos, Estructuras
de Datos y Objetos (3a. ed.). Madrid: McGraw-Hill Interamericana.
- [Cormen et al., 2017] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2017). Introduction
to algorithms.
- [Aho et al., 1998] Aho, A. V., Hopcroft, J. E., & Ullman, J. D. (1998). Estructuras de datos y
algoritmos.
- [Goodrich et al., 2018] Goodrich, M. T., Tamassia, R., & Goldwasser, M. H. (2018). Data structures
and algorithms in Python.
- [Burin et al., 2017] Ing. Daniel Burin y Docentes de la cátedra 75.01/ 95.01 Computación (ed.
2017). Departamento de Computación, Facultad de Ingeniería, Universidad de Buenos Aires.
“Algoritmos y Programación I Aprendiendo a programar usando Python como herramienta”
http://materias.fi.uba.ar/7501/apunte%20PYTHON.pdf
- [Lee et al., 2015] Lee, K. D., & Hubbard, S. (2015). Data Structures and Algorithms with Python.
Cham: Springer International Publishing.

Bibliografía Complementaria:

- [Weiss, 2010] Weiss, M. A. (2010). Data structures & problem solving using Java. Boston: Pearson
Education.
- [Drozdek, 2007] Drozdek, A. (2007). Estructura de Datos Y Algoritmos en Java. Cengage Learning
Latin America.
- [Brassard et al., 2008] Brassard, G., & Bratley, P. (2008). Fundamentos de algoritmia. Madrid:
Pearson Prentice Hall.
- [Heilman, 2010] Heileman,Gregory, L. (2010). Estructura de datos, algoritmos y programación
orientada a objetos. La Habana: Editorial Félix Varela.
- [Gamma et al., 1995] Gamma, E., Helm, R., Johnson, R. E., & Vlissides, J. (1995). Design patterns:
Elements of reusable object-oriented software. Reading, Mass: Addison-Wesley.

9. Metodología

La cátedra estará compuesta por clases teórico-prácticas virtuales “presenciales” y trabajos prácticos
individuales y grupales.
Las clases teórico-prácticas, estarán divididas del siguiente modo:
• Exposición de los conceptos teóricos y Debate sobre los temas dados.
• Trabajos prácticos y ejercitaciones en conjunto para fijar los contenidos.
Trabajos prácticos:
• Resolución de ejercicios simples durante la clase.
• Auto-evaluaciones resumiendo los contenidos mínimos vistos en clase.
• Desarrollo de trabajos prácticos de investigación.
• Trabajos individuales y grupales
• Practica continua para adoptar “buenas practicas”
• Resolución ejercicios de una guía de Trabajos Prácticos
• Seguimiento de trabajos prácticos desarrollados en lenguaje Python.

10. Uso del campus virtual e integración de TIC en la propuesta pedagógica

La transformación de la educación durante los últimos tiempos, nos apremia a poner foco y
maximizar el uso de TIC’s para implementar la enseñanza “virtual” o “a distancia”, preparándonos
para la educación “post-pandemia”.
El uso del “Campus Virtual” continuando la propuesta pedagógica, será el portal de conocimiento
en donde los alumnos podrán la propuesta educativa y sus recursos. Complementando su uso,
con otras tecnologías para mejorar la participación e involucramiento de los estudiantes, tales
como, clases video-presenciales, herramientas on-line para la resolución de problemas, y recursos
mediáticos para reforzar la propuesta educativa.
Finalmente, utilizar el medio para continuar y reforzar el trabajo de los alumnos en grupos, ya que
sin un “aula física” la formación de “grupos”, e interacciones entre los estudiantes es reducida.

11. Evaluación
A. Requisitos de aprobación:

• Desarrollo de la carpeta de trabajos prácticos.

• Aprobación de las evaluaciones parciales, con un porcentaje mínimo del 60%

• Aprobación de la evaluación final, con un porcentaje mínimo del 70%

B. Criterios de evaluación:

C. Formatos de la evaluación de las distintas instancias:

• Examen Parcial I 25%

• Examen Parcial II 25%

• Auto-Evaluaciones, Exposiciones y Asignaciones 20%

• Proyecto Final 30%


• Evaluación final escrita/oral de contenido teórico-practico que se aprobará con un porcentaje
mínimo del 70%

12. Cronograma de actividades / Planificación de clases

Las clases de desarrollaran los días Jueves de 19 a 22 hs. En encuentros sincrónicos vía Google Meet y
posterior aplicación práctica a desarrollar en la semana siguiente. Cada Jueves se hará otro encuentro de
carácter Práctico.
Cronograma
Semana Tema
1 TEORIA Introducción y Repaso de Python
CLASE TEORICO-
2 Tipos de Datos, Errores y Excepciones
PRACTICA
CLASE TEORICO-
3 Funciones y Recursividad
PRACTICA
CLASE TEORICO-
4 Objetos en Python
PRACTICA
CLASE TEORICO-
5 Estructuras de Datos Lineales
PRACTICA
CLASE TEORICO-
6 – REPASO – PRACTICA –
PRACTICA
7 PARCIAL 1er PARCIAL
CLASE TEORICO-
8 Algoritmos de Ordenamiento y Búsqueda
PRACTICA
CLASE TEORICO-
9 Nociones de Complidad Computacional
PRACTICA
CLASE TEORICO-
10 Eficiencia de Algoritmos
PRACTICA
CLASE TEORICO-
11 Archivos
PRACTICA
CLASE TEORICO- Programación Dinámica, Estructuras de Datos
12
PRACTICA Dinamicas
13 PRACTICA – REPASO GENERAL –
14 PARCIAL 2do EXAMEN PARCIAL
15 RECUPERATORIO Recuperatorios 1er y 2do Parcial

16 Cierre de notas

PROGRAMA
NOMBRE MATERIA
CÓDIGO MATERIA
NOMBRE Y APELLIDO PROFESOR

También podría gustarte