Algoritmos y Estructuras de Datos



Curso impartido en la UNAM en la Facultad de Ciencias y en el Posgrado en Ciencia e Ingeniería de la Computación .

Profesor:  Sergio Rajsbaum

Presentacion del curso (convertida de Powerpoint a html, optimizada para Internet Explorer).

Semestres en que se ha impartido el curso:


Contenido de esta página


Citas:

"The study of algorithms offers much to the practicing programmer. A course on the subject equips students with functions for important tasks and techniques for attacking new problems. We'll see in later columns how advanced  algorithmic tools sometimes have substantial influence on software systems, both in reduced development time and in faster execution speed."
Jon Bentley, Programming Pearls, 2000 (2nd Ed, column 2)


"La mayoría de los programadores profesionales que me he encontrado, no están bien preparados para atacar problemas de diseño de algoritmos. Esto es una lástima, ya que las técnicas de diseño de algoritmos son una de las tecnologías prácticas medulares de ciencias de la computación."

"El diseño de algoritmos correctos, eficientes, e implementables para problemas del mundo real es un asunto delicado, debido a que el diseñador exitoso de algoritmos  requiere de acceso a dos cuerpos de conocimiento distintos:
Steven S. Skiena, The Algorithm Design Manual, 1997 (Prefacio)


"Two ideas lie gleaming on the jeweler's velvet. The first is the calculus, the second, the algorithm. The calculus and the rich body of mathematical analysis to which it gave rise made modern science possible; but it has been the algorithm that has made possible the modern world."

David Berlinski, The Advent of the Algorithm, 2000


"A person well-trained in computer science knows how to deal with algorithms: how to construct them, manipulate them, understand them, analyze them. This knowledge is preparation for much more than writing good computer programs; it is a general-purpose mental tool that will be a definite aid to the understanding of other subjects, whether they be chemistry, linguistics, or music, etc. ... An attempt to formalize things as algorithms leads to a much deeper understanding than if we simply try to comprehend things in the traditional way."

Donald Knuth, Selected Papers on Computer Science, Cambridge U. Press, 1996


"Algorithmics is more than a branch of computer science. It is the core of computer science, and in all fairness, can be said to be relevant to most of science, business, and technology."

"People have been known to ask: 'What really is computer science? Why don't we have submarine science, dishwasher science or telephone science?' ... It is hoped [] this book will implicitely convey something of the uniqueness and  universality of algorithmics."

"Terming the field 'computer science,' someone once said, is like referring to surgery as 'knife science.' ... It is generally agreed that the term 'computer science' is misleading, and that something like 'information science,'  'process science,' or 'the science of the discrete' might be better."

"We only claim that algorithmics forms the underpinnings of computer science, not that it  replaces it."

David Harel, Algorithmics the Spirit of Computing, 1992




"You think you know when you learn, are more sure when you can write, even more when you can teach, but certain when you can program."

Alan J. Perlis, SIGPAN Notices, 1982




Objetivo

Introducir al alumno al análisis y diseño de algoritmos. Concentrándose en algoritmos en gráficas, permite llegar a un mayor nivel de profundad, y proveer de conocimientos fundamentales para toda computación. Fortalecer su formación en teoría de computación y solución de problemas de computación. Se logran estos objetivos mediante un programa intenso de tareas con ejercicios y lecturas donde el alumno no solo repasa el material visto en clase, sino que es motivado a que encuentre soluciones por si mismo, a que desarrolle su creatividad, curiosidad y su capacidad de resolver problemas complicados, y a que entienda los temas mas a fondo.

"Lo que debemos aprender a hacer lo aprendemos haciéndolo".

Aristóteles, Ethica Nicomachea II (325 A.C.)



Temario y Bibliografía

Temas:

  1. Introducción: Algoritmos, problemas, codificación. Complejidad y notación asintótica. Gráficas, y su representación en la computadora. Invariantes, inducción.
  2. Paradigmas fundamentales: Divide-y-vencerás, Programación dinámica.
  3. Algoritmos de Exploración: Algoritmo de Euler y aplicaciones (e.g. secuencias deBruijn). BFS y aplicaciones (e.g. árboles, distancias). DFS y aplicaciones (e.g. conexidad).
  4. Árboles Generadores Mínimos: Fundamentos. Prim y Kruskal.
  5. Distancias: Fundamentos. Dijkstra. Ford. Floyd.
  6. Flujo en Redes: Ford-Fulkerson. Edmond-Karp. Variantes y aplicaciones.


Bilbiografía

Textos:


Libros Recomendados:





Ligas a sitios de interés y material de apoyo

Aquí se podrán visitar sitios de interés y relevancia para el curso.




Autor original: Miguel Angel Rodríguez

Última modificación: agosto 24, 2004