Course Info

Description. This is a course on the design and implementation of modern algorithms that deal with hard problems and big data. The course stresses application and project based development of algorithmic techniques. Emphasis is placed on algorithmic ideas that have had substantial impact in the real world, including approximation, randomization, hashing, streaming, spectral techniques, optimization, and search.

The course is project-driven: students will complete several homework assignments as well as a larger student-driven course project. There are no exams.

Course Objectives. Upon completion of this course, students will be able to 

  • Design and implement efficient algorithms for computationally difficult problems.
  • Analyze the performance of algorithms using mathematical arguments and empirical evaluation.  
  • Propose and execute a student-driven group algorithms project.
  • Communicate the results of a project in algorithm design via oral presentation to peers and a written research article.
  • Summarize the significance of algorithmic insights for real world projects in computer science.

Prior Background. Students should have programming, algorithms, and data structures experience at least at the level of CompSci 201, and have prior experience in proof-based discrete mathematics at the level of CompSci 230. Experience of algorithm design and analysis at the level of CompSci 330 will be helpful, but is not required, and there will be minimal overlap in content between this course and CompSci 330.