계산복잡도 이론은 특정 알고리즘의 동작을 자세히 설명하기보다, 문제 자체가 필요한 계산 자원을 기준으로 얼마나 어려운지를 비교한다. 이 글에서는 P와 NP의 정의, “푸는 것”과 “검증하는 것”의 차이, 그리고 Reduction을 중심으로 정리한다.
Problem을 형식화하는 이유
같은 주제라도 질문의 형태에 따라 문제의 종류가 달라진다.
- Decision Problem: 답이 Yes 또는 No이다.
- Search Problem: 조건을 만족하는 실제 해를 찾는다.
- Optimization Problem: 가능한 해 중 최적값을 찾는다.
Hamiltonian Cycle을 예로 들면 다음과 같다.
- Decision: 주어진 Graph에 모든 Vertex를 정확히 한 번 방문하고 돌아오는 cycle이 존재하는가?
- Search: 그러한 cycle을 실제로 찾아라.
- Optimization과 결합된 문제: 비용이 있는 Graph에서 조건을 만족하는 가장 짧은 tour를 찾아라.
복잡도 class는 보통 Decision Problem을 기준으로 정의한다. Yes/No 형태는 문제 사이의 비교와 Reduction을 명확하게 만들기 때문이다.
입력 크기와 Polynomial Time
알고리즘의 실행시간은 실제 초 단위가 아니라 입력 크기 에 따른 증가율로 비교한다. 어떤 상수 에 대해 실행시간이
이면 polynomial time이라고 한다. , , 등은 polynomial time이고, 이나 은 일반적으로 polynomial time이 아니다.
입력 크기를 정확히 정해야 한다. 정수 의 입력 길이는 보통 값 자체가 아니라 이진수로 표현하는 데 필요한 bit 수인 이다. 값의 크기와 입력 길이를 혼동하면 complexity를 잘못 판단할 수 있다.
P Class
P는 deterministic algorithm으로 polynomial time 안에 해결할 수 있는 Decision Problem의 집합이다.
정렬, 최단경로, primality test처럼 다양한 문제가 polynomial-time algorithm을 가진다. 이 글에서는 개별 알고리즘의 세부 절차보다 P가 “입력 크기에 대해 효율적으로 해결 가능한 문제”를 형식화한다는 점이 중요하다.
NP Class
NP는 Yes instance에 대해 polynomial size의 certificate가 존재하고, 그 certificate의 정확성을 polynomial time에 검증할 수 있는 Decision Problem의 집합이다.
Subset Sum의 Decision Version을 생각하자.
문제. 정수 집합과 목표값 가 주어졌을 때 합이 인 부분집합이 존재하는가?
누군가 부분집합을 certificate로 주면 선택된 수를 더하고 와 같은지만 확인하면 된다. 올바른 부분집합을 처음부터 찾는 것은 어려울 수 있지만, 주어진 해를 확인하는 것은 빠르다.
NP의 N은 “not polynomial”이 아니라 nondeterministic polynomial time에서 유래한다. 실용적으로는 certificate verification 정의가 이해하기 쉽다.
P와 NP의 관계
P의 문제는 polynomial time에 직접 풀 수 있으므로, 제시된 해를 다시 계산하거나 확인할 수도 있다. 따라서
이다.
핵심 미해결 문제는
이다. 즉 polynomial time에 검증 가능한 모든 문제를 polynomial time에 해결할 수 있는지는 알려져 있지 않다.
“아직 빠른 알고리즘을 찾지 못했다”는 사실만으로 어떤 문제가 P에 없다고 증명할 수는 없다. 문제의 본질적인 하한을 보이는 것은 매우 어렵다.
Polynomial-Time Reduction
문제 를 문제 로 polynomial time에 변환하여 의 해답으로 를 해결할 수 있으면
라고 쓴다.
Reduction의 방향을 해석할 때는 다음 문장이 중요하다.
를 풀 수 있으면 도 풀 수 있다.
따라서 는 적어도 만큼 어렵다. 반대로 가 어렵다는 사실만으로 도 어렵다고 말하려면 Reduction의 방향이 올바른지 확인해야 한다.
Polynomial-Time Reduction은 단순히 입력을 바꾸는 것이 아니라 Yes instance와 No instance를 보존해야 한다.
여기서 변환 는 polynomial time에 계산 가능해야 한다.
NP-Hard와 NP-Complete
문제 가 NP-Hard라는 것은 모든 NP 문제 가 로 polynomial-time reducible하다는 뜻이다.
NP-Hard 문제는 반드시 Decision Problem일 필요도 없고 NP 안에 있을 필요도 없다.
NP-Complete 문제는 다음 두 조건을 모두 만족한다.
- 문제 자체가 NP에 속한다.
- 모든 NP 문제가 그 문제로 polynomial-time reduction된다.
따라서
이다.
NP-Complete 문제 하나라도 P에 속한다면 모든 NP 문제가 P에 속하므로 가 된다.
대표적인 예
3-SAT
여러 Boolean variable의 clause들이 주어졌을 때 모든 clause를 참으로 만드는 assignment가 존재하는지를 묻는다. Assignment가 certificate로 주어지면 각 clause를 확인하면 되므로 NP에 속한다. 3-SAT는 대표적인 NP-Complete 문제이다.
Hamiltonian Cycle
Graph에서 모든 Vertex를 정확히 한 번 방문하고 시작점으로 돌아오는 cycle의 존재 여부를 묻는 Decision Problem은 NP-Complete이다. Cycle이 주어지면 모든 Vertex가 한 번씩 등장하는지와 연속 Vertex 사이에 Edge가 있는지를 polynomial time에 확인할 수 있다.
Travelling Salesperson Problem
거리 한계 이하의 tour가 존재하는지를 묻는 Decision Version은 NP-Complete이다. 가장 짧은 tour 자체를 찾는 Optimization Version은 NP-Hard로 분류한다. Decision과 Optimization을 구분해야 한다.
Factorization
정수의 비자명한 인수를 찾거나 특정 범위의 인수가 존재하는지 묻는 문제는 NP와 관련되지만, 일반적인 integer factorization이 NP-Complete라고 알려진 것은 아니다. “현재 빠른 고전 알고리즘이 알려지지 않았다”와 “NP-Complete로 증명되었다”는 서로 다른 주장이다.
Reduction을 읽는 방법
Reduction 증명을 볼 때 다음을 확인한다.
- 원래 문제의 임의의 입력을 받았는가?
- 새 입력을 polynomial time에 만들 수 있는가?
- 원래 입력이 Yes일 때 새 입력도 Yes인가?
- 새 입력이 Yes일 때 원래 입력도 Yes인가?
- 입력 크기가 polynomial보다 빠르게 증가하지 않는가?
Reduction은 문제를 실제로 효율적으로 푸는 알고리즘이 아니라, 한 문제를 풀 수 있다는 가정 아래 다른 문제를 풀 수 있음을 보여주는 난이도 비교 도구이다.
정리
P는 polynomial time에 해결 가능한 Decision Problem, NP는 Yes certificate를 polynomial time에 검증할 수 있는 Decision Problem의 집합이다. 이지만 equality 여부는 알려져 있지 않다. Polynomial-Time Reduction은 문제의 난이도를 비교하고, NP-Complete는 NP 안에서 모든 NP 문제만큼 어려운 문제를 뜻한다. 이 글은 계산 모델 자체보다 class와 reduction의 의미에 집중한다.
연습 문제
- 어떤 Decision Problem이 P에 속하면 NP에도 속하는 이유를 설명한다.
- 이고 일 때 임을 보인다.
- TSP Decision Version과 Optimization Version의 차이를 설명한다.
풀이
1번
P에 속하는 문제는 입력만으로 polynomial time에 정답을 계산할 수 있다. 따라서 certificate가 주어졌을 때도 정답을 다시 계산해 certificate 또는 Yes 여부를 polynomial time에 확인할 수 있다. 그러므로 모든 P 문제는 NP에 속한다.
2번
입력 가 주어지면 먼저 polynomial-time reduction 를 계산하여 를 만든다. 그다음 P에 속하는 의 polynomial-time algorithm을 실행한다. Polynomial들의 합성과 합은 여전히 polynomial이므로 도 polynomial time에 해결된다.
3번
Decision Version은 “길이가 이하인 tour가 존재하는가?”처럼 Yes/No를 묻는다. Optimization Version은 가능한 모든 tour 중 최소 길이의 tour를 실제로 찾는다. Decision Version은 NP-Complete이고, Optimization Version은 NP-Hard로 다룬다.