Toma este curso sólo si estás interesado en aprender a programar
bien. ¡Si no te gusta programar ¡abandona inmediatamente esta
página!
Este es el tercer curso de programación en la carrera de Ingeniería
de Sistemas. Se enfatiza en estructuras de datos que permitan
organizar en memoria principal conjuntos, de manera tal de poder
manejarlos efectiva y eficientemente según el problema que se
trate. Del mismo modo, en este curso se enseñan las técnicas básicas
de diseño y análisis de algoritmos.
Este es un curso esencial si vas por la opción de
computación. Asegúrate de disponer de tiempo suficiente para cursarlo
cabalmente.
Para el curso se emplea la biblioteca Aleph. La versión fuente más reciente puede descargarse
de aquí..
Evaluación
Las evaluaciones, con sus porcentajes sobre la nota definitiva entre
paréntesis, son las siguientes:
Hay varias novedades para este semestre. En primer lugar el uso del
compilador clang
de LVM. En segundo
lugar, se programará en
C++11, el nuevo estándard de C++. Especialmente se
usarán sus componentes de programación funcional y la semántica
move. No se angustie si no está al tanto de esta nuevas, pero muy
poderosas, características; ellas serán explicadas en clase y
reforzadas en las prácticas.
Si gustas puedes intentar usar
gcc. Pero asegúrate
de usar la versión 4.9.
Eres libre de usar otros compiladores
y sistemas operativos, pero en todo caso, tus proyectos deben
ejecutarse en una máquina virtual que prontamente distribuiremos, con
todo el software necesario instalado.
También. puedes construir tu propio ambiente de
programación; en ese caso, asgúrate de instalar el siguiente software:
- Compilador clang
- El debugger DDD
- Valgring
- Las bibliotecas matemáticas gsl, gmp, mpfr
- Imakefile (generalmente asociado a X11. En ubuntu es xutils-dev y
libx11-dev
No olvides que tus trabajos serán evaluados en la máquina
virtual. Así que siempre tómate un tiempo para probar sus ejecuciones
en ella.
Observaciones de interés
- El curso tiene una página de discusión a través del facebook. Se
te invita encarecidamente a participar en ella. La idea es abrir un
debate enriquecedor, especialmente en torno a los laboratorios.
- Puedes discutir ideas y conocimiento sobre los laboratorios, pero
bajo ninguna circunstancia puedes compartir código; ni siquiera una
fracción.
- En general, todos los estudiantes que presentan todas las
evaluaciones aprueban el curso y aprenden. Análogamente, las pocas
reprobaciones son de estudiantes que dejaron de presentar un parcial
y/o algunos laboratorios. En consecuencia, se invita encarecidamente
a no desperdiciar ninguna oportunidad de evaluación.
- Los exámenes parciales son a libro abierto. Puedes traer
cualquier material escrito de tu preferencia. Por lo general, son
cortos, con preguntas cortas, muy a menudo de selección y
ocasionalmente problemas, cortos también.
- Los resultados de tus evaluaciones (parciales y laboratorio) son
publicados muy prontamente en WEB, de modo que desde el inicio puedes darte
una idea precisa de tu progreso en la materia.
- El curso comienza desde el primer día y por lo general se dictan
las dos horas enteramente. Esto conlleva la ventaja de que se
culmina tempranamente.
Programa
- Análisis de algoritmos
- Notación O:
- Métodos de ordenamiento: selección, inserción, rápido
(quicksort), mezcla (mergesort)
- Algoritmos dividir conquistar
- Abstracción y programación: tipos abstractos de datos, clases,
herencia, polimorfismo, programación genérica
- Secuencias: arreglos, listas enlazadas, pilas, colas y
recursión
- Árboles
- Definiciones generales: árbol, representaciones en memoria,
árbol binario, recorridos, correspondencia entre árboles y árboles
binarios.
- Algoritmos básicos
- Conceptos matemáticos
- Árboles binarios de búsqueda
- Árboles binarios con rango
- Heaps
- Treaps
- Tablas Hash
- Conceptos generales
- Estrategias de manejo de colisiones
- Diseño de funciones hash
- Tablas hash lineales
Bibliografía recomendada
- Tejiendo Algoritmos -
Leandro Rabindranath Leon. Consejo de Publicaciones de la ULA
- Estructura de datos y algoritmos - Alfred V. Aho, John
E. Hopcroft, Jefrey D. Ullman - Addison-Wesley.
Iberoamericana: Sistemas Técnicos de Edición, 1988. ISBN
968-6048-19-7
- Programming Pearls - Jon Bentley. Addison-Wesley
Professional. ISBN-10: 0201657880
Todas las estructuras de datos y algoritmos enseñados en este curso
están disponibles en la biblioteca
Aleph.
Otros
- Horarios: martes y jueves de 10 a 11:59 AM . Aula 2o14
- Laboratorio: viernes de 2 - 4 PM