Grado en Ingeniería Multimedia - Mención en Videojuegos

Grado en Ingeniería Multimedia - Mención en Videojuegos

Fórmate como graduado en Ingeniería Multimedia en La Salle y prepárate para ser un profesional excelente en integración tecnológica, con una sólida formación técnica y artística

Técnicas avanzadas de programación

Descripción: 

La asignatura de Técnicas Avanzadas de Programación profundiza en el diseño de algoritmos para la resolución de problemas complejos, reforzando la base de ciencias de la computación necesaria para la formación en ingeniería.

Mediante el uso de pseudocódigo se fomenta el razonamiento algorítmigo abstracto, mientras que conceptos como la complejidad computacional permiten que el estudiantado analice el rendimiento de distintas soluciones para justificar su adecuación a un contexto. Finalmente, la implementación práctica de estos algoritmos permite al estudiantado seguir desarrollando algunas de las habilidades esenciales en el campo de la programación, como la capacidad de detectar y resolver errores o la capacidad de trabajar en equipo.

Por lo tanto, la asignatura construye sobre los fundamentos de programación y algorítmica establecidos en el primer curso y prepara al estudiantado para afrontar asignaturas que requieran conocimientos del área de ciencias de la computación.

Tipo asignatura
Tercer - Obligatoria
Semestre
Primero
Curso
2
Créditos
4.00

Profesores Titulares

Profesor/a

Profesores Docentes

Conocimientos previos: 

  • Dominio de las técnicas de programación trabajadas en la asignatura "Metodología y Tecnología de la Programación" (análisis descendente, modularidad, paso de parámetros y estructuras de datos básicos).
  • Facilidad para escribir código mediante un lenguaje de programación (preferiblemente C/Java).
  • Capacidad para seguir y proponer razonamientos matemáticos.

Objetivos: 

La asignatura tiene como objetivo ofrecer una visión avanzada de la programación de algoritmos. El estudio de la eficiencia de los algoritmos y diversas técnicas de diseño se trabajan en profundidad con el objetivo de resolver problemas de forma eficiente y elegante. Adquiriendo los conocimientos de la asignatura, el estudiantado desarrolla habilidades para proponer y discutir la adecuación de soluciones a problemas complejos.

Contenidos: 

Los contenidos de la asignatura son los siguientes:

1. Especificación de algoritmos

1.1 - Sintaxis

1.2 - Expresiones booleanas

1.3 - Quantificadores y operadores de rango

2. Eficiencia de algoritmos

2.1 - Eficiencia, rendimiento y complejidad

2.2 - Análisis asintótico

2.3 - Algoritmos de ordenación

3. Diseño recursivo

3.1 - Etapas del diseño recursivo

3.2 - Recursividad final y técnica de inmersión

3.3 - Ordenación recursiva

4. Programación dinámica

4.1 - Estrategia top-down

4.2 - Estrategia bottom-up

5. Teoría de la complejidad computacional

5.1 - Tesis de Cobham

5.2 - Clases de complejidad

5.3 - P vs NP

6. Problemas combinatorios

6.1 - Fuerza bruta

6.2 - Backtracking

6.3 - Branch and bound

6.4 - Greedy

Metodología: 

Durante la asignatura, se usarán las siguientes metodologías:

  • Clases magistrales, para aquellos contenidos que lo requieran.
  • Problemas y ejercicios a clase, para consolidar conocimientos.
  • Ejercicios de EC en clase y prácticas evaluables.
  • Self-paced learning, para contenidos que no se evaluarán directamente.
  • Flipped-classroom, para motivar el autoaprendizaje y dar soporte al estudiantado.

Evaluación: 

La asignatura se evalúa mediante un examen (50%) y dos prácticas (20% y 30%). También se realizan ejercicios de evaluación continua que, más allá de fomentar el seguimiento de la asignatura, pueden permitir a alumnos que los superen con buenos resultados convalidar el examen final mediante una entrevista. Es necesario aprobar el examen y las prácticas por separado

Criterios evaluación: 

Se valorará:

  • En el código de las prácticas:
    • La corrección del diseño y la implementación de los algoritmos en relación a los requisitos.
    • La eficiencia y rendimiento de los algoritmos, tanto en su diseño como en su implementación.
    • La calidad del código y la facilidad de su validación.
  • En las memorias de las prácticas:
    • La adecuación de la estructura del documento en relación a los requisitos.
    • La idoneidad de las explicaciones conceptuales y de la justificación de las decisiones tomadas.
    • La relevancia y corrección matemática del análisis de rendimiento, así como de las conclusiones que se extraen de él.
  • En los exámenes:
    • La capacidad de razonar una solución eficiente para un problema complejo que no se ha tratado anteriormente.
    • La correcta aplicación de las técnicas contenidas en el temario, como el análisis asintótico o el diseño recursivo.
    • La capazidad de sintetizar y visualizar el funcionamiento de algoritmos y estructuras contenidos en el temario.
    • La justificación razonable de las respuestas proporcionadas.

Bibliografía básica: 

Apuntes de la asignatura disponibles en el campus virtual.

Material complementario: 

Brass, P. (2008). Advanced Data Structures. Cambridge University Press.

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2022). Introduction to algorithms (4th Edition). MIT Press.

Sedgewick, R., Wayne, K. (2011). Algorithms (4th Edition). Addison-Wesley Professional.

Skiena, S. S. (2020). The algorithm design manual (3rd Edition). Springer.