Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- JanusWebRTCGateway
- kotlin
- 오블완
- python
- Value too long for column
- 코루틴 컨텍스트
- vfr video
- 깡돼후
- preemption #
- tolerated
- JanusWebRTCServer
- pytest
- 자원부족
- PersistenceContext
- 개성국밥
- table not found
- JanusWebRTC
- PytestPluginManager
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 달인막창
- VARCHAR (1)
- k8s #kubernetes #쿠버네티스
- 겨울 부산
- terminal
- 코루틴 빌더
- Spring Batch
- mp4fpsmod
- JanusGateway
- taint
- 티스토리챌린지
Archives
너와 나의 스토리
[알고리즘] CH13. Class P, NP, NP-Complete Problems 본문
반응형
Summary
- Class P: 해당 문제를 다항 시간에 해결할 수 있는 알고리즘이 존재하는 decision problems의 집합
- Class NP: 해당 문제를 해결하는 Non-deterministic 다항 시간 알고리즘이 존재하는 문제.
- 어떤 certificate를 다항시간에 verification할 수 있으면, 그 문제는 class NP에 속함
Class P
- The set of decision problems that are polynomially bounded
- 해당 문제(P)를 다항시간에 해결할 수 있는 알고리즘이 존재하는 decision problems의 집합
- 다항 시간: 시간 복잡도가 $O(n^k)$, k가 상수
- 결정론적 튜링 기계에 사용한 프로그램을 비결정론적 튜링 기계에 적용할 수 있으므로, P는 NP의 부분집합이 된다.
Class NP
- The set of decision problems for which there is a polynomially bounded non-deterministic algorithm
- 다항 시간에 varification하는 알고리즘이 존재하는 decision problems의 집합
- * Nondeterministic algorithm: 동일한 입력에 대해 서로 다른 실행에서 다른 동작을 나타낼 수 있는 알고리즘
Problems와 Algorithms의 관계
- complexity of a problem(문제의 복잡성)은 문제를 해결할 수 있는 최적 알고리즘의 복잡성이다.
- 정렬되지 않은 배열에서 가장 큰 값 찾기 -> $\Omega(n)$
- 배열 정렬 -> $\Omega(nlogn)$
Optimization Problems vs Decision Problems
- Optimization Problems
- 최적의 값을 찾는 문제
- ex) Shortest-path problem: weighted graph가 주어지고, u에서 v까지 최소한의 cost으로 가는 경로 찾기
- Decision Problmes
- yes or no로 대답
- ex) graph와 k가 주어졌을 때, u에서 v까지 최대 k개 이하의 edges만 포함하는 경로가 존재하는가?
- optimization problem을 풀면 풀 수 있음
- Optimization problem이 decision problem보다 어렵(쉽지 않은) 문제이다.
Class P
- k가 상수일 때, T(n) = O($n^k$) -> polynomial time
- class P에 속하는 문제는 다항시간에 문제를 해결할 수 있는 알고리즘이 존재한다고 말한다.
- 다항 시간에 해결하는 알고리즘을 efficient or tractable or easy하다고 말한다.
Hard한 문제들
- 다항 시간에 문제를 해결할 알고리즘이 아직 없는 문제들
- ex) 0/1 Knapsack problem, traveling salesperson problem
- Undecidable problems
- 컴퓨터로 해결할 수 없는 문제
- solvable = decidable
0/1 knapsack problem
- Optimization problem: 도둑이 동굴에 있는 보물을 가져가려고 한다. 도둑은 가방이 있고, 가방에는 weight가 최대 w만큼만 담을 수 있다. 무게가 w가 넘지 않으면서 value가 최대가 되도록 보물을 가져가자.
- Decision problem: 무게가 w가 넘지 않으면서 value가 k 이상인 아이템들의 집합이 존재하는가?
- w: positive integer
- 동굴 - n개의 아이템
item index (i) | 1 | 2 | 3 | ... | n |
value ($v_i$) | $v_1$ | $v_2$ | $v_3$ | $v_n$ | |
weight ($w_i$) | $w_1$ | $w_2$ | $w_3$ | $w_n$ |
- 조건:
- 아이템은 가져가거나 놓고 가야한다.
- 한 아이템을 일부분만 가져갈 순 없다. 다 가져가거나 안 가져가거나
- 한 아이템을 한 번만 가져갈 수 있다.
- Fractional kanpsack problem
- Class P에 속하는 문제
- 0/1 knapsack problem에서 한 아이템의 일부분을 가져갈 수 있다.
- 다항 시간에 풀 수 있다.
Traveling Salesperson Problem (TSP)
- 입력으로 complete-weighted graph가 주어진다.
- Optimization problem: 비용을 최소화하면서 모든 정점들을 한번씩만 방문하는 simple cycle을 찾는 문제
- simple cycle: 첫 번째 정점과 마지막 정점만 동일하고 나머지 정점은 다른 path를 가진 cycle
- Decision problem: 모든 정점들을 한 번씩만 지나는 cost가 k보다 작은 simple cycle이 존재하는가?
- Decision problem -> NP-Complete 문제
Non-Deterministic Polynoial Time: Class NP
- Class NP: 다항 시간에 varification하는 알고리즘이 존재하는 decision problems의 집합
- Non-deterministic polynomial-time algorithm 존재
- Class P에 속하는 문제들은 Class NP에도 속한다.
- P = NP?
- 문제의 입력(input)과 근거(certification, witness)가 주어졌을 때
- P = NP인가? -> 아직 증명 못 함
Automata
- DFA(Deterministic Finite Automata)
- 노드와 심볼이 결정되면 반드시 하나의 상태로만 이동
- 즉, 입력이 결정되면 output은 항상 하나로 결정됨
- ex) g(x,a) =y
- x: input, a: action
- NFA(Non-deterministic Finite Automat)
- 하나의 state에서 하나의 symbol이 주어졌을 때, 하나의 state만 결정되는 것이 아니라, 다른 state로도 갈 수 있다.
- 노드, 심볼이 같아도 수행할 때마다 output이 달라질 수 있다.
Example: Subset-sum problem
- s={3, 8, 9, 100, ... }, k
- Optimization problem: 원소들의 합이 k를 넘지 않으면서, 가장 큰 subset은 무엇인가?
- Decision problem: 원소들의 합이 정확히 k인 subset이 존재하는가?
- subset = {3, 9}이라는 certification이 주어졌을 때, 참인지 확인(verify) -> O(n)
☆NP Example☆
- 문제: weight가 k 이하인 MST 고르기
- Verification Algorithm:
- (n-1)개의 edges 집합(T)을 certificate로 사용
- spanning tree인지 테스트 -> 모든 정점 지나는지, input에 있는 정점만 지나는 지 확인 =>O(n)
- weight가 k 이하인지 테스트 => O(m)
- 분석: 테스트하는데 O(n+m) 시간이 걸림 -> 알고리즘이 polynomial time에 작동한다.
- 즉, 주어진 certificatation에 대해 다항 시간에 verification하기 때문에 Class NP에 포함되는 문제라고 볼 수 있다.
Class NP-Complete
- NP에 속하는 모든 문제가 Q로 reduction되면, problem Q를 NP-hard라고 한다.
- 모든 NP 문제를 다항시간 내에 NP-Complete 문제로 reduction할 수 있다.
- NP-Complete은 NP, NP-hard이다.
- NP-Complete는 다음의 조건을 만족하는 decision problems(C)의 집합이다.
- C가 Class NP이어야 함
- C가 NP-hard이어야 함
- NP에 속하는 모든 문제를 다항 시간 안에 C로 변환할 수 있다.
- 즉, reduction이 다항시긴에 이뤄짐
- NP-Complete문제들은 이때까지 알려진 다항시간 알고리즘이 없다
- NP 클래스 중 어려운 문제인 NP-Complete가
- NP-Complete가 다항시간에 풀린다면, NP 클래스의 모든 문제를 다항시간에 풀 수 있다고 볼 수 있다.
- NP는 P에 속하기 때문에, 결과적으로 P=NP가 된다.
- Q가 P보다 적어도 쉽지는 않다(hard)
- ex)
- problem P: 최솟값 찾기 문제
- problem Q: sorting 문제
- P를 Q로 풀 수 있다(reduction할 수 있다)
Polynomial Reductions
- P is reducible to Q: P$≤_p$Q
- P의 input을 Q의 input으로 다항시간으로 변환
- P의 output과 Q의 output이 같다는 것을 보여야 함.
- Reducibility relation은 transitive하다. -> A$≤_p$B, B$≤_p$C이면, A$≤_p$C이다
NP-Complete Problems
- NP-Complete 조건
- Class NP: 다항시간에 verfification
- NP-hard
- P: Hamitonian-Cycle 문제
- 문제: Graph G가 주어졌을 때, 모든 정점을 한 번씩만 방문하는 simple cycle이 존재하는가?
- Q: Traveling Salesperson Problem(TSP) -> NP- Complete
- 문제: complete, weighted graph G가 주어졌을 때, 모든 정점들을 한 번씩만 방문하고, 총 cost가 k가 넘지 않는 cycle이 존재하는가?
- Class NP인가?
- 조건:
- 다항시간에 verification해야 함
- certification (path)가 주어졌을 때, simple cycle이므로 n개의 edge를 거침
- 즉, O(n) time으로 verification할 수 있기 때문에 class NP라고 할 수 있다.
- 조건:
- NP-hard인가?
- 조건:
- 다항 시간에 문제의 input을 변환할 수 있는지 보여야 함
- 출력 결과가 같음을 보여야 함
- Hamitonian-cycle 문제에서는 weight가 없는 일반 graph이기 때문에, 이를 complete-weighted graph로 변환해줘야 한다. (edge 추가, weight 추가, k 추가) -> O($n^2$)
- 즉, 다항시간에 input 변환 가능
- 다음과 같이, k가 0인 경우, weight가 0인 edge들로 이루어진 simple cycle이 존재하기 때문에, Hamitonian-cycle 문제에서도 simple cycle이 존재한다.
- 반대도 마찬가지, TSP에서 simple cycle이 없으면, Hamitonian-cycle 문제에서도 simple cyle이 존재하지 않는다.
- 조건:
SAT
- Boolean formula
- (a+b+¬d+e)(¬a+¬c)(¬b+c+d+e)
- 괄호들은 and 연산으로 연결된 것. -> (¬a+¬c)∧(¬b+c+d+e)
- a,b,c,d,e를 literal이라고 함
- iteral들이 or연산으로 되어 있는 절(¬b+c+d+e)을 clause라고 함
- 이렇게 or, and로 이루어진 형태를 Conjuctive Normal Form(CNF)라고 함
- SAT: literal에 0 또는 1을 할당해서, 이 연산의 결과 값이 true(1)인가?
- SAT은 Class NP인가?
- 주어진 certification(literal에 값 넣은 것)을 수행해보면 됨 -> O(n) time(다항시간)으로 verification 가능
- SAT는 NP-hard인가?
- 최초 NP-Complete문제인 CIRCUIT-SAT을 reduction하기 때문에, NP-hard라고 할 수 있다.
- SAT은 Class NP이면서 NP-hard이기 때문에 NP-Complete이라고 할 수 있다.
3SAT
- 모든 clause 안에 3개의 literal만 있는 경우
- 3SAT도 NP-Complete
- SAT를 reduction 함
- k-SAT에서 K가 3이상인 경우 NP-Complete이다.
- k가 2인 경우 -> 2-SAT은 다항 시간 내에 풀 수 있다 (NP hard 영역이 아님)
- 모든 NP 문제는 SAT으로 Reduction할 수 있다.
Vertex Cover
- 문제: 모든 edges를 커버하는 k개 이내의 vertices(w)이 존재하는가?
- 하나의 edge가 한 쪽 정점에만 연결되도 커버한걸로 간주
- 회색 정점: 모든 edges를 커버하는 최소 정점
- VERTEX-COVER은 Class NP이다.
- Non-deterministical하게 사이즈가 k인 subset W를 고르고, W 모든 edge를 커버하는지
- certification으로 정점들의 집합이 주어졌을 때, 각 정점들의 incident edges를 확인해서 cover할 때마다 체크하면 됨.
- VERTEX-COVER은 NP-Complete이다.
- 3SAT을 reduction한다.
- 3SAT에서 특정 변수들에 값 할당하고, 결과 체크하는 것 -> 각 정점들이 모든 edge 커버하는지 체크
- 로 변환 가능
- 3SAT을 reduction한다.
Some thoughts about P and NP
- 믿음: P는 NP의 부분집합(proper subset)일 것 이다.
- NP complete의 의미: NP-Complete 문제는 NP 중에서 가장 어려운 것들일 것이다.
- Why? NP-complete 문제를 다항시간에 풀 수 있으면, NP에 있는 모든 문제를 다항시간에 풀 수 있기 때문이다.
반응형
'Algorithm > 이론' 카테고리의 다른 글
[알고리즘] Ch6. Binary Search Trees - Red-black Tree (0) | 2020.06.12 |
---|---|
[알고리즘] CH6. Amortized Analysis - Array Doubling (1) | 2020.06.12 |
Comments