(09687) Algoritmos y Estructuras de datos (Moodle)

Anuncio
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE TECNOLOGÍAS DE INFORMACIÓN Y
COMUNICACIONES
Código-Materia:
Requisitos:
Programa – Semestre:
Período académico:
Intensidad semanal:
Créditos:
09687 – ALGORITMOS Y ESTRUCTURAS DE DATOS.
09639 – Algoritmos y programación II
Ingeniería de Sistemas - Ingeniería Telemática – 4to semestre
2016-2
5 horas
3
Programa: Ingeniería de Sistemas
Resultados de Aprendizaje
relacionados con el
Programa
Fuente de Valoración
•A: Aplicación de las Ciencias y las Matemáticas (A)
•C: Diseño de Software (T)
•E: Solución de Problemas (T)
•K: Herramientas de Ingeniería (A)
NO
Resultados
de Aprendizaje
Programa: Ingeniería Telemática
Resultados de Aprendizaje
relacionados con el
Programa
Fuente de Valoración
• A: Aplicación de las Ciencias y las Matemáticas (A)
• C: Diseño de Software (T)
• E: Solución de Problemas (T)
• K: Herramientas de Ingeniería (A)
NO
Resultados
de Aprendizaje
Descripción
En este curso los estudiantes se verán enfrentados a la solución de problemas utilizando estructuras de datos,
análisis de algoritmos y algoritmos clásicos de la computación. El curso está orientado a generar en el estudiante
la habilidad de diseñar e implementar estructuras de datos en memoria principal y que son necesarias para
resolver un problema, teniendo en cuenta un conjunto de restricciones y criterios de calidad. Estas estructuras
deben integrarse a proyectos que deben desarrollarse siguiendo un proceso sistemático y disciplinado, teniendo
en cuenta el análisis, planeación, diseño de la aplicación, utilización de pruebas automáticas y generación de
documentación.
Objetivos
General
Solucionar problemas desarrollando aplicaciones que hagan uso de estructuras de datos y algoritmos que
permiten resolver problemas clásicos de la computación; partiendo del diseño e implementación de dichas
estructuras, aplicando nociones de análisis de algoritmos y siguiendo un proceso sistemático y disciplinado de
construcción de la solución.
Terminales
Al final del curso, se espera que el estudiante esté en capacidad de:
OT1. Analizar, diseñar e implementar soluciones a problemas de computación empleando estructuras de datos y
algoritmos clásicos, apoyados en el análisis de complejidad temporal y siguiendo un proceso sistemático y
disciplinado de construcción de software.
OT2. Diferenciar los tipos de estructuras de datos y seleccionar el más adecuado en el modelamiento de los
elementos del mundo del problema.
Algoritmos y Estructura de Datos
Página 1 de 5
OT3. Abstraer, diseñar e implementar estructuras de datos lineales, de acceso directo, árboles y grafos
construyendo una librería de estructuras.
OT4. Diseñar y construir las pruebas unitarias de cada una de las estructuras de datos implementadas.
Objetivos Específicos:
Unidad 1: Análisis de Complejidad Temporal
Al finalizar esta unidad, el estudiante estará en capacidad de:
OE1.1. Calcular la complejidad temporal de algoritmos iterativos.
OE1.2. Llevar a cabo el análisis de algoritmos independientemente de una implementación concreta (no
dependiente del lenguaje de programación).
OE1.3. Utilizar notación asintótica para describir el comportamiento temporal de algoritmos con el objetivo de
eliminar detalles innecesarios y clasificarlos de acuerdo con funciones bien conocidas (por ejemplo:
2
3
n
logarítmicas -log2(n)-, lineales –n-, nlog2(n), cuadráticas -n -, cúbicas -n -, exponenciales -2 -, etc)
OE1.4. Caracterizar la entrada de un algoritmo iterativo con el fin de calcular la complejidad para el mejor y peor
caso.
OE1.5. Comparar dos algoritmos que resuelven el mismo problema y explica sus diferencias teniendo en cuenta su
complejidad temporal.
OE1.6. Identificar los casos especiales en los que se puede aplicar algoritmos de ordenamiento lineales e
implementar algunos algoritmos de ordenamiento con complejidad lineal.
Unidad 2: Diseño básico de estructuras de datos lineales y de acceso directo
Al final de este nivel el alumno será capaz de:
OE2.1. Proponer y justificar un diseño para implementar una estructura de datos, siguiendo una metodología y
considerando la flexibilidad en los tipos de datos y la complejidad temporal de las operaciones.
OE2.2. Implementar estructuras de datos extensibles y generales utilizando clases adaptadoras, interfaces, clases
abstractas y tipos de datos genéricos.
OE2.3. Escribir el invariante de una clase e implementar los métodos necesarios para su verificación utilizando los
elementos apropiados del lenguaje.
OE2.4. Diseñar, adaptar y utilizar estructuras de datos de acceso directo por llave, las cuales están basadas en la
capacidad de las funciones de hashing para localizar una posición física a partir de una llave lógica.
OE2.5. Utilizar estructuras lineales y de búsqueda (listas, colas, pilas, conjuntos, listas ordenadas y tablas hash)
como parte de la solución de un problema.
OE2.6. Utilizar estructuras de datos propias del lenguaje y compararlas con las estructuras implementadas en el
curso definiendo y aplicando los criterios adecuados.
OE2.7. Diseñar y construir las pruebas unitarias de cada una de las estructuras de datos lineales implementadas.
Unidad 3: Algoritmos y Estructuras Recursivas
Al final de este nivel el estudiante será capaz de:
OE3.1. Calcular la complejidad de algoritmos recursivos simples utilizando la notación O, planteando y resolviendo
ecuaciones de recurrencia por medio del método iterativo y teorema maestro.
OE3.2. Aplicar la técnica de dividir y conquistar en problemas sencillos e identificar las características de esta
técnica en algoritmos clásicos de ordenamiento y búsqueda.
OE3.3. Utilizar estructuras recursivas de datos para representar la información del modelo del mundo, cuando sea
conveniente por razones de eficiencia o por el tipo de problema sobre el cual se trabaja.
OE3.4. Diferenciar el concepto de orden del concepto de balanceo de un árbol, y clasificar los árboles binarios
entre árboles ABB, R&B y Heaps binarios de acuerdo a sus características de orden y balanceo.
OE3.5. Implementar las estructuras de datos para representar árboles binarios y árboles n-arios
OE3.6. Utilizar árboles n-arios, como una estructura que permite representar información de un mundo en el cual
existe una relación jerárquica entre sus elementos.
Algoritmos y Estructura de Datos
Página 2 de 5
OE3.7. Diseñar y construir las pruebas unitarias de cada una de las estructuras de datos recursivas
implementadas.
Unidad 4: Grafos
Al final de este nivel el estudiante será capaz de:
OE4.1. Explicar los conceptos relacionados con la teoría de grafos.
OE4.2. Modelar la información de un problema utilizando como estructura de información un grafo.
OE4.3. Aplicar los recorridos en profundidad y por niveles de los grafos en el contexto de un problema dado.
OE4.4. Aplicar los algoritmos que resuelven los problemas de búsqueda de caminos más cortos desde una fuente
(SSSP), búsqueda de caminos más cortos desde múltiples fuentes (MSSP), y de árbol de recubrimiento
mínimo (MST) en el contexto de un problema dado.
OE4.5. Implementar un grafo dirigido o no dirigido representado por: matriz de adyacencias y listas de adyacencias
incluyendo en la implementación los servicios necesarios para implementar los algoritmos: de recorridos
en el grafo, caminos más cortos y recubrimiento mínimo.
OE4.6. Reconocer las técnicas de diseño de algoritmos: programación dinámica y algoritmos voraces utilizadas en
los algoritmos de recorridos en el grafo, caminos más cortos y recubrimiento mínimo.
OE4.7. Diseñar y construir las pruebas unitarias de cada uno de los grafos implementados.
Transversales
Durante el desarrollo de todo el curso, el estudiante desarrollará la capacidad de:
OET1.1 Utilizar convenciones de codificación como un elemento de calidad en la implementación de programas.
OET1.2 Reconocer la importancia de la medición de su proceso personal de desarrollo de software.
OET1.3 Medir sistemáticamente los tiempos utilizados en cada una de las etapas de desarrollo de software.
OET1.4 Medir sistemáticamente el tamaño de los entregables producidos.
OET1.5 Mantener un registro ordenado del proceso de medición llevado a cabo en cada uno de los proyectos de
desarrollo de software.
OET1.6. Valorar y corregir las inconsistencias que se pueden presentar entre cada uno de los elementos de
diseño propuestos en el diagrama de clases y su implementación en el lenguaje de programación.
Metodología
Para los estudiantes:
La herramienta de E-learning (moodle) es el medio que contiene la información oficial del curso y es
responsabilidad del estudiante consultar en ella
todo lo referente al curso, especialmente las
actualizaciones del material y actividades.
De acuerdo a la metodología de aprendizaje activo de la universidad Icesi, los estudiantes deben preparar, antes
de la clase, los temas asignados en la programación del curso. Esto es:
● Leer y estudiar el material asignado para la sección de clase. Si no se ha asignado material, entonces
investigar sobre los temas acordados en la planeación.
● Utilizar estrategias de estudio (mapas conceptuales, mapas mentales, resúmenes, etc.) que sean efectivas
y que sirvan como refuerzo después del proceso de lectura.
● Contestar las preguntas que contiene el material, así como las preguntas adicionales que el profesor
entregue.
● Resolver los ejercicios propuestos en el material, así como los ejercicios adicionales que se le entreguen.
● Formular preguntas que requieran ser resueltas durante la clase.
Durante la clase, el estudiante deberá:
● Plantear las dudas que le quedaron durante el proceso de estudio del tema a tratar.
● Participar en las actividades de revisión y consolidación de conceptos que proponga el profesor.
● Trabajar en la solución de los problemas de aplicación que se propongan.
Después de la clase:
● Establecer las relaciones entre los temas tratados en la clase y el conocimiento previamente adquirido.
● Resolver los ejercicios de aplicación del tema, que tienen un nivel de complejidad mayor al de los
ejercicios que resolvió previamente.
Algoritmos y Estructura de Datos
Página 3 de 5
Para la estructura del curso:
Este curso tiene dos componentes:
● Componente Teórica: Consiste en la discusión de los diferentes temas y la realización de exposiciones,
investigaciones, talleres, cuadros conceptuales, diversas actividades que ejerciten:
o Comprensión de lectura.
o Habilidades de redacción y ortografía.
o Aplicar en diferentes contextos los conceptos vistos.
● Esta componente se desarrolla en tres (3) horas por semana en el salón de clase.
● Componente Práctica: Consiste en la resolución de ejercicios y su implementación en el lenguaje Java, en
la sala de cómputo. Para esta componente se han destinado dos (2) horas por semana.
Este curso utilizará Java como lenguaje de programación y Eclipse como entorno de desarrollo. No obstante los
objetivos de aprendizaje son independientes del lenguaje y el entorno de programación seleccionado.
Evaluación
En todas las evaluaciones de carácter escrito se tendrá en cuenta la GRAMÁTICA, ORTOGRAFÍA y
PUNTUACIÓN con el objetivo de desarrollar y consolidar la competencia de escritura del estudiante. Las
evaluaciones del curso se han dividido en dos tipos: nota individual y nota grupal. A continuación se explican las
actividades que hacen parte de cada uno de los tipos, más adelante encuentra la forma en que será calculada la
nota definitiva.
Nota individual:
El curso cuenta con 3 momentos de evaluación individual en el salón de clase o sala:
● Controles de aprendizaje activo y Quices: corresponde a todas las comprobaciones de lectura, de
aprendizaje que se hagan durante el curso, así como también pequeñas evaluaciones de temas ya
revisados en clase. Estas comprobaciones puede ser o no calificables y sin previo aviso por parte del
profesor.
● Examen escrito: 3 exámenes escritos durante el semestre.
● Examen práctico: durante el semestre se llevarán a cabo 3 exámenes prácticos durante las horas del
laboratorio. No hay supletorios de los exámenes prácticos.
Supletorios: Los supletorios se realizarán de acuerdo al libro de normas y deberes de la Universidad Icesi.
Por tanto las solicitudes, recibos y demás trámites deben realizarse con el profesor del curso en las fechas
estipuladas en el reglamento. Se recomienda consultar en el cronograma del curso las fechas de las
evaluaciones escritas y prácticas.
Nota Grupal:
● Proyecto: en la semana 4 se publicará un ejercicio que requiere la aplicación de los temas vistos durante
el semestre. Este trabajo debe ser realizado en grupos de tres integrantes, y deben incluir las plantillas de
la metodología PSP.
● Laboratorios, tareas y talleres: Durante el semestre el profesor realizará actividades y asignaciones
(tareas) de las cuales algunas serán evaluables según el criterio del profesor.
Se recomienda referirse al documento Reglas de juego cursos Algoritmos para mayor detalle sobre la
reglamentación vigente en el curso.
Nota definitiva:
Para calcular la nota definitiva debe considerarse que la nota grupal sólo aplicará para aquellos estudiantes que al
final del semestre tengan su nota individual en un valor mayor o igual a 3.0. Teniendo en cuenta lo anterior la
nota definitiva será calculada de la siguiente manera:
Si (nota individual < 3.0) entonces:
Nota definitiva = nota individual
Si (nota individual >= 3.0) entonces:
Nota definitiva = (nota individual * 0.7) + (nota grupal * 0.3)
A continuación se especifican los porcentajes de las evaluaciones:
Nota Individual
Nota grupal
Evaluación
Porcentaj
Evaluación
e
Algoritmos y Estructura de Datos
Porcentaj
e
Página 4 de 5
Examen Escrito 1
15%
Proyecto
50%
Examen Escrito 2
20%
Tareas y talleres
50%
Examen Escrito 3
20%
Total nota grupal
100%
Examen Práctico 1
10%
Examen Práctico 2
10%
Examen Práctico 3
10%
Controles de aprendizaje activo y
15%
Quices
Total nota individual
100%
TUTORÍAS GRUPALES
El Departamento de TIC ofrece 6 sesiones de tutoría grupales a la semana, de 2 horas cada una, para el bloque
de algoritmos y programación desde la semana 3 del semestre. En estos espacios los estudiantes cuentan con un
profesor del área con el cual pueden resolver interrogantes que hayan quedado sobre temáticas del curso o ser
asesorados en dudas puntuales que tengan respecto a la solución de problemas. El horario y los espacios de
estas tutorías serán informados oportunamente entre la primera y la segunda semana del semestre académico.
Bibliografía
●
●
●
●
●
●
●
●
Thomas Cormen. Charles Leiserson. Ronald Rivest. Clifford Stein. Introduction to Algorithms. Third Edition.
The MIT Press. 2009.
Sally A. Goldman and Kenneth J. Goldman. A Practical Guide to Data Structures and Algorithms Using Java.
Boca Raton : Chapman & Hall/CRC, 2009. http://goldman.cse.wustl.edu/.
Mark A. Weiss. Data Structures and Problem Solving Using Java, 4/E . Addison-Wesley. 2010.
Steven Skienna. The Algorithm Design Manual Springer. 1997
V. Anton Spraul. Think like a Programmer. No starch press. 2012.
Jorge Villalobos. Diseño y manejo de Estructuras de Datos en C. McGraw-Hill/ Interamericana Editores. 2006.
Texto de referencia (Algoritmos 1): Jorge Villalobos y Ruby Casallas. Fundamentos de Programación:
Aprendizaje Activo basado en Casos. Editorial Prentice-Hall, 2006.
Texto de referencia (Algoritmos 2): Jorge Villalobos. Introducción a las estructuras de datos: Aprendizaje
activo basado en casos. Editorial Prentice-Hall, 2008.
Algoritmos y Estructura de Datos
Página 5 de 5
Descargar