Notes from “Computational Complexity: A Modern Approach”, Sanjeev Arora and Boaz Barak.

Computability v/s complexity: Both these terms although entangled but represents different branches of computation.

flowchart TB

cc["Computational Complexity"] --> ctt["Computational Theory"] 
ctt --> ct["Cryptography"]
ctt --> pcp["Probabilistic Checkable Proofs"]
ct --> pcp
ctt --> qm["Quantum Mechanics"]
ct --> qc["Quantum Cryptography"]
qm --> qc
cc --> ac["Algorithm Complexity"]
ac --> prob["Probabilistic Algorithms"]

cc --> comp["Computability Theory"] 
comp --> auto["Automata Theory"] 

cc --> info["Information Theory"] 
info --> compress["Compression"] 
info --> coding["Coding Theory"] 
info --> ct

Answers to expect from the book

  • Can exhaustive search be replaced by more efficient algorithms?
  • Can randomness be used to make some algorithms faster?
  • Can approximation be used to solve some problems faster?
  • Can computationally intractable problems lead to practical benefits like cryptography?
  • Can faster computers be built using quantum mechanics?
  • Can notion of proofs be upgraded from static mathematical proofs to something more efficient?
  • Can problems be classified into categories based on their memory, runtime, communication, randomness?
  • How to classify problems into different categories?
  • Can problems be “reduced”, where solution of one problems leads to solution of all other problems in that category?

Prerequisites

  • Decision Problems: A function mapping strings to strings with the output as single bit. These functions are called Languages or Decision Problems and identified as subset . Act of computing can be classified as problem of deciding language (given , decide whether ).
  • Search Problems:
  • Optimisation problems:
  • Counting Problems:

Big-Oh Notation

  • : Use , where there exists such that
  • :
  • :

Chapter 1

why do you even need a computational model?

Any computation is described and judged on it’s efficiency, i.e. how efficient it is to compute it. To realise this, we need a machine that is able to simulate any physically realisable computational model with little loss of efficiency. And fortunately, we’ve already found one: “Turing Machines”.

Turing Machines

Complexity class of P

Different models built upon Turing machines

  • Non-deterministic
  • Probabilistic
  • Quantum Computation
  • Boolean Circuits
  • Parallel Computers
  • Decision Trees
  • Communication Games