
Summer Courses
Registration for Summer is available on Vergil (https://vergil.columbia.edu/) for students and through SPS (https://summer.sps.columbia.edu/) for non-Columbia students.
New Course!
COMS 3995 001: Implementing Essential Algorithms | Prof. Brian Borowski
Prerequisite: COMS W3134 or COMS W3137
Course Overview: Implementing Essential Algorithms covers standard algorithm design techniques and the implementation of classic algorithms in the Java programming language. It is designed to serve as a follow-up course to Data Structures in Java, allowing students to build a strong foundation in computer science principles. Topics include recursive backtracking, advanced searching and sorting, advanced search trees, numerical algorithms, and dynamic programming. The focus of the course is for students to deeply understand the topics to be able to devise fast, clean implementations of classic algorithms.
Course Outcomes: To assess student progress, we focus on key skills that can be demonstrated. Below is the list of course outcomes to be achieved by the end of the semester:
-
Explain the meaning of big-O, Theta, and Omega notations and use them to reason about the performance of diverse algorithms.
-
Apply the Master Theorem to determine the runtime of recursive algorithms.
-
Employ recursive backtracking to search for solutions with brute-force.
-
Design and implement advanced searching and sorting algorithms, such as quickselect and stable implementations of counting sort, bucket sort, and radix sort.
-
Implement an advanced search tree such as a splay tree, 2-3 tree, or B tree.
-
Design and implement numerical algorithms such as the sieve of Eratosthenes, Gaussian elimination, binary exponentiation, and Horner’s method.
-
Apply standard algorithm design techniques such as the greedy technique, dynamic programming, and iterative improvement.
-
Design and implement a test plan for each programming assignment.