Jeremy T. Fineman

Associate Professor
Department of Computer Science
Georgetown University

Spring 2013, 2014, 2016, 2017

COSC-240: Introduction to Algorithms

This course explores various techniques used in the design and analysis of computer algorithms. Starting with the divide-and-conquer technique, the course covers various general approaches such as the greedy method and dynamic programming. Depending on time, various examples from the following problem domains will be considered: sorting, graph theory, shortest path, max-flow, matching, FFT, data compression, cryptography, and computational geometry. The notions of NP-completeness and computability may also be introduced.

The official course webpage is on Blackboard.

Fall 2011, 2012, 2013, 2014, 2015, 2016, 2017

COSC-540: Algorithms

This introductory graduate course explores the design and analysis of efficient algorithms. Topics covered include divide-and-conquer, greedy algorithms, and dynamic programming as well as more advanced topics like amortization, randomization, linear programming, memory-efficient algorithms, online algorithms, and approximation algorithms. Specific problem domains are subject to change but may include string algorithms, computational geometry, graph algorithms, combinatorial optimization, number theory, and computational sciences. Although there is some limited overlap of material, this course is not a replacement for an undergraduate algorithms course and hence assumes some basic understanding of algorithm analysis and discrete mathematics.

The official course webpage is on Blackboard.

Spring 2012

COSC-542: Parallel Algorithms

The main focus of this course is on parallel algorithms, but we will also briefly cover programming models and cache-coherence. The lectures primarily address design and analysis of algorithms, but there will also be one or two programming assignment(s) to illustrate some of the engineering issues. This course comprises two main units. The first unit is lecture based and intended to provide a background on parallel computing, focusing on some classic and recent results in parallel algorithms. The second unit is more research-centric, based around reading and presenting research papers. Most papers will be presented by students, but depending on enrollment and time, some may also be presented by me. There will also be an end-of-term project which may be systems or theory (students' choice).

The official course webpage is on Blackboard.