### Computer Science 212

# Data Structures and Algorithms

**Instructor**: Harry Plantinga

**Overview**: in this course we will study the *heart*
of computer science: *computation*. What can be computed, and
how? How long does it take? How can it be done more efficiently?
The design and analysis of algorithms is fundamentally what a
computer scientist does *as* computer scientist. (But don't
let a software engineer hear you say that.)

In this course we will study a number of data structures and
algorithms that are commonly used. We will learn to analyze algorithms
for asymptotic runtime and other properties. We will spend a bit
of energy also on algorithm design techniques. The areas we will
concentrate on are advanced data structures, algorithms analysis,
trees and graphs, UI toolkits, and intelligent systems.
We may make forays into areas such as fractals,
pattern matching, and data compression.

**Course outcomes:** Students successfully completing this course will demonstrate
the ability to:

- Analyze non-recursive and recursive algorithm runtimes using asymptotic
notation
- Use or explain the use of data structures including stacks, queues, balanced trees,
priority queues, heaps, hash tables, graphs
- Implement or explain graph algorithms for traversal, shortest path, and minimum
spanning tree
- Use algorithm design techniques including greedy, divide and conquer, and
dynamic programming
- Use or explain basic AI search techniques including minimax search and heuristic
search
- Explain the use of regular expressions, finite automata, and associated
algorithms
- Write programs using some of the data structures and implementing some of
the algorithms studied
- Gain basic familiarity with C#.net and Visual Studio