# Chapter 7: Time Complexity

## For Your Enjoyment

## Chapter 7.3, The Class NP

### Definitions

- A
**verifier** for a language A is an algorithm V, where
A = {w | V accepts <w, c> for some string c}.
We measure the time of a verifier only in terms of the length of w,
so a **polynomial time verifier** runs in polynomial time in the
length of w. A language A is **polynomially verifiable** if it has
a polynomial time verifier.
**NP** is the class of languages that have polynomial time verifiers.
**NTIME(t(n))** = {L | L is a language decided by an O(t(n)) time
nondeterministic Turing Machine}. Thus,
NP = ∪_{k} NTIME(n^{k}).

### Examples of NP Problems

- HAMPATH = {<G, s, t> | G is a directed graph with a Hamiltonian
path from s to t}.
- CLIQUE = {<G, k> | G is an undirected graph with a k-clique}.
- SUBSET-SUM = {<S, t> | S = {x
_{1}, ... x_{k}}
and for some {y_{1}, ... y_{m}} ⊆
{x_{1}, ... x_{k}} we have Σ y_{i} = t}.

### Proof that SUBSET-SUM is in NP

N = "On input <S, t>:
1. Nondeterministically select a subset c of the numbers in S.
2. Test whether c is a collection of numbers that sum to t.
3. If the test passes, accept; otherwise, reject."
OR
V = "On input <<S, t>, c>:
1. Test whether c is a collection of numbers that sum to t.
2. Test whether S contains all the numbers in c.
3. If both pass, accept; otherwise, reject."

### Active Learning

- Consider 3COLOR = {<G> | G is colorable with 3 colors}.
- Prove that 3COLOR is in NP.

### Test Your Comprehension

- Problem 7.7
- Problem 7.9
- Problem 7.12