최대 이익이 500인 아이템 집합 A가 주어졌을 때,
그것이 최대(maximum)인지 확인하려면 모든 조합(2ⁿ)을 비교해야 하므로,
다항 시간 확인 불가능 → Optimization ver는 NP 아님.
하지만 Decision ver:
“집합 A의 이익이 500을 넘는가?”는
→ O(n) 시간 안에 계산 가능 → NP 맞음
(이건 단순히 합계를 계산하고 비교하면 되므로 빠름)
{i1, i3, i4}라는 집합이 주어지고 이게 500 넘냐? → 합만 보면 되므로 O(n) 검증 가능| 구분 | 설명 |
|---|---|
| Deterministic | 매 단계마다 한 가지 선택만 가능. 우리가 쓰는 일반 컴퓨터. |
| Nondeterministic | 동시에 여러 선택을 시도하는 이론적 컴퓨터. 마치 "마법" 같은 가정. |
Nondeterministic Guess (단계 1)
Deterministic Verification (단계 2)
💥 “P = NP인가?”는 컴퓨터 과학에서 가장 유명한 미해결 문제 중 하나

👉 즉, 다른 NP 문제로부터 다항 시간 내에 변환(transform) 가능하고, 그 자체도 NP에 속해야 함.
“만약 CNF 문제(CNF-SAT)가 P에 속한다면, P = NP이다.”
CNF(합동 정규형): 여러 개의 OR 조건이 AND로 연결된 불 논리식 예:
(x1 ∨ x2) ∧ (x2 ∨ ¬x3)
예시 문제:
x1 = T, x2 = F, x3 = F일 때 식이 참(True)이 되는지 판단.이 문제는 Decision Problem (예/아니오로 답할 수 있음)
❓ "CNF에서 변수 개수가 100만 개면 어떻게 푸나?"
답:
"어려운 문제를 NP-Complete로 증명할 수 있다."
즉, 어떤 문제가 NP-Complete임을 보이기 위해 이미 알려진 NP-C 문제로부터 다항시간 변환(reduction)하면 됨.
“주어진 어려운 문제를 NP-C로 증명할 수 있다.”
SAT ⇒ (나의 문제)A가 B로 다항 시간 안에 변환 가능하면
A =>p B라고 씀.
A =>p B면,어떤 문제 A를 풀고 싶은데, B를 푸는 알고리즘이 있다면?
이 문제도 NP-C임을 증명하려면:
이미 존재함! ✅
TSP.DP가 NP-Complete인지 보이기 위해:
➤ (조건)
위 조건이 만족되면 TSP.DP도 NP-Complete임.
| 내용 | 설명 |
|---|---|
| NP-C 증명법 | 이미 NP-C인 문제로부터 변환 가능함을 보이면 됨 |
| 핵심 논리 | "A ⇒p B" 이고 B가 P면, A도 P다 |
| 의미 | 많은 NP-C 문제들이 서로 변환 가능 → 하나만 P가 되어도 모두 해결 가능 |
| 예시 | SAT ⇒p HC.DP ⇒p TSP.DP 등 |
다음은 이미지에 있는 NP-Complete 예시 및 변환 기법에 대한 전체 설명입니다:

조건:
변환 예시:


방법:
어떤 문제 A가 NP-Hard 라고 불리려면:
B를 다항 시간 내 A로 변환(환원)할 수 있어야 함.B ⇒p A, 즉 다항시간 환원 가능)즉, A가 풀리면 B도 풀릴 수 있으므로 A는 적어도 B만큼 어렵다는 의미입니다.
Optimization version (최적화 문제)
: “모든 도시를 한 번씩 방문하고 다시 출발점으로 돌아오는 최단 경로는?”
→ ❌ NP가 아님, ❌ NP-Complete도 아님
→ ✅ NP-Hard 문제
Decision version (결정 문제)
: “100개 도시를 1시간 이내에 도는 경로가 있나?”
→ ✅ NP에 속함, ✅ NP-Complete임
📌 정리
| 구분 | NP-Complete | NP-Hard |
|---|---|---|
| NP 내부 포함? | ✅ Yes | ❌ No |
| 해답 검증 쉬움? | ✅ Yes (P-time 검증) | ❌ 어렵거나 불가능 |
| 예시 | SAT, Clique (결정문제) | TSP (최적화문제), Knapsack(최적화) |
given solution이 "100개 도시를 1시간 안에 도는 경로"인지?
이 경로가 최소 거리라고 어떻게 증명할 수 있나?
O(n!) 시간 소요Knapsack 문제는 최적화 문제(Optimization ver)가 기본이기 때문에:
해를 빠르게 검증하려면 O(2^n) 경우의 수 다 비교해야 함