Indice
Year 2022-2023
Announcements
- The course will start on Feb. 22, 2023.
Schedule (work in progress)
- Class hours: Mon 09‑11 (Fib-X1), Wed 09‑11 (Fib-L1), Fri 11-13 (Fib-L1)
- MS Teams channel here, please subscribe
- Office hours: remotely by appointment
Overview
The advanced nature of this course focuses on developing algorithmic design skills, exposing the students to complex problems that cannot be directly handled by standard libraries (being aware that several basic algorithms and data structures are already covered by the libraries of modern programming languages), thus requiring a significant effort in problem solving. These problems involve all basic data types, such as integers, strings, (geometric) points, trees and graphs as a starting point. The syllabus is structured to highlight the applicative situations in which the corresponding algorithms can be successfully employed, making references to software applications and libraries. The level of detail in each argument can change year-by-year, and will be decided according to requests coming from other courses in the curriculum and/or specific issues arising in, possibly novel, applicative scenarios.
Exams
Written exam: weekly hands-on in classroom (attendance is highly suggested).
Oral exam: topics discussed in class, please read the references in the notes.
Syllabus: programma d'esame
Topics
- Please see the topics listed below. Handouts are are available in the MS Teams channel.
Activity in class
- The screen snapshots shown during the classes are available in the MS Teams channel.
Official forms for the course
- Access to the course evaluation form (questionario studenti) before taking examination.
Class schedule
Date | Topics | References and notes |
---|---|---|
22.02.2023 | Introduction to the class. Course organization, schedule, and purpose. | |
24.02.2023 | Playing with probability. Random indicator variables: secretary problem and random permuting (suggested reading: birthday paradox). Randomized quick sort. | [CLRS 5.1-5.3 (optional 5.4.1), par. 7.3] code |
27.02.2023 | Virus scan and stream analysis with Karp-Rabin fingerprints: randomized checking and pattern matching. Montecarlo and Las Vegas algorithms. | [RM par.7.4-7.6] code |
01.03.2023 | Universal hashing. Markov's inequality. Perfect hashing. | [CLRS 11.2, 11.3.3, CLRS 11.5 ] code |
03.03.2023 | Weekly hands-on. | see Teams drive |
06.03.2023 | Introduction to game theory. The theory of rational choice. Strategic games. The prisoner dilemma. Pollution game. Bach or Stravinsky. Matching Pennies. Stag hunt. (F. Geraci) | see Teams drive |
08.03.2023 | Nash equilibrium. Review of example strategic games. Nash equilibrium of stag hunt with n players. Best response. Using best response to find the Nash equilibrium. (F. Geraci) | see Teams drive |
10.03.2023 | Weekly hands-on. (F. Geraci) | see Teams drive |
13.03.2023 | Game Theory. Improving and best response. Dominated actions. Vickrey auction (aka second price auction). Expected payoffs. (F. Geraci) | see Teams drive |
15.03.2023 | Mixed strategy Nash equilibrium. Example: matching penny. Example: kicking penalty. Stable matching. (F. Geraci) | see Teams drive |
17.03.2023 | Weekly hands-on. (F. Geraci) | see Teams drive |
20.03.2023 | Worst-case constant-time lookup: Cuckoo hashing. | Notes Notes code |
22.03.2023 | Proxy caches and dictionaries with errors: Bloom filters. | Survey: except par.2.5-2.6 (optional: par.2.2) |
24.03.2023 | Weekly hands-on. | see Teams drive |
27.03.2023 | Space-efficient storage of sets with approximate memberships: upper and lower bounds. | Notes (second part) |
29.03.2023 | Distributed server and load balancing through hashing. | blog Sect.7 and 8.1 |
31.03.2023 | Weekly hands-on. | see Teams drive |
03.04.2023 | Document resemblance with MinHash, k-sketches and the Jaccard similarity index. Azuma-Hoeffding bound. Triangle counting. | paper paper Azuma-Hoeffding code |
05.04.2023 | Count-Min sketches for frequent elements. | sects.1-3, 4.1 Site Notes code |
14.04.2023 | Weekly hands-on. | see Teams drive |
17.04.2023 | The data stream model. Cardinality estimation. Linear counting. LogLog counters. (F. Geraci) | see Teams drive |
19.04.2023 | Bloom filters (probabilistic deletion and counting). Count min sketch. Heavy hitters. The space saving algorithm. (F. Geraci) | see Teams drive |
21.04.2023 | Weekly hands-on. (F. Geraci) | see Teams drive |
24.04.2023 | Networked data and randomized min-cut algorithm for graphs. | par.1.1 |
26.04.2023 | Approximation in fine-grained algorithms and limitations. Case study: diameter in undirected unweighted graphs. | notes |
03.05.2023 | Fine-grained algorithms. SETH conjecture and conditional lower bounds. Guaranteed heuristics. Case study: diameter in undirected unweighted graphs. | notes sect. 2.3, 2.4, 3, 4 |
08.05.2023 | Fixed-parameter tractable (FPT) algorithms. Kernelization. Bounded search tree. Case study: min-vertex cover in graphs. | sect. 2.2.1, 3.1 |
10.05.2023 | Randomized FPT algorithms: color coding and randomized separation. Case study: longest path in graphs and subgraph isomorphism. | sect. 5.2, 5.3 |
12.05.2023 | Local search, Greedy, Randomized: case study of max cut for graphs. | Notes |
15.05.2023 | NP-hard problems: download file manager and the knapsack problem. Dynamic programming algorithms for Knapsack: Case 1: integer weights, complexity O(nW). Case 2: integer values, complexity O(n2vmax). Examples. General inapproximability results. Case study: travel salesman problem (TSP). 2-approximation algorithms for metric TSP. | [CLRS 35.2] notes |
17.05.2023 | NP-hard problems: fully polynomial-time randomized approximation schemes (FPRASs). Case study: #knapsack problem. | notes notes code |