### CSCI 3104: Algorithms

#### Course Objectives

In this course, students will

- become familiar with ``standard'' algorithms for abstract problem solving;
- learn how to mathematically prove properties of algorithms, including their correctness;
- analyze the time and space complexity of algorithms;
- understand the relative merits or demerits of different algorithms in practice;
- adapt and combine algorithms to solve problems that may arise in practice; and,
- learn common strategies in the design of new algorithms for emerging applications.

#### Topics Covered

Roughly, we will cover the following topics (some of them may be skipped depending on the time available).

- Introduction to Algorithms: Complexity analysis
- Divide and Conquer Algorithms
- Sorting and Order Statistics
- Greedy Algorithms
- Hash functions and Probabilistic Analysis
- Dynamic Programming
- Graph Algorithms: Search, Minimum Spanning Trees, Shortest Paths, Network Flows
- Matching algorithms
- Basic Computational Complexity: P, NP, reductions and open problems

- Teacher: Aaron Clauset
- Teacher: Murray Cox
- Teacher: Rachel Cox
- Teacher: Joshua Grochow
- Teaching Assistant: Shivendra Agrawal
- Teaching Assistant: Christopher Gavin
- Teaching Assistant: Chu-Sheng Ku
- Teaching Assistant: Sebastian Laudenschlager
- Teaching Assistant: Zhiyuan Liu
- Teaching Assistant: Tao Ruan
- Teaching Assistant: Wanshan Yang