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 the runtime of non-recursive and recursive algorithms using asymptotic notation
  2. Use or explain the use of data structures including balanced trees, hash tables, and graphs
  3. Use or explain the use of basic algorithms including sorting, graph algorithms, and AI search techniques such as minimax and A* search
  4. Use and explain the use of algorithm design techniques including greedy, divide and conquer, and dynamic programming to design algorithms
  5. Discuss ethical issues on algorithms

Course practices:

  1. Lectures
  2. Tests
  3. Written homework
  4. Programming projects