CS320 Algorithms - Theory and Practice, Spring '17, Frederick

Policies
·
Schedule
·
Syllabus

**Instructor:**
**Cole Frederick**

**Office:**TBA, Computer Science Building

**Email:**u0xee at rams.colostate.edu

**Teaching Assistant:**
**Karinia Rard** Office hours: TBA

**Zhisheng Xu** Office hours: TBA

**Ali Ebrahimpour Boroojeny** Office hours: TBA

**Textbook:**
Introduction to Algorithms ,
Cormen, T.A., Leiserson, C., Rivest, R., Stein, C., third edition
MIT Press

**Prerequisites:**
Prerequisite: CS 200 with a C or better; MATH 161 with a C or better; MATH 229 with a C or better or MATH 369 with a C or better.

**Lectures**
11-12:15 TH Aylesworth Hall, C 111

### Course Goals

The course is about learning and practicing principles for organizing your
thinking when solving programming problems, and not about memorizing details
and facts. You must practice ways of establishing that an algorithm
is correct and anlyzing its time bound. Getting good at these skills will
allow you to come up with efficient algorithms of your own, by figuring
out what steps are needed in the pseudocode or program code to get the
proof of correctness to go through, or to reduce the running time.
You will also learn to recognize what kinds of optimizations on a program
are a waste of time, as they will have little or no impact on the running
time of the program as a whole.

We will study big-O analysis at a more advanced level than in CS200;
algorithms of unlabeled graphs, including mathematical properties
of depth-first search, how to recognize bipartite graphs,
topological sort, finding strongly-connected components; various
examples of greedy algorithms and greedy proofs; examples of
the divide-and-conquer strategy and techniques for bounding
running times of divide-and-conquer algorithms; dynamic programming;
NP-completeness.