Computer Science 212

Data Structures and Algorithms

Course Information - Syllabus


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:

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