1.0 - Polynomial Time Algorithms - Tractable

1.1 - Polynomial Time Algorithms - Computational Models

1.2 - Examples of Polynomial and Non-Polynomial Algorithms

1.2.1 - Polynomial Time - Closure Properties

1.2.2 - Euler Tour vs Hamiltonian Cycle

1.2.3 - 2-CNF vs 3-CNF satisfiability

1.3 - Defining Classes of Problems

1.3.1 - Decision Problems

1.3.2 - Decision Problems: An Example

2.0 - Complexity Class P

💡 This slide was from Lecture 11.1

2.1 - Abstract Problems

2.2 - Encodings

2.3 - Concrete Problems

2.4 - Complexity Class P

3.0 - Encoding Abstract Problems as Concrete Problems

3.1 - Polynomial-Time Solvability to Abstract Problems

3.1.1 - Dependency on Encoding - Example

3.1.2 - Standard Encoding


3.2.1 - Independence from Encoding

3.2.2 - Proof

By symmetry, we can show that e1(Q)Pe2(Q)Pe_1(Q)\in P \Rightarrow e_2(Q)\in P

  1. If e1(Q)Pe_1(Q)\in P then there exists polynomial-time algorithm A1A_1 that solves e1(Q)e_1(Q)

  2. As e1e_1 and e2e_2 are polynomially-related encodings, then there exists a polynomial-time computable function f21f_{21} such that f21(e2(i))=e1(i)f_{21}(e_2(i))=e_1(i) for some problem instance ii

  3. Hence, assume that F21F_{21} is some polynomial time algorithm implementing f21f_{21}

  4. Then the following algorithm implements e2(Q)e_2(Q) for instance ii assuming i2=e2(i)i_2=e_2(i)

    A2(i2) i1 = F21(i2) return A1(i1)

********************Proof that A2A_2 is polynomial-time