We will restrict ourselves to two types of Complexities:
Time Complexity
Space Complexity.
By time/space complexity we mean the time/space as a function of input size required by an algorithm to solve a problem.
Problems are categorized into 2 types
(i) Decision Problem
(ii) Optimization Problem.
For the purpose of present discussion we will concentrate on decision problems. This is defined as follows.
Definition 1: Let ∑ be a set of alphabets and let L ⊆ ∑* be a language. Given a string x ∈ L or x ∉ L is decision problem.
Notation: Let p() denote a polynomial function.
We will define some complexity classes:
Definition 2: The class P comprises of all languages L ⊆ ∑* such that there exist a polynomial time algorithm A to decide L. In other words given a string x ∈ ∑* the algorithim A can determine in time p(|x|) whether x ∈ L or x ∉ L.
Definition3: The class NP comprises of all language L ⊆ ∑ * such that given a string x ∈ L a proof of the membership of x ∈ L can be found and verified in time p(|x|).
Definition 4: The class Co-NP comprises of all language L ⊆ ∑* such that ∑*- L ∈NP.
Note: We can easily verify CO-P=P and thus P ⊆NP ∩ CO-NP.
Definition 5: The class PSPACE comprise of all languages L ⊆ ∑ * such that there exists an algorithm A that uses polynomial working space with respect to the input size to decide L. In other words given a string x ∈ ∑* the algorithim A can determine using space, i.e., p(|x|) whether x ∈ L or x ∉ L.
We will state without proof the following result that follows from Savitch’s theorem:
PSPACE=NSPACE