# 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](/dsa-java/master/syllabus.md)
* [Schedule](/dsa-java/master/schedule.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://emory.gitbook.io/dsa-java/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
