Theory of Computation is the study of how problems can be solved using mathematical models of computation.
It explores the limits of what computers can and cannot compute.
Core models include finite automata, pushdown automata, and Turing machines
Formal languages and grammars are used to describe computational problems.
Automata theory deals with pattern recognition and language processing.
Computability theory determines which problems are decidable (solvable) or undecidable.
Complexity theory classifies problems based on the resources (time/space) needed to solve them.
Classes like P, NP, NP-complete, and NP-hard describe problem difficulty.