Algorithms
and
Data
Structures

Spring 2021
course
site
-->

complexity theory & related topics

This is a huge topic - one of the major subfields of theoretical computer science : Formal Langauges and the Theory of Computation

What is a "formal language"?

The big ideas are :

Formal expression of the notion of "algorithm"

Formal notion of "machine" (i.e. computer)

For some categories there is 1-to-1 relationship between classes of languages and machines (the "template" link above)

A few "machines" :

An open question : P vs NP

But note that there are problems provably "harder" than NP ... and even some that no turing machine can solve in bounded finite time

aside: regular expressions

Note that in most programming languages, their library for "regular expressions" includes some syntax that is more powerful than the formal mathy definition of "regular expression". The "grouping" constructs, in particular, are not part of the formal mathy notion of a regular expression, but are often used in practical programming code.

This regex_ab.py is an example of the difference. And here's the finite state machine for the first pattern.

philosophy of mind

One related deep question is how people fit into all this. In other words is (intelligence, consciousness, sentience) computable? What do those things even mean.

What do you think?

information theory

And another related topic is the concept of "information", which has to do with patterns in data, randomness, and compressibility. Yet another course sized topic.