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:

  • Tres exámenes parciales (40% de la nota total): se elimina la peor calificación
  • Siete (7) laboratorios de programación (45 % de la nota total): aproximadamente cada 15 días se asigna un laboratorio para ser entregado aproximadamente en una semana.

    El laboratorio se hace individual o en parea

    .
  • Participación en curso (15% de la nota total): esta es una nota que se pone por tu participación en el curso.

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

    1. Análisis de algoritmos
      1. Notación O:
      2. Métodos de ordenamiento: selección, inserción, rápido (quicksort), mezcla (mergesort)
      3. Algoritmos dividir conquistar
    2. Abstracción y programación: tipos abstractos de datos, clases, herencia, polimorfismo, programación genérica
    3. Secuencias: arreglos, listas enlazadas, pilas, colas y recursión
    4. Árboles
      1. Definiciones generales: árbol, representaciones en memoria, árbol binario, recorridos, correspondencia entre árboles y árboles binarios.
      2. Algoritmos básicos
      3. Conceptos matemáticos
      4. Árboles binarios de búsqueda
      5. Árboles binarios con rango
      6. Heaps
      7. Treaps
    5. Tablas Hash
      1. Conceptos generales
      2. Estrategias de manejo de colisiones
      3. Diseño de funciones hash
      4. 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
 
 

PR-3 U 2014