## Introduction to Theoretical Computer Science

**Instructor:** Vitaly Skachek **Assistants:** Zahra Alijani, Raido Everest, Pilleriin Jukk, Mozhgan Pourmoradnasseri, Rein Prank, Reimo Palm **Language of instruction:** lectures are in English, practice sessions are in English/Estonian

### Online studies during COVID-19 outbreak

As of now, the lectures and practice sessions will take place in online regime via BigBlueButton. In order to participate, you need to enter the Moodle page of the course, and to press "BigBlueButtonBN" in the upper-left menu.

`Online lectures take place on Fridays, 12:15-13:45.`

`Online practice sessions take place on Mondays, 14:15-15:45 (in English), and on Tuesdays 10:15-11:45 (in Estonian).`

`Online consultations take place on Mondays, 12:15-13:45.`

The access to the online classes and consultations is via the corresponding links in Moodle. The videos of lectures and pracice sessions will be recorded.

### Announcements

- Welcome to the course LTAT.04.001 Introduction to Theoretical Computer Science.
- The practice sessions on February 8, 9 and 10, 2021, are cancelled. The first lecture will take place on February 12 between 12:15-13:45. The information about organization of the study process in the midst of the corona pandemic and the instruction about accessing the online classes will be sent by email.

### Exam information (updated)

*Midterm exam*: TBA (lecture time, online)*Final exam*(first date): TBA (lecture time, online)*Final exam*(second date): TBA (lecture time, online)*Final exam retake*: TBA (lecture time, online)

### Literature

- Michael Sipser,
*Introduction to the Theory of Computation* - Jiri Matousek and Jaroslav Nesetril,
*An Invitation to Discrete Mathematics*

### Course description

This is a mandatory second year bachelor-level introductory course into the theory of computer science. The course will emphasize mathematical foundations of computer science, and will focus on computational models, their analysis and formal proofs. While theory of computer science is very important in practice, this course will **not** focus on implementations and programming.

In the first four weeks we will briefly cover basic counting techniques in combinatorics. Then, several weeks will be devoted to the automata theory. The second half of the semester will be devoted to computational models, Turing machines and NP-hardness.

### Grading policy

There will be a number of homeworks, the mid-term and final exams. The homeworks and exams are evaluated on the scale 0-100. The final grade is taken as a weighted average of homeworks and exams, and translated into "A"-"F" scale. The composition of the grade is: homeworks (20%), mid-term exam (40%) and final exam (40%). The homeworks will mainly contain questions of theoretical and mathematical nature, and typically will **not** include programming tasks.

### Syllabus

The following is a preliminary list of topics (some deviations from this list are possible):

#### Part 1: Enumerative combinatorics

- Permutations and combinations
- Newtonâ€™s binomial theorem
- Inclusion-exclusion principle

#### Part 2: Automata theory

- Deterministic and non-deterministic finite automata
- Regular expressions and regular languages
- Context-free languages

#### Part 3: Computability theory

- Turing machines
- Undecidable problems
- Equivalences between different models of Turing machines
- SAT and Cook's theorem
- Examples of NP-complete problems