# Lecture 0 - Course introduction and languages

Date Pre-lecture slides Post-lecture scribbles Async video Lecture recording
August 22 2023

## Notes

Course policies can be found on the website ecealgo.com.

#### Big Questions

This course is focused on answering three big questions:

• Given infinite time, how can we group problems by their “complexity” (Computability-theory)
• Given finite time, but a problem we know is computable, how fast can we solve the problem (Algorithmic design)
• Given a problem which is difficult to solve, can we infer how slow/fast we can solve it by comparing it to other known problems (Reductions)

#### Two types of complexity

Computational Complexity Algorithmic Complexity

#### Why Languages?

Problems need to be represented as languages to be comparable. A language is a set of strings and each string represents and instance of the problem (a specific set of inputs and their corresponding output). For example, the problem of adding two numbers together can be represented by the language:

Problem: Multiplying two integers together

Language: $L_{MULT2} = \begin{bmatrix} 1 \times 1|1, & 1 \times 2|2, & 1 \times 3|3, \ldots\\ 2 \times 1|2, & 2 \times 2|4, & 2 \times 3|6, \ldots \\ \vdots & \vdots & \vdots \\ n \times 1|n, & n \times 2|2n, & n \times 3|3n, \ldots \\ \end{bmatrix}$