Jeremy T. Fineman

Professor
Wagner Chair in Computer Science
Department of Computer Science
Georgetown University

Fall 2023; Spring 2024

COSC-1110: Math Methods for Computer Science

This course, designed to taken concurrently with COSC-1030, covers mathematical tools and principles that are valuable to the computer scientist. Topics include: propositional and predicate logic; mathematical proofs, including induction; counting and basic probability theory; logarithmic and exponential functions; elementary graph theory; and "Big-O" notation and asymptotics.

Spring 2013, 2014, 2016, 2017, 2018, 2021; Fall 2022; Spring 2025

COSC-3200: 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.

Fall 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2020, 2024, 2025

COSC-5200: 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.

Spring 2017

COSC-680: Advanced Data Structures

This course covers major theoretical results in data structures, including classic results as well as current research and open problems. The specific data structures covered are subject to change. Likely topics include: comparison-based search data structures, faster data structures on integers, data structures for dynamic graph problems, self adjusting data structures, data structures for geometric problems, external-memory and cache-oblivious data structures, and persistent data structures. One common analysis technique used throughout the course is amortization.

Spring 2012; Fall 2020, 2021

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).