|
||||||||||||||||
The principal subjects of computer science are information
and computation. What are these things? How can we
represent information in such a way that it can be used to solve
problems? How can we express a computation, an algorithm,
that solves a problem in a good way? What is "a good way" anyway?
One of the central issues 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 perform 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'll stress good programming methodology (e.g., data abstraction, modularity, documentation and testing). This is very much a hands-on course. You'll find yourself asking a lot of questions starting with "How can I ... ?" By the end of the course, you should be able to design fairly complex programs that do interesting and useful things. The motto of our textbook site, Algorithms, sums it up it poetically, this course explores: essential information that every serious programmer needs to know about algorithms and data structures |