최근 https://github.com/koosaga/project-hardness 의 스터디에 참여하고 있다. 해당 스터디에서 공부한 내용을 아주 간략히 (주로 informal 하다.) 간혹 정리해볼 예정.
P와 NP
P와 FP
- $\mathbb{P}$는 다항 시간(입력 $x$의 크기에 대해 다항식 scale로 bound 됨을 의미)에 풀리는 문제들의 class이다.
- 유의 사항: 정수 $n$은 $\log_2 n$ 개의 비트로 표현할 수 있으므로 $n$을 입력으로 줄 때 입력의 크기는 $\log_2 n$ 이다. (흔히들 Subset Sum 등을 $\mathbb{P}$라 생각하면서 하는 오해...)
- $\mathbb{FP}$는 다항 시간에 계산 가능한 함수들의 class이다.
어떤 계산 모델을 가정할 것인가?
- 계산 이론에서 사용되는 standard model은 tape, head, state, action table로 구성된 Turing machine
- 우리에게 익숙한 model은 Word-RAM model로 상수 시간에 동작하는 fixed-size bit/arithmetic operations와 random access로 구성
- 그 외 여러 model들이 있을텐데...
- 다행히 위의 모든 model에서 poly-time algorithm의 존재 여부는 동등함
Church-Turing Thesis
- Church-Turing Thesis
- Everything computable is computable in TMs
- Extended Church-Turing Thesis
- Everything poly-time computable is in $\mathbb{P}$
Reduction
- 함수 $f$가 (결정) 문제 $A$ 부터 $B$ 로의 reduction 임은 $x \in A \iff f(x) \in B$ 로 정의
- $f \in \mathbb{FP}$ 일 때 특별히 poly-time reduction 으로 부르고, 이러함 $f$가 존재하면 $A \le_p B$ 로 표기
- $A$에서 $B$로의 poly-time reduction이 존재하면 $B$가 최소한 $A$ 이상으로 어렵다고 (informally) 생각할 수 있음
- $\le_p$는 transitive
NP
- NP(nondertimistic polynomial time) class는 다음의 두 가지 정의가 있음:
- Non-deterministic TM으로 poly-time에 해결할 수 있는 문제들의 class
- NTM = TM with multiple states
- poly-time에 (맞았음을) 검증 가능한 문제들의 class
- Non-deterministic TM으로 poly-time에 해결할 수 있는 문제들의 class
- 두 정의가 동치임은 증명 가능함
- 구체적으로는, $A \in \mathbb{NP} \iff \exists B, A={x : \exists^p y, (x, y) \in B}$
- 여기에서 $\exists^p y$ 는 poly size의 입력 $y$가 존재하는 것을 의미, 이러한 $y$를 witness 또는 certificate라고 부름
- 예시: 4색 문제, SAT, vertex cover, hamiltonian cycle, FACTORING ...
co-NP
- co-NP class는 NP class의 dual로 poly-time에 틀렸음을 검증 가능한 문제들의 class
- $A \in co-\mathbb{NP} \iff \exists B, A = {x : \forall^p y, (x, y) \in B}$
- 예시: FACTORING (이건 $\mathbb{NP} \cap co-\mathbb{NP}$에 속함)
NP-completeness & NP-hardness
- $A \in \mathbb{NP}-hard \iff \forall B \in \mathbb{NP}, B \leq_p A$
- $\mathbb{NP}-complete = \mathbb{NP} \cap \mathbb{NP}-hard$
Facts & Common Beliefs
- $\mathbb{P} \subseteq \mathbb{NP}$ (fact)
- $\mathbb{P} \subseteq co-\mathbb{NP}$ (fact)
- $\mathbb{P} \subsetneq \mathbb{NP}$ (belief)
- $\mathbb{P} \subsetneq co-\mathbb{NP}$ (belief)
- $\mathbb{NP} \neq co-\mathbb{NP}$ (belief)
Randomized Complexity Classes
RP, ZPP, BPP
- $A$가 $\mathbb{RP}$에 속함은 $x \mapsto {yes, no}$ 인 poly-time algorithm $M$이 존재해서
- $\Pr[M(x)=yes : x \in A] \ge {1 \over 2}$
- $\Pr[M(x) = no : x \not \in A] = 1$
- $co-\mathbb{RP}$ 또한 비슷하게 정의
- $A$가 $\mathbb{ZPP}$에 속함은 $x \mapsto {yes, no, idk}$ 인 poly-time algorithm $M$이 존재해서
- $\Pr[M(x) = idk] \le {1 \over 2}$
- $M$의 출력이 yes, no 인 경우 올바름
- $A$가 $\mathbb{BPP}$에 속함은 $x \mapsto {yes, no}$ 인 poly-time algorithm $M$이 존재해서
- $\Pr[M(x) = yes : x \in A] \ge {3 \over 4}$
- $\Pr[M(x) = no : x \not \in A] \ge {3 \over 4}$
Facts & Common Beliefs
- Fact: $\mathbb{ZPP} = \mathbb{RP} \cap co-\mathbb{RP}$
- Common Belief: $\mathbb{P} = \mathbb{ZPP} = \mathbb{RP}$
Higher Complexity Classes
- $\mathbb{EXPTIME}$: $2^{n ^{O(1)}}$ 시간에 solvable
- $\mathbb{PSPACE}$: $n^{O(1)}$ 메모리로 solvable
- $\mathbb{NPSPACE}$: $\mathbb{PSPACE}$로 검증 가능
- $\mathbb{EXPSPACE}$: $2^{n^{O(1)}}$ 메모리로 solvable
Facts
- $\mathbb{P} \neq \mathbb{EXPTIME}$
- $\mathbb{PSPACE} \neq \mathbb{EXPSPACE}$
- $\mathbb{NP} \subseteq \mathbb{PSPACE} \subseteq \mathbb{EXPTIME}$
Exercise
실제 강의 자료와 넘버링이 상이함에 유의하라.
Exercise 1. SAT $\le_p$ Zero-One Integer Program임을 보여라.
(Poly-time) Reduction을 하나 구상해보자.
변수 $x_1, x_2, \cdots, x_n$와 클로져 $C_1, C_2, \cdots, C_m$ 으로 구성된 SAT 인스턴스가 있다고 하자. Binary 변수 $y_1, y_2, \cdots, y_n$을 도입하여 $f(x_i) = y_i$, $f(\bar x_i) = 1 - y_i$로 매핑해주자. 이제, 클로져 $C_i = (l_1 \lor l_2 \lor \cdots \lor l_k)$에 대해 $g(C_i) = f(l_1) + f(l_2) + \cdots + f(l_k)$ 로 매핑해줄 수 있다. 그러면, 주어진 instance가 SAT에 속함과 $i = 1, 2, \cdots, m$에 대해 $g(C_i) \ge 1$을 만족시키는 $y_1, y_2, \cdots, y_n$이 존재함이 동치가 된다.
Exercise 2. PRIMES에 대한 polynomial size witness를 찾아라.
- $\mathbb{Z}_p^*$의 원소 가운데 $x^n = 1$을 만족하는 것은 $n$개 이하이다.
- $\mathbb{Z}_p[x]$는 unique factorization domain 이므로 명백하다.
- $\mathbb{Z}_p^*$은 cyclic group이다.
- $A(d)$를 order가 정확히 $d$인 $x \in \mathbb{Z}_p^*$ 들의 집합이라 하자.
- $|A(d)| \in {0, \phi(d)}$
- $x \in A(d)$가 존재한다고 하자.
- 그러면 $|\left<x\right>| = d$ 이므로, $\left< x \right> = {y \in \mathbb{Z}_p^* : y^d = 1}$이 된다.
- 이 경우, $A(d)$가 $\left< x \right>$의 generator의 집합과 같으므로, 총 $|A(d)| = \phi(d)$.
- $p = \sum_{d | p} |A(d)| \le \sum_{d | p} \phi(d) = p$ 이므로, $|A(d)| = \phi(d)$ for all $d | p$.
- 따라서, $|A(p)| = \phi(p) > 0$.
- Multiplicative group $G$에 대해 $g \in G$가 모든 $q | m (=|G|)$인 소수 $q$에 대해 $g^{m/q} \neq 1$ 을 만족함과 $g$가 generator임은 동치이다.
- ($\Leftarrow$) : 명백하다.
- ($\Rightarrow$) : $g^k = 1$ 을 만족한다면, $k | m$ 이므로 명백.
- 이 사실을 이용하면 소수 $p$에 대한 witness를 $p-1$의 소인수를 이용해 귀납적으로 정의해줄 수 있다.
'Computer Science' 카테고리의 다른 글
Massively Parallel Computing Model (0) | 2023.05.27 |
---|---|
Unique Games Conjecture에 대한 노트 (0) | 2022.11.13 |
The Short-Side Advantage in Random Matching Markets (0) | 2022.10.01 |
Redis는 어떻게 key를 expire 하는가? (0) | 2022.09.14 |
나의 zsh 및 Vim 세팅 (0) | 2020.05.27 |