From 592040827152cef204d9ca0787e3fa8703788fce Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Thu, 20 Aug 2026 21:53:08 -0400 Subject: [PATCH] Add notes on the topic --- notes-and-examples/2026.08.27/classes.png | Bin 0 -> 13499 bytes notes-and-examples/2026.08.27/overview.md | 5 ++++ .../2026.08.27/topological_sort.md | 27 ++++++++++++++++++ .../2026.08.27/topological_sort.py | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 notes-and-examples/2026.08.27/classes.png create mode 100644 notes-and-examples/2026.08.27/overview.md create mode 100644 notes-and-examples/2026.08.27/topological_sort.md diff --git a/notes-and-examples/2026.08.27/classes.png b/notes-and-examples/2026.08.27/classes.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca3fbc994272e0b1d0184af6c6f16d930f74013 GIT binary patch literal 13499 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 Yo=>v>nAmkP1;~cn)Y8{1xCVRrZ?B*!sQ>@~ literal 0 HcmV?d00001 diff --git a/notes-and-examples/2026.08.27/overview.md b/notes-and-examples/2026.08.27/overview.md new file mode 100644 index 0000000..17c2ca8 --- /dev/null +++ b/notes-and-examples/2026.08.27/overview.md @@ -0,0 +1,5 @@ +## Overview + +We'll go over exercise 2 from [last week](../2026.08.20/overview.md), as well as +a new topic: [topological sort](./topological_sort.md). Try to complete the +exercise from the document. diff --git a/notes-and-examples/2026.08.27/topological_sort.md b/notes-and-examples/2026.08.27/topological_sort.md new file mode 100644 index 0000000..eeca5ac --- /dev/null +++ b/notes-and-examples/2026.08.27/topological_sort.md @@ -0,0 +1,27 @@ +## Class ordering + +These are some classes for Chapman University, for +the [computer science program](https://catalog.chapman.edu/preview_program.php?catoid=33&poid=6408&print). + +![An ordering of classes for Chapman University.](classes.png) + +> [!QUESTION] What type of graph is this? + +We say that a class is a *prerequisite* or a *dependency* of another class +if we need to take it before that other class. So, we need to take CPSC 230 +before CPSC 231, for example. + +Could you come up with something like this for your school? + +## The algorithm + +If you were to come up with a list of classes, such that the list of classes +is in the order which you need to take them, what would that look like? + +This order is what we're trying to achieve with the topological sort +algorithm. Note that there can be multiple correct solutions. + +## The exercise + +Let's write the algorithm. First, test it against the Chapman classes, then +put in your classes and see how it fares against that. diff --git a/notes-and-examples/2026.08.27/topological_sort.py b/notes-and-examples/2026.08.27/topological_sort.py index 1bb63a8..5cff7ea 100644 --- a/notes-and-examples/2026.08.27/topological_sort.py +++ b/notes-and-examples/2026.08.27/topological_sort.py @@ -15,7 +15,7 @@ classes = { } def topological_sort(adjacency_list: dict[str, set[str]]): - # return the sorted ordering + # return the sorted ordering ['CPSC 230', 'ENGR 101', 'CPSC 231', ...] return [] print(topological_sort(classes))