Algorithms and Advanced Data Structures

Description The objective of this course is to study algorithms for general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course may have a few programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead. THIS COURSE IS NOT OPEN TO COMPUTER SCIENCE MAJORS OR MINORS.

Key Topics
Run time analysis; Divide-and-conquer algorithms; Dynamic programming algorithms; Network flow algorithms; Linear and integer programming; Large-scale search algorithms and heuristics; Efficient data storage and query; NP-completeness

Learning Resources
Piazza; Blackboard; Course Textbook

Course Relevance
This course is for students not in the computer science major or minor who are interested in advanced data structures.

Course Goals
Ability to design, analyze complexity of, and prove the correctness of algorthims used with data structures.

Pre-required Knowledge
Understanding of C and data structures from 15-122

Assessment Structure
Homework 20%; First Midterm 25%; Second Midterm 25%; Final Exam 30%

Extra Time Commitments
This course 15-351 is for undergraduates. Graduate students should enroll in 15-650.

Instructor(s)