Skip to content

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.

Apr 2023Distributed systems

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
VincenzoImp/algorithms-course-exercisesTwelve weeks of exercise sessions for an undergraduate algorithms course: statements, worked solutions, and slides.Jupyter Notebook

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.