*Theoretical computer science* is a discipline dealing with systematic ways to process information, especially using computers. Key original concepts of theoretical computer science include:

- development of methods for problem-solving
**theory of algorithms**), - theoretical models to construct computers, i.e. machines able to apply algorithms
**automata theory**), - a foundation of
**computability theory**itself, i.e. exploring which problems are tractable by applying automata performing algorithms.

You should be acquainted with:

- the basic concepts of logic, especially the concepts of language, formal language, syntax, and semantics,
- Syntax and semantics of propositional logic,
- Basic set operations and basics about functions.
- Basics about algebraic structures.

- What are
*grammatics*of formal languages? - Learn about and explain the Chomsky hierarchy of language classes_?
- Learn about
*regular*and*context-free*languages? - What is
*computability*and learn some not computable*problems*? - What is
*complexity*of computation and how to measure it? - Learn about different
*complexity classes*of problems.

- Part: Formal Languages
- Part: Computability
- Part: Computational Complexity Theory
- Part: Optimization Methods
- Part: Data Structures
- Part: Basic Algorithms
- Part: Semi-numerical Algorithms
- Part: Numerical Algorithms

Parts: 1