One of the central issues in computer science is the question of how
to represent things in a computer in such a way that our algorithms
can manipulate the representations as required by a given
application. By "as required" we mean that both the functional
requirements (i.e., what the software system must do) and also the
performance requirements (i.e., how efficiently the software does it)
must be taken into account. Our programs can't take all day and they
must execute well within the existing memory constraints.
This course is primarily concerned with the design and development of
efficient data structures and algorithms. A second major theme is to
further develop the student's software development skills. To that end
we will stress programming methodology (e.g., data abstraction,
modularity, good documentation) and we will make use of state of the
art software engineering tools. This is very much a hands-on course.
By the end of the course you should be able to design fairly complex
programs that do interesting and useful things.
|