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:
divide-and-conquer, 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