Theory and algorithms Applications Lecture notes Software