The content will be similar to that of the previous offering, however I will spend more time on NP-completeness and hardness of approximation (for example, unless P=NP, there is no polynomial-time approximation algorithm for set cover with a performance ratio of o(log n)).
review
summary: At the start of the course, know all of the material in Chapters 0-2 of the text,
except for sections 2.2 and 2.3. Be able to work the corresponding exercises and problems in the text.
The first few lectures will review some of this material. The first quiz will cover this material.
(This material is covered in cs150 -- a formal prerequisite for cs215 -- and so knowledge of this material is
a prerequisite to this course. If you find you don't know the material, please drop cs215 and take cs150 first.)
- background:
- basic mathematical concepts and notation (chapter 0)
- formalizing computational problems as languages
- classes of languages
- regular expressions and finite automata (1)
- finite automata (1.1)
- non-deterministic finite automata (1.2, thm 1.19)
- equivalence of regular expressions and finite automata (1.3, thm 1.28)
- pumping lemma (1.4, thm 1.37)
- context-free languages (2)
- ambiguity, Chomsky normal form (2.1, thm 2.6)
- worst-case analysis of algorithms (7.1)
- the class P - languages solvable in polynomial time (7.2, thms 7.12-7.14)
self-test/practice: You should be able to do the following exercises and problems:
- chapter 0: 0.1 - 0.11 (easy)
- chapter 1: all
- chapter 2: all not involving PDA's or pumping lemma for CFL's
- chapter 7: 7.1, 7.2, 7.6, 7.8 - 7.10, 7.12, 7.13, 7.16a, 7.20, 7.31, 7.35, 7.37, 7.38
computability
- What is computation? What is a computer? What is an algorithm? (Church-Turing Thesis) (3)
- multi-tape turing machines (thm 3.8)
- non-deterministic turing machines (thm 3.10)
- recognizable languages, enumerable languages (thm 3.13)
- concept originally motivated from mathematics (3.3)
- relation to Goedel's incompleteness theorem (truth is not axiomatizable)
- the class of decidable (computable) languages (4, 5)
- examples (thms 4.1-4.8)
- ATM
- diagonalization (thm 4.14, corollary 4.15)
- an undecidable language (thm 4.9)
- thm 4.16, corollary 4.17
- the halting problem and more undecidable languages (thms 5.1 - 5.4)
- computation histories, linear-bounded automata (thms 5.8 - 5.10)
- embedding computation in other problems (5.2, thm 5.11)
- [advanced topics depending on time]
complexity
- computational resources, efficient computation, complexity classes (thms 7.8, 7.10)
- non-determinism and the class NP - languages solvable in non-deterministic polynomial time (7.3, thm 7.17, thms 7.20-7.21)
- NP-completeness (embedding computation in combinatorial problems) (7.4 - 7.5)
- polynomial-time reductions (thm 7.25, 7.26, 7.28, 7.29)
- SAT is NP-complete (thm 7.30)
- more NP-complete problems (corollary 7.44, thms 7.34-7.37)
- space complexity - languages solvable by computers using limited memory (8)
- logspace (L) and non-deterministic logspace (NL) (8.4)
- polynomial space (PSPACE) and games (8.3)
- Savitch's thm (thm 8.5)
advanced topics
- approximation algorithms - algorithms that find approximate solutions to problems
- hardness of approximation
- optional topics:
- computation and proof (6.2)
- Kolmogorov complexity (6.4)
- randomized algorithms (10.2)
- cryptography (10.6)
- quantum computation (not in the book)
- computing with DNA (not in the book)
key concepts:
- def'n of computation via Turing machines - Church's Thesis
- undecidability, the halting problem
- NP-hardness
- reductions - Turing reductions, polynomial-time reductions
- "combinatorial problems are rich enough to express computation"
key skills:
- to tell whether a problem is decideable or not, and prove it
- to prove that a problem is NP-hard
- to prove that a problem is in P
- to judge the soundness of a proposed proof
- appropriate use of mathematical formalism (notation, concepts, proof techniques)