Fichas de asignaturas 2016-17
![]() |
ANÁLISIS DE ALGORITMOS Y ESTRUCTURAS DE DATOS |
![]() ![]() ![]() |
|
Asignatura |
![]() |
| |
Profesorado |
![]() |
| |
Competencias |
![]() |
| |
Resultados Aprendizaje |
![]() |
| |
Actividades Formativas |
![]() |
| |
Sistemas de Evaluación |
![]() |
| |
Contenidos |
![]() |
| |
Bibliografía |
![]() |
Código | Nombre | |||
Asignatura | 21714014 | ANÁLISIS DE ALGORITMOS Y ESTRUCTURAS DE DATOS | Créditos Teóricos | 3 |
Título | 21714 | GRADO EN INGENIERÍA INFORMÁTICA | Créditos Prácticos | 4.5 |
Curso | 2 | Tipo | Obligatoria | |
Créd. ECTS | 6 | |||
Departamento | C137 | INGENIERÍA INFORMÁTICA |
Requisitos previos
Para poder cursar con razonables posibilidades de éxito esta asignatura es requisito haber superado, en primer lugar las dos asignaturas de programación de primer curso (Introducción a la Programación y Metodología de la Programación), y en segundo lugar, en particular para el temario asociado a Análisis de Algoritmos, es requisito tener superadas las asignaturas de matemáticas (Cálculo, Estadística y Matemática Discreta). Cualquier matrícula efectuada que incumpla estos requisitos obviamente es responsabilidad exclusiva del estudiante.
Recomendaciones
Saber aplicar en la práctica la descomposición de problemas, el diseño modular y la abstracción operacional. Saber especificar de manera informal los algoritmos mediante precondiciones y postcondiciones. Ser capaz de definir algoritmos de una manera correcta mediante el uso de estructuras de control, bucles, sentencias condicionales, etc. según convenga a la finalidad, eficiencia y claridad del código. Conocer los mecanismos de transferencia de parámetros y utilizarlos correctamente. Conocer y usar correctamente los tipos de datos básicos que ofrecen los lenguajes de programación y especialmente, los tipos estructurados: cadenas de caracteres, vectores, matrices, registros y ficheros. Dominar el uso de punteros y la gestión dinámica de memoria. Ser capaz de implementar, en un lenguaje de programación de alto nivel, programas de pequeño y mediano tamaño haciendo uso de la descomposición modular del software. Saber elegir y diseñar adecuadamente casos de prueba para los programas y funciones implementados. Distinguir y saber resolver sumas aritméticas y geométricas. Reconocer otras sumas notables: la armónica y la expresión del número e mediante serie de potencias. Conocer las nociones básicas de combinatoria (combinaciones y permutaciones) y los rudimentos de la probabilidad discreta: variable aleatoria discreta, noción de probabilidad, hipótesis de equiprobabilidad. Saber resolver ecuaciones de recurrencia lineales sencillas. Sería recomendable que el alumno dispusiera de un ordenador personal donde instalarse el compilador de C++ utilizado en las prácticas, con objeto de obtener un mejor aprovechamiento de los contenidos impartidos en la asignatura. Los alumnos deben comprobar periódicamente el estado del curso en el campus virtual, donde se publicarán con la debida antelación diversos materiales docentes, convocatorias, calificaciones y, en definitiva, información vital para el seguimiento de la asignatura. En particular, los alumnos tienen la obligación de conocer las noticias publicadas a través del tablón de anuncios virtual del curso, cuyos mensajes sustituyen a los que tradicionalmente se colocaban en un tablón físico y que se consideran la fuente oficial de comunicación de la asignatura. Los alumnos son responsables de proteger sus ficheros y datos personales, incluyendo sus contraseñas de acceso al correo electrónico y al campus virtual.
Profesorado
Competencias
Se relacionan aquí las competencias de la materia/módulo o título al que pertenece la asignatura, entre las que el profesorado podrá indicar las relacionadas con la asignatura.
Identificador | Competencia | Tipo |
C06 | Conocimiento y aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y complejidad de los algoritmos propuestos | ESPECÍFICA |
C07 | Conocimiento, diseño y utilización de forma eficiente los tipos y estructuras de datos más adecuados a la resolución de un problema. | ESPECÍFICA |
C08 | Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados | ESPECÍFICA |
CB1 | Que los estudiantes hayan demostrado poseer y comprender conocimientos en un área de estudio que parte de la base de la educación secundaria general, y se suele encontrar a un nivel que, si bien se apoya en libros de texto avanzados, incluye también algunos aspectos que implican conocimientos procedentes de la vanguardia de su campo de estudio | GENERAL |
CB4 | Que los estudiantes puedan transmitir información, ideas, problemas y soluciones a un público tanto especializado como no especializado | GENERAL |
CB5 | Que los estudiantes hayan desarrollado aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomía | GENERAL |
CG08 | Conocimiento de las materias básicas y tecnologías, que capaciten para el aprendizaje y desarrollo de nuevos métodos y tecnologías, así como las que les doten de una gran versatilidad para adaptarse a nuevas situaciones. | GENERAL |
CG09 | Capacidad para resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad. Capacidad para saber comunicar y transmitir los conocimientos, habilidades y destrezas de la profesión de Ingeniero Técnico en Informática. | GENERAL |
Resultados Aprendizaje
Identificador | Resultado |
R1 | Analizar empíricamente la complejidad temporal de los algoritmos. |
R2 | Analizar formalmente la complejidad de algoritmos elementales. |
R3 | Comparar algoritmos según su complejidad asintótica y otros criterios relevantes. |
R4 | Contrastar los resultados empíricos con los teóricos. |
R5 | Desarrollar programas, basándose en tipos abstractos de datos, de forma independiente de la implementación de éstos. |
R6 | Distinguir la complejidad de los problemas, algoritmos y programas. |
R7 | Organizar un determinado volumen de datos de la forma más racional posible en función de los requisitos del problema a resolver. |
R8 | Programar algoritmos en el laboratorio siguiendo el paradigma de la programación genérica. |
R9 | Relacionar la eficiencia de los programas con la de sus algoritmos. |
R10 | Resolver problemas utilizando los TAD mas apropiados. |
R11 | Ser capaz de implementar de diferentes formas una especificación de software dada. El alumno debe saber escoger entre diferentes implementaciones alternativas de una abstracción de datos, y razonar sobre la solución escogida en función de los recursos necesarios (tiempo de ejecución, espacio requerido, etc.). |
Actividades formativas
Actividad | Detalle | Horas | Grupo | Competencias a desarrollar |
01. Teoría | Las clases teóricas se basarán fundamentalmente en las explicaciones del profesor sobre el temario, así como en la realización de ejercicios prácticos asociados al mismo. |
24 | C06 C07 CB1 CB4 CB5 CG09 | |
02. Prácticas, seminarios y problemas | Se incentivará la participación activa del alumnado en las clases, realizando en grupos tanto, desarrollos de especificaciones e implementaciones de TAD, como resolución de problemas de análisis de algoritmos, provocando el profesor un debate abierto sobre cada uno de los temas que se traten, motivando a los alumnos para que propongan soluciones alternativas a los problemas planteados y su posterior discusión. |
12 | C06 C07 CB1 CB4 CB5 CG09 | |
03. Prácticas de informática | En las clases prácticas se proporcionará al alumno guiones de prácticas en los que se incluirán cuestiones teóricas y una serie de problemas de programación, que se resolverán empleando un lenguaje de programación orientada a objetos. los alumnos asistirán a clase con dichos guiones, que los tendrán disponibles en el campus virtual con suficiente antelación, y con los problemas planteados, de forma que en clase se discutirá en grupo la resolución de dichos problemas y el profesor explicará aquéllos problemas que plantean mayor dificultad, finalmente, cada alumno resolverá los problemas del guión con la supervisión del profesor. |
24 | C06 C07 C08 CB1 CB4 CB5 CG08 CG09 | |
10. Actividades formativas no presenciales | Estas actividades se corresponden con las horas de trabajo personal del alumno, incluyendo las horas de estudio de los contenidos teóricos y prácticos de la asignatura, así como la realización de problemas y trabajos propuestos. |
86 | C06 C07 C08 CB1 CB4 CB5 CG08 CG09 | |
12. Actividades de evaluación | Examen final de la asignatura. |
4 |
Evaluación
Criterios Generales de Evaluación
- Adecuación de la solución a la especificación del problema. - Elección de los tipos abstractos de datos apropiados. - Uso correcto de los TAD según su especificación. - Elección adecuada de la implementación de cada TAD. - Presentación, claridad y eficiencia de la solución. - Consistencia en la argumentación y en el razonamiento lógico.
Procedimiento de Evaluación
Tarea/Actividades | Medios, Técnicas e Instrumentos | Evaluador/es | Competencias a evaluar |
Examen final | Rúbricas |
|
C06 C07 CG08 CG09 |
Pruebas de evaluación de resultados de actividades de aprendizaje. | Rúbricas |
|
C06 C07 C08 CB1 CB4 CB5 CG09 |
Procedimiento de calificación
Para la convocatorias de febrero el sistema de evaluación por defecto será evaluación continua. En el resto de convocatorias se aplicará el sistema de evaluación final. Evaluación continua: A lo largo del cuatrimestre el alumno realizará una o más pruebas prácticas para la evaluación de resultados de las actividades de aprendizaje (EAA) Al final del cuatrimestre los alumnos realizarán una prueba escrita que constará de una parte teórica y una práctica (EF). La nota correspondiente a la evaluación del alumno será obtenida de la siguiente forma: NEC = (EAA * 0.30) + (EF * 0.70) Solamente en casos de fuerza mayor que hayan impedido al alumno presentarse a dichas pruebas podrá solicitar a la profesora coordinadora de la asignatura el cambio a sistema de evaluación final. Evaluación final Aquellos alumnos que se sometan a evaluación final realizarán un examen escrito con contenidos teóricos y prácticos. La nota correspondiente a la evaluación del alumno será obtenida de la siguiente forma: NEF = (Teoría * 0.40) + (Práctica * 0.60) NEC (Nota Evaluación Continua) NEF (Nota Evaluación Final)
Descripcion de los Contenidos
Contenido | Competencias relacionadas | Resultados de aprendizaje relacionados |
1. Órdenes asintóticos. 1.1. Órdenes asintóticos. 1.2. Interpretación gráfica. 1.3. Jerarquía de complejidad. 1.4. Operaciones asintóticas. |
CB1 CG08 | R1 R2 |
2. Análisis de la complejidad de los algoritmos. 2.1. Tiempo y espacio algorítmicos. 2.2. Enfoques en el análisis de los algoritmos. 2.3. Peor caso, mejor caso y caso promedio. 2.4. Análisis de las estructuras de control. 2.5. Ejemplo: algoritmos elementales. |
C06 CB5 CG09 | R1 R2 R3 R4 R9 |
3. Algunos algoritmos clásicos y su análisis. 3.1. Búsqueda secuencial 3.2. Métodos directos de ordenación. |
C06 CB1 CB5 CG08 CG09 | R4 R6 R9 |
4. Tipos abstractos de datos. 4.1. Conceptos, terminología y ejemplos. 4.2. Tipos abstractos de datos. 4.3. Modularidad. 4.4. Uso de TAD. 4.5. Ejemplo: Especificación e implementación del TAD Número Racional. 4.6. Ejemplo: Uso del TAD Número Racional. |
C06 C07 CB4 CB5 CG08 CG09 | R5 R7 R8 |
5. Pilas. 5.1. Concepto de pila. 5.2. Especificación de operaciones. 5.3. Diferentes representaciones del TAD pila. |
C06 C07 C08 CB1 CB4 CB5 CG08 CG09 | R5 R6 R7 R8 R9 R10 R11 |
6. Colas. 6.1. Concepto de cola. 6.2. Especificación de operaciones. 6.3. Diferentes representaciones del TAD cola. |
C06 C07 C08 CB1 CB4 CB5 CG09 | R5 R6 R7 R8 R9 R10 R11 |
7. Listas. 7.1. Concepto de lista. 7.2. Especificación de operaciones. 7.3. Diferentes representaciones del TAD lista. 7.4. Otras estructuras enlazadas. 4.4.1. Listas con cabecera. 4.4.2. Listas doblemente enlazadas. 7.5. TAD lista circular. |
C06 C07 C08 CB5 CG08 CG09 | R5 R6 R7 R8 R9 R10 R11 |
Bibliografía
Bibliografía Básica
Alonso, J.A.; Argudo, J.F.; García, M.T.
Estructuras de Datos I.
Depto. Lenguajes y Sistemas Informáticos, UCA, 2003.
Aho, A.; Hopcroft, J.; Ullman, J.
Estructuras de datos y algoritmos. Addison-Wesley, 1988.
Brassard, Gilles y Bratley, Paul.
Fundamentos de algoritmia.
Prentice-Hall. 1997.
Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. y Stein, Clifford.
Introduction to algorithms. MIT Press. 3ª ed. 2009.
Fernández-Valdivia, J.; Garrido, A.; García, M.
Estructuras de datos. Un enfoque práctico usando C. 1998.
Garrido, A.; Fernández-Valdivia, J.
Abstracción y Estructura de Datos en C++. Delta Publicaciones. 2013.
Johnsonbaugh, Richard y Schaefer, Marcus.
Algorithms.
Prentice-Hall. 2004.
Levitin, Anany V.
Introduction to the design and analysis of algorithms.
Addison-Wesley. 2ª ed. 2007.
Neapolitan, Richard y Naimipour, Kumarss.
Foundations of algorithms.
Jones and Bartlett. 4ª ed. 2009.
Sedgevick, Robert.
Algorithms in C++. Parts 1-4. Fundamentals. Data
Structures. Sorting. Searching.
Addison-Wesley. 3ª ed. 1999.
Sedgevick, Robert.
Algorithms in C++. Part 5. Graph algorithms.
Addison-Wesley. 3ª ed. 2002.
Sedgewick, Robert y Wayne, Kevin.
Algorithms.
Addison-Wesley. 4ª ed. 2011.
Material complementario en http://www.cs.princeton.edu/algs4.
Bibliografía Específica
Ammernal, L.
Programs and Data Structures in C. Wiley, 1991.
Baase, Sara y Van Gelder, Allen.
Computer algorithms. Introduction to design and analysis.
Addison-Wesley. 3ª ed. 2000.
Balcázar, José Luis.
Programación metódica.
McGraw-Hill. 1993.Heileman, G. L.
Estructuras de Datos, Algoritmos y Programación Orientada a Objetos. McGraw-Hill, 1996.
Horowitz, Ellis; Sahni, Sartaj y Rajasekaran, Sanguthevar.
Computer algorithms / C++.
Universities Press. 2ª ed. 2008.Langsam, Y; Augenstein, M. J.; Tenenbaum, A. M.
Estructuras de Datos con C y C++. Prentice-Hall, 1997.
Martí Oliet, Narciso; Segura Díaz, Clara M. y Verdejo López, José A.
Especificación, derivación y análisis de algoritmos. Ejercicios resueltos.
Prentice-Hall. 2007.
Peña Marí, Ricardo.
Diseño de programas. Formalismo y abstracción.
Prentice-Hall. 3ª ed. 2005.
Stroustrup, Bjarne.
The C++ programming language. Special edition.
Addison-Wesley. 2000.
Stroustrup, Bjarne.
Programming: Principles and practice using C++.
Addison-Wesley. 2008.Weiss, M.
Data Structures and Algorithm Analysis in C. Addison-Wesley, 1996.
Wirth, N.
Algoritmos y Estructuras de datos. Prentice-Hall, 1986.
Bibliografía Ampliación
Kruse, R. L.; Leung, B. P.; Tondo, C. L.
Data Structures and Program Design in C. Prentice-Hall, 1991.
Liskov, B.; Guttag, J.
Abstraction and specification in program development. MIT Press, 1989.
Sedgevick, Robert y Flajolet, Philippe.
An introduction to the analysis of algorithms.
Standish, T.A.
Data Structures, Algorithms and Software Principles in C. Addison-Wesley, 1995 Addison-Wesley. 1996.
El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente. En aplicación de la Ley 3/2007, de 22 de marzo, para la igualdad efectiva de mujeres y hombres, así como la Ley 12/2007, de 26 de noviembre, para la promoción de la igualdad de género en Andalucía, toda alusión a personas o colectivos incluida en este documento estará haciendo referencia al género gramatical neutro, incluyendo por lo tanto la posibilidad de referirse tanto a mujeres como a hombres.