Module 1 : Computational Complexity

Lecture 1 : Complexity of Computation & Complexity Classes

The following diagram shows the containment of different complexity classes:

Polynomial Time reducibility:
A language L1⊆ ∑ * is said to be polynomial time reducible to L2 ⊆∑ * if there is a polynomial time computable function f ( ) such that x ∈ ∑*, x ∈ L1 if and only if f (x) ∈ L2 . We denote this by L1p L2. we can clearly observe that polynomial time reductions are transitive.

Completeness:
A language L ⊆∑* is said to be complete with respect to any complexity class C if all problems in that complexity class C can be reduced to L.Thus we formally define the notion of NP-Completeness.

Definition 6:
A language L ⊆ ∑ * is said to be NP-Complete if
(i) L∈NP
(ii) L′∈NP, we have L′ ∝p L.

The above definition is not very suitable to prove a language L to be NP-Complete since we have infinitely many language in the class NP to be reduced to L. Hence for providing NP-Completeness we resort to the following equivalent definition.

Definition 7:
A language L is said to be NP-Complete if
(i) L∈ NP
(ii) ∃ L' ⊆ ∑* that is NP-Complete and L' ∝p L.

The previous two definitions are equivalent since:

L'
is NP-Complete ⇒ ∀ L″∈NP, L″∝p L (from definition 6) ⇒ ∀ L″∈ NP, L″∝p L′  ∝p L ⇒ ∀ L″∈ NP, L″ ∝p L (from the transitivity of polynomial time reductions.) L is NP-Complete.

Only catch in this approach is to prove the first problem to be NP-Complete for which we usually take as SATISFIABILITY problem.