Objectives
Next: Useful Information
Up: No Title
Previous: Class Schedule
The purpose of 211 is to give students a solid foundation in data structures
and algorithms, plus an appreciation for good program design, especially the
use of abstraction and modularity.
After completing the course, students should have gained a firm grounding in the following:

C and C++ programming: functions, pointers, structures, the
memory model, recursion, debugging techniques, I/O, etc.

Foundations of algorithms and data structures.
 Problem formulation.
Extracting a mathematical problem out of
an application task.
 Data structure selection.
Organizing the program data for
efficient problem solution.
 Algorithm design. Finding an efficient and systematic method
for solving the problem.
 Algorithm analysis.
 Methods of proving algorithm correctness.
 Asymptotic analysis of the space and time required by a program.

Principles of good programming practice.
 Modularity. Dividing a program into separate components, each having clean and well
defined interfaces.
 Abstraction. Separating the functionality of program component from its internal
construction.
 Code Design. Methods for writing code that can be easily
understood and extended.
 The functionality and implementation methods for
standard data abstractions including: queues and stacks, trees,
priority queues, dictionaries, and graphs.
 Several standard data structures such as: arrays,
lists, trees (search trees, balanced trees), hash tables, and graph
representations (adjacency lists and adjacency matrices).
 Standard computational problems such as sorting,
searching and various graph problems.
 Several algorithmic methods including:
divideandconquer, tree and graph traversal methods, greedy algorithms,
and dynamic programming (memoizing).
 The basics of finite automata.
Kan Deng
Sat Jan 21 13:17:12 EST 1995