### 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: Joshua Grochow
- Teacher: Ryan Layer
- Course Assistant: Daniel Scott
- Course Assistant: Quincy Smith
- Course Assistant: Shubha Swamy
- Course Assistant: Marlo Terr
- Course Assistant: Hao Yuan
- Teaching Assistant: Shivendra Agrawal
- Teaching Assistant: Gabriel Andrade
- Teaching Assistant: Josiah Buxton
- Teaching Assistant: Andrew Guttman
- Teaching Assistant: Lucas Hayne
- Teaching Assistant: Isabella Huang
- Teaching Assistant: Jayadharshini Jaiganesh
- Teaching Assistant: Yang Li
- Teaching Assistant: Manish Muralidhar
- Teaching Assistant: Wanshan Yang