집합 커버(그리디 vs 최적) 계산기
덮어야 할 원소와 고를 수 있는 부분집합을 넣으면 그리디 해와 전수 탐색으로 얻은 최적 해를 나란히 냅니다. 그리디가 몇 배 손해인지, 이론적 상한 1+ln n 안에 드는지 함께 보여 줍니다.
한 줄에 하나씩. «이름: 원소 원소»처럼 이름을 붙여도 되고 원소만 적어도 됩니다
비워 두면 위 부분집합들의 합집합을 전체집합으로 봅니다
그리디가 최적보다 많이 골랐습니다
그리디 3개 · 최적 2개
원소 6개를 부분집합 3개 가운데서 덮었습니다 · 근사비 1.5배
그리디 — 아직 안 덮인 것을 가장 많이 덮는 것부터
| 차례 | 고른 것 | 새로 덮은 원소 | 남은 개수 |
|---|---|---|---|
| 1 | A | 1 2 3 4 (4개) | 2 |
| 2 | B | 5 (1개) | 1 |
| 3 | C | 6 (1개) | 0 |
부분집합 목록
| 이름 | 원소 | 크기 | 고름 |
|---|---|---|---|
| A | 1 2 3 4 | 4 | 그리디 |
| B | 1 2 5 | 3 | 그리디 · 최적 |
| C | 3 4 6 | 3 | 그리디 · 최적 |
계산 방법
- 1고를 수 있는 부분집합을 한 줄에 하나씩 적습니다. «A: 1 2 3»처럼 이름을 붙여도 됩니다.
- 2덮어야 할 원소를 따로 정하고 싶으면 아래 칸에 적습니다. 비워 두면 합집합을 씁니다.
- 3그리디가 어떤 차례로 골랐는지, 최적은 무엇이었는지 표에서 비교합니다.
- 4근사비가 이론적 상한 1+ln n 안에 드는지 확인합니다.
자주 묻는 질문
덮어야 할 원소 전부를 가장 적은 개수의 부분집합으로 덮는 문제입니다. 예를 들어 모든 과목을 맡을 선생님을 최소 인원으로 뽑거나, 모든 지역에 닿도록 기지국을 최소 개수만 세우는 일이 그대로 이 문제입니다. NP-난해로 알려져 있어 다항시간에 최적을 내는 방법은 P = NP가 아닌 한 없습니다.
있습니다. 이 계산기의 기본 예가 그것입니다. U = {1,…,6}에 A = {1,2,3,4}, B = {1,2,5}, C = {3,4,6}이 있으면 그리디는 가장 큰 A를 먼저 집고 남은 5와 6 때문에 B와 C를 더 골라 3개가 듭니다. 그런데 A를 버리고 B·C만 고르면 2개로 끝납니다. 한 걸음 앞만 보는 판단이 나중의 선택지를 망친 것입니다.
최적의 H(k) ≤ 1 + ln n 배를 넘지 않습니다. n은 원소 수, k는 가장 큰 부분집합의 크기, H는 조화수입니다. 매 단계에서 남은 원소의 최소 1/OPT만큼을 덮기 때문에 이 보장이 성립합니다. 원소가 100개라면 최악이라도 최적의 5.6배 안입니다.
사실상 없습니다. P ≠ NP를 가정하면 (1−ε)·ln n보다 나은 근사비를 다항시간에 보장하는 알고리즘은 존재할 수 없다는 것이 증명되어 있습니다. 허술해 보이는 그리디가 이 문제에서는 이론적 한계에 닿아 있는 셈입니다.
부분집합 20개까지 전수 탐색으로 구합니다. 고르는 방법이 2^m가지라 20개면 약 105만 가지지만 40개면 1조 가지가 되어 브라우저에서 끝나지 않습니다. 20개를 넘으면 그리디 해만 내고 최적은 «접었다»고 표시합니다.
앞에 적힌 것을 고릅니다. 동점을 무작위로 깨면 새로고침할 때마다 답이 달라져 계산기 노릇을 못 하기 때문입니다. 그래서 줄 순서를 바꿔 넣으면 그리디의 답이 달라질 수 있는데, 그것 자체가 그리디의 성질입니다. 최적 해는 순서와 무관합니다.
전체를 덮을 수 없다고 알려 주고 그 원소를 짚어 줍니다. 그럴 때는 그리디도 최적도 «완전한 덮개»를 낼 수 없으므로, 덮을 수 있는 데까지 고른 결과만 보여 줍니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지고 넣은 값은 이 기기에만 남습니다.
알아두면 좋은 점
- 최적 해는 부분집합 20개까지만 구합니다. 그 위로는 2^m이 너무 커져 그리디 해만 냅니다.
- 원소는 30개, 부분집합은 40개까지 받습니다. 비트마스크를 32비트 정수 하나로 다루기 때문입니다.
- 부분집합의 무게(비용)는 다루지 않습니다. 개수만 최소로 하는 문제입니다.
- 동점은 앞에 적힌 것을 고릅니다. 줄 순서에 따라 그리디의 답이 달라질 수 있습니다.
- 전체집합 밖의 원소가 부분집합에 들어 있으면 셈에서 뺍니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.