---
description: Jinho D. Choi
---

# Preface

This is an advanced programming course in Computer Science that teaches how to design efficient structures and algorithms to process big data and methods to benchmark their performance for large-scale computing. Topics cover data structures such as _priority queues_, _binary trees_, _tries_, and _graphs_ and their applications in constructing algorithms such as _sorting_, _searching_, _balancing_, _traversing_, and _spanning_. Advanced topics such as _network flow_ and _dynamic programming_ are also discussed. Throughout this course, students are expected to

* Have a deep conceptual understanding of various data structures and algorithms.
* Implement their conceptual understanding in a programming language.
* Explore the most effective structures and algorithms for given tasks.
* Properly assess the quality of their implementations.

There are topical quizzes and homework assignments that require sufficient skills in Java programming, Git version control, Gradle software project management, and scientific writing. Intermediate-level Java programming is a prerequisite of this course.

* [Syllabus](master/syllabus)
* [Schedule](master/schedule)
