Teach­ing
List of classes taught and ma­te­ri­als

1 Classes at Uni­ver­sity of Athens

ΘΠ23 – Com­pu­ta­tional Learn­ing The­ory

(Spring 2023, 2024)

Sum­mary

The course is of­fered in both un­der­grad­u­ate and grad­u­ate level and stud­ies key top­ics in com­pu­ta­tional learn­ing the­ory. It ex­am­ines prob­lems of learn­ing and sta­tis­ti­cal test­ing of prob­a­bil­ity dis­tri­b­u­tions, as well as train­ing mod­els for clas­si­fi­ca­tion. We study well-de­fined com­pu­ta­tional learn­ing mod­els where it is pos­si­ble to pro­vide pre­cise and rig­or­ous analy­ses of learn­ing prob­lems and al­go­rithms, with an em­pha­sis on com­pu­ta­tional com­plex­ity.

ΘΠ24 – Al­go­rith­mic Prob­lem Solv­ing

(Spring 2024)

Sum­mary

Prob­lem Solv­ing and Al­go­rithm De­sign with a fo­cus on ef­fi­cient im­ple­men­ta­tion in C/​C++. Em­pha­sis will be placed on sim­pli­fied im­ple­men­ta­tion of com­plex al­go­rithms and logic us­ing li­braries. Im­ple­men­ta­tions through the STL li­brary will be used, as well as ready-made solvers for lin­ear pro­grams and sat­is­fi­a­bil­ity prob­lems. A wide range of al­go­rithms and tech­niques will be cov­ered, such as: Search and sort­ing al­go­rithms, Greedy al­go­rithms / Ex­haus­tive al­go­rithms with re­cur­sion, Ef­fi­cient bit-level en­cod­ing, Data struc­tures (Trees, Stacks, Queues, Heaps, Range Queries), Dy­namic Pro­gram­ming, Graph Al­go­rithms (Con­nec­tiv­ity, Short­est Path Find­ing, Max­i­mum Flow), Lin­ear Pro­gram­ming.

K09 – Dis­crete Math

(Fall 2022, 2023, 2024)

Sum­mary

In­tro­duc­tion to the fol­low­ing con­cepts: Sets, Math­e­mat­i­cal logic and iduc­tion, bi­nary re­la­tions, func­tions, com­bi­na­tions and per­mu­ta­tions, dis­crete prob­a­bil­ity dis­tri­b­u­tions, con­di­tional prob­a­bil­ity, in­de­pen­dent events, Bayes the­o­rem, as­ymp­totic be­hav­ior of arith­metic func­tions. Sem­i­nar ex­er­cises are given as well as a fi­nal test.

2 Classes at UW-Madi­son

CS 787 – Ad­vanced Al­go­rithms

(Spring 2022, Spring 2020, Fall 2019)

Sum­mary

Ad­vanced par­a­digms for the de­sign and analy­sis of ef­fi­cient al­go­rithms, in­clud­ing the use of ran­dom­ness, lin­ear pro­gram­ming, and semi-def­i­nite pro­gram­ming. Ap­pli­ca­tions to data struc­tures, ap­prox­i­mat­ing NP-hard op­ti­miza­tion prob­lems, learn­ing, on-line and dis­trib­uted prob­lems.

CS 880 – Top­ics in Al­go­rith­mic Game The­ory and Ma­chine Learn­ing

(Spring 2019)

Sum­mary

How to de­sign al­go­rithms when in­puts are given by strate­gic or ma­li­cious peo­ple and the out­puts af­fect them di­rectly? Top­ics in­clude: Con­cepts from Game The­ory Learn­ing Dy­nam­ics and Con­ver­gence in Games Mech­a­nism De­sign with­out money and So­cial Choice The­ory Mech­a­nism De­sign with Money Con­cepts from Learn­ing The­ory Op­ti­miza­tion from Sam­ples Learn­ing un­der Ad­ver­sar­ial or Strate­gic In­puts

CS 577 – In­tro­duc­tion to Al­go­rithms

(Spring 2021, Spring 2020, Fall 2018)

Sum­mary

Ba­sic par­a­digms for the de­sign and analy­sis of ef­fi­cient al­go­rithms: greed, di­vide-and-con­quer, dy­namic pro­gram­ming, re­duc­tions, and the use of ran­dom­ness. Com­pu­ta­tional in­tractabil­ity in­clud­ing typ­i­cal NP-com­plete prob­lems and ways to deal with them.