Download 1. Objetivos Generales de la asignatura 2. Objetivos

Document related concepts
no text concepts found
Transcript
FACULTAD REGIONAL RESISTENCIA - DEPARTAMENTO DE INGENIERÍA EN SISTEMAS DE INFORMACIÓN
Carrera: Ingeniería en Sistemas de Información Plan: 2008
Área: ELECTIVAS
Asignatura: PROGRAMACIÓN COMPETITIVA
Régimen de Cursado: Cuatrimestral Horas/Semana: 8 Horas/Semana Anuales: 4
Nivel de Implementación: Tercero Horas/Año: 128
Correlativas:
Para cursar:
Tener Regularizadas: Paradigmas de Programación
Tener Aprobadas: Algoritmos y Estructuras de Datos
Para rendir:
Tener Aprobadas: Paradigmas de Programación
1. Objetivos Generales de la asignatura

Esta asignatura tiene por objetivo lograr en los alumnos un entendimiento concreto de las
estructuras de datos y las técnicas algorítmicas comúnmente utilizadas para solucionar
problemas de las áreas de conocimiento abordadas en las competencias de programación.
2. Objetivos específicos:









Revisar conceptos de abstracción de datos y P.O.O. e introducir su implementación en
JAVA.
Presentar las estructuras de datos avanzadas (listas, pilas, colas, colas con dos extremos,
mapas, conjuntos), y utilizarlas desde una librería concreta: Collections de JAVA.
Presentar las nociones básicas de complejidad de algoritmos y evaluar la misma en forma
práctica.
Reutilizar –intensivamente- software desarrollado por otros programadores en la solución a
problemas conocidos.
Conocer y utilizar recursos específicamente desarrollados para aumentar la productividad
de los programadores “competitivos”.
Introducir técnicas de programación específicas como backtracking y programación
dinámica.
Presentar las estructuras de datos y algoritmos básicos utilizados para el manejo de
grafos.
Introducir algoritmos avanzados sobre grafos: árboles de cobertura mínimos, caminos mas
cortos, flujo en redes.
Revisar conceptos de matemáticas (combinatoria, teoría de números, probabilidad, etc.)
FACULTAD REGIONAL RESISTENCIA - DEPARTAMENTO DE INGENIERÍA EN SISTEMAS DE INFORMACIÓN
3. Programa Analítico:
CONTENIDOS
UNIDAD 1: Introducción a la Programación Competitiva (6 hs. Cátedra)
Conocer las relaciones intrínsecas entre el cómputo matemático y los lenguajes de programación.
Consolidar el conocimiento puntual sobre JAVA y su uso en los distintos jueces en línea.
 Competencias y programación JAVA.
 Competencias de programación. Los sistemas de Jueces en Línea en la web. Mensajes y
significados.
 Entorno de programación JAVA. Tipos de datos. Clases. E/S por teclado y por archivo. Toma
de tiempos.
UNIDAD 2: La librería Collections. (12 hs. Cátedra)
Entender la importancia de las librerías de los lenguajes de programación por sobre la base de un
lenguaje dado. Comprender los distintos tipos de datos aportados por la librería Collections a
JAVA.
 Contenedores secuenciales y asociativos. Iteradores. Algoritmos. Presentación TP1.
UNIDAD 3: Introducción al Análisis de algoritmos y nociones de complejidad. (12 hs.
Cátedra)
Identificar la complejidad de un algoritmo dada su complejidad. Entender el concepto de
complejidad y las tecnicas para reducir la misma.
 Conceptos de análisis de algoritmos. La notación O. Corrección y eficiencia. Complejidad
mejor, peor y promedio. Comprobación del análisis de un algoritmo. Presentación TP2.
UNIDAD 4: Técnica de programación: Backtracking (12 hs. cátedra)
Conocer la relevancia de la recursividad en los procesos de programacion competitiva.
 Definición, casos de uso. Búsqueda con poda.
UNIDAD 5: Grafos:
Aprender sobre los diferentes usos de un grafo en problemas competitivos. Diferenciarlos de las
listas y demas estructuras de datos complejas.
 Estructuras de datos y algoritmos para su implementación. (9 hs. cátedra)
 Tipos de grafos. Estructuras para su implementación. Recorridos de grafos: en anchura, en
profundidad.
UNIDAD 6: Grafos: Algoritmos avanzados. (15 hs. cátedra)
Conocer los principales escenarios donde aplicar grafos y los algoritmos mas comunes para los
mismos. Entender las diferencias entre cada escenario en particular.
 Conectividad, ciclos eulerianos y hamiltonianos, árboles de cobertura mínimos (Prim y
Kruskal), caminos más cortos (Dijkstra y Floyd).
UNIDAD 7: Técnica de programación: Programación Dinámica. (12 hs. Cátedra)
Interpretar situaciones problematicas donde aplicar DP. Verificar escenarios y optimizarlos.
FACULTAD REGIONAL RESISTENCIA - DEPARTAMENTO DE INGENIERÍA EN SISTEMAS DE INFORMACIÓN
 Subestructuras óptimas, subproblemas superpuestos, principio de optimalidad.
- Evaluaciones Parciales (12 hs. cátedra)
 2 evaluaciones teórico-prácticas y 1 en forma de simulación de
competencia.
- Coloquios TP Final (6 hs. cátedra)
 Coloquios grupales de defensa del TP Final.
3. Bibliografía
Básica:
o Halim, Steven – Halim, Félix. “Competitive Programming 3”. 2013 www.lulu.com
o Mark Weiss. “Data Structures and Problem solving with C++”. Addisson Wesley. ISBN
0321205006. 2nd. Edition. 2003
o Información disponible en www.spoj.com. Fecha último acceso: 01/10/2015
o Información disponible en www.urionlinejudge.com.br. Fecha último acceso: 01/10/2015
Complementaria:
o Comern, Lesiserson-Rivest, Strein. “Introduction to Algorithm”. MIT Press.
ISBN 0262039237. Edición 2001.
o Información disponible en uva.onlinejudge.org. Fecha último acceso: 01/10/2015
4. Fundamentación de la asignatura
Durante los últimos años han tomado creciente importancia las competencias de programación.
Suelen tener modalidades y niveles muy diferentes pero todas apuntan a desarrollar y fortalecer
actitudes y procedimientos deseables en los estudiantes de ISI. A modo de ejemplo:
- Análisis, comprensión y búsqueda de soluciones a problemas.
- Selección y diseño de estructuras de datos y algoritmos adecuados con restricciones de contexto.
- Predisposición para trabajar en equipo.
- Habilidad para clasificar problemas según áreas de conocimiento y poder resolverlos en un
tiempo mínimo.
- Facilidad para el reuso de librerías de software ya implementadas.
- Conocimiento y uso adecuado de las herramientas de debugging que brindan los compiladores, y
generación de casos de prueba representativos para el testeo del programa desarrollado.
Los resultados de competencias como la ACM/ICPC, son tomados como una medida de la calidad
en el desarrollo de software de los participantes una vez egresados.
Asignaturas o conocimientos con que se vincula la materia:
La coordinación para esta asignatura electiva es vertical con las asignaturas del área
Programación: “Algoritmos y Estructuras de Datos”, “Sintaxis y Semántica de Lenguajes“ y
“Paradigmas de Programación” que aportan conceptos, métodos y habilidades.
A nivel transversal se vincula con materias de otras áreas (“Análisis Matemático I”, “Álgebra y
Geometría Analítica”, “Análisis Matemático II”, “Cálculo Numérico” ), ya que se abordan para su
solución problemas estudiados en dichas asignaturas.
FACULTAD REGIONAL RESISTENCIA - DEPARTAMENTO DE INGENIERÍA EN SISTEMAS DE INFORMACIÓN
5. Metodología
Estrategias de enseñanza:
Se desarrolla 1 clase semanal (intercaladas: una de teoría, una de práctica) de acuerdo a los
temas del programa y al avance de los trabajos propuestos.
Durante las clases:
- Se realizan presentaciones explicativas de los distintos puntos del temario.
- Se trabaja en la solución a problemas reales de competencias de programación que afiancen los
conceptos y estrategias explicadas.
- Se hace uso de los sitios web de jueces en línea.
- Se orienta para la realización de los trabajos prácticos.
- Se realizan talleres en laboratorio.
- Se realizan instancias de evaluación: parciales y coloquios.
- Se realizan seminarios que aportan a la formación integral en el uso de la librería Collections.
- La modalidad de trabajo es de amplia interacción entre docentes y alumnos, con planteo de
inquietudes que llevan al tratamiento de temas de interés. Se pondrá énfasis en el afianzamiento
de procedimientos y actitudes fundamentales para la programación competitiva.
Modalidad de agrupamientos:
En las clases y actividades de seguimiento se trabajará en pequeños grupos, conformados de
acuerdo a los fines de cada actividad.
Los trabajos prácticos son realizados por grupos de tres alumnos, en forma colaborativa,
combinando actividades de comprensión de problemas, clasificación, búsqueda y análisis de
soluciones, codificación de algoritmos, debugging y testeo de los programas.
Consultas:
El profesor y el auxiliar tienen un espacio de consulta semanal de una hora prefijada, en el Grupo
de Programación Competitiva; además de la atención de consultas vía e-mail y foro de la cátedra
en el Campus Virtual.
Organización de espacios dentro y fuera del ámbito universitario (aulas, talleres, laboratorios,
visitas, empresas, otros):
Se realizan actividades en el Grupo de Programación donde se resuelven problemas de
competencias anteriores de ACM, en lenguaje JAVA, C y C++, haciendo uso de la librería
Collections y STL respectivamente.
Organización de espacios dentro y fuera del ámbito universitario:
El profesor realiza también una actividad de investigación/extensión, a través de la coordinación
anual de un Grupo de Programación, como actividad extracurricular, conformado por alumnos
interesados en profundizar sobre cuestiones de Algoritmos – Estructuras de Datos – Programas –
Lenguajes de Programación, participar en análisis y discusiones grupales de soluciones
alternativas y publicar resultados como medio de compartir con la comunidad interesada en estas
temáticas.