MSc
Algorithms Course Exercises
Twelve weeks of exercise sessions for an undergraduate algorithm-design course: problem statement, worked reasoning, Python, and the slides used to teach each one.
Teaching material for the exercise sessions of an undergraduate algorithm-design course at Sapienza: thirty problems across twelve weeks, each written out as the statement, a recap of the definitions it needs, and the reasoning toward a solution.
- Context
- Teaching assistant, Sapienza, spring 2023
- Contents
- 12 sets · 30 problems · 8 slide decks
- Stack
- Python · Jupyter · NetworkX · LaTeX
- Repository
- VincenzoImp/algorithms-course-exercises
What it is
Each week ships as three artefacts: a notebook with the problems worked through, a LaTeX-typeset PDF of the solutions, and, for the first eight weeks, the slide deck used to present them. The problems are in Italian, because the course was.
The material is graph-heavy: classifying DFS edges, strongly connected components, orienting an undirected graph into a DAG, bridges, why Dijkstra breaks on negative weights, and several minimum-spanning-tree properties. Then divide and conquer, dynamic programming, and a set of backtracking generation problems. The Python is deliberately plain: graphs as adjacency-list dictionaries, with NetworkX used only to draw the examples.
What I took from it
Writing a solution for someone else to read is a different job from producing one. The students were almost never stuck on Python; they were stuck on why a particular approach was the right one, which means the useful artefact is the argument, not the code that follows from it. That shows up in the structure – statement, the definitions you need to have in your head, then the reasoning – and it is the same instinct behind every technical page I write now.