Introduction to Algorithms
Instructor: Ramgopal Mettu
This course will survey the design and analysis of algorithms. We will study several basic algorithmic paradigms (e.g. divide-and-conquer, dynamic programming, the greedy approach and randomization), their application to core problems in graph theory and optimization, as well as analysis of time and space complexity. Our focus will be on understanding these paradigms and studying the algorithmic problems that can be solved using that particular paradigm with respect to particular application areas. We will cover the following topics in this course:
- Asymptotic Notation and Computational Models
- Divide-and-Conquer Algorithms
- Greedy Algorithms
- Dynamic Programming
- Graph Algorithms
- Network Flows and Linear Programming
- Computational Tractability and Complexity
For each of these, we will consider a number of different application areas (e.g. divide-and-conquer algorithms for scientific computing, sorting, etc.). At the end of this course, students should be able to:
- Apply the appropriate paradigm of algorithm design to a given computational problem.
- Reason about the worst-case behavior and correctness of a given algorithm, and how these might compare to alternative approaches to the given problem.
- Be proficient in the application of basic algorithm approaches (e.g. divide-and-conquer, the greedy stragety, dynamic programming, etc.) as they apply to a number of different application areas (e.g. scientific computing, networks, scheduling, data analysis, etc.).
PrerequisitesYou must have completed CMPS 1500, CMPS 1600 prior to enrolling, and MATH 2170 is a co-requisite.
Meeting Time and PlaceLectures: TuTh 9:30-10:45p, Stanley Thomas 302
Problem Sessions (as needed): Th 11:00-12:15p, Stanley Thomas 302
|Office:||Stanley Thomas 303E|
|Office Hours:||TuTh 11-12p or by appointment|
Template design by Andreas Viklund