정확한 덮개(알고리즘 X) 계산기
0/1 행렬에서 모든 열을 정확히 한 번씩 덮는 행 집합을 크누스의 알고리즘 X로 모두 찾습니다. 남은 1이 가장 적은 열을 고르는 전략이 탐색 노드를 몇 배나 줄이는지 나란히 세어 보여 줍니다.
한 줄이 한 행입니다. 첫 줄에 열 이름을 적어도 됩니다. 열 32개·행 200개까지
정확한 덮개
1가지
열 7개를 겹치지도 빠뜨리지도 않고 덮는 방법입니다.
탐색 노드 수
찾은 해
| # | 행 수 | 고른 행 |
|---|---|---|
| 1 | 3 | R2, R4, R6 |
사용 방법
- 10/1 행렬을 한 줄에 한 행씩 넣습니다. 첫 줄에 열 이름을 적어도 됩니다.
- 2도미노 타일링 예제를 고르면 판 크기에서 행렬이 자동으로 만들어집니다.
- 3모든 정확한 덮개가 행 번호로 나옵니다.
- 4MRV로 열을 고를 때와 첫 열을 고를 때의 탐색 노드 수를 견줍니다.
- 5어떤 행으로도 덮을 수 없는 열이 있으면 따로 알려 드립니다 — 그러면 해가 있을 수 없습니다.
자주 묻는 질문
«겹쳐도 되는가»가 다릅니다. 집합덮개는 최소 개수로 덮기만 하면 되고 겹쳐도 상관없지만, 정확한 덮개는 개수를 묻지 않는 대신 모든 원소가 «정확히 한 번» 덮여야 합니다. {1,2}와 {2,3}은 {1,2,3}의 집합덮개지만 2가 두 번 덮이므로 정확한 덮개는 아닙니다.
남은 1이 가장 적은 열을 고르면(MRV) 탐색 나무가 극적으로 줄기 때문입니다. 1이 하나뿐인 열은 선택의 여지가 없어 바로 확정되고, 0개면 그 가지가 즉시 죽습니다. 무작위 행렬 300개로 재어 보면 MRV가 한 번도 지지 않고 많게는 열 배 넘게 노드를 줄입니다 — 이 계산기가 두 전략을 나란히 세는 이유입니다.
아닙니다. 알고리즘 자체는 그대로 알고리즘 X이고, DLX는 «지운 것을 되돌리기가 공짜인» 이중연결 리스트 구현 기법일 뿐입니다. 노드를 리스트에서 뺄 때 자기 자리의 포인터를 그대로 남겨 두면 되돌릴 때 그 포인터로 다시 끼워 넣을 수 있다는 것이 요점입니다. 이 계산기는 문제 크기가 작아 비트마스크로 구현했습니다.
바뀝니다. 스도쿠는 «칸 하나가 채워짐», «어느 행에 어느 숫자», «어느 열에 어느 숫자», «어느 상자에 어느 숫자» 네 종류의 열을 두고, 각 행이 «어느 칸에 어느 숫자를 넣는가» 하나가 됩니다. N퀸은 행·열이 필수 열이고 대각선은 «두 번 덮이면 안 되지만 안 덮여도 되는» 선택적 열이 되는데, 이 계산기는 필수 열만 다룹니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서만 이뤄지고, 입력값은 이 기기의 저장소에만 남습니다.
알아두면 좋은 점
- 열은 32개, 행은 200개까지 다룹니다. 비트마스크로 구현했기 때문입니다.
- 선택적 열(secondary column)은 지원하지 않습니다. 모든 열이 정확히 한 번 덮여야 합니다.
- 해가 아주 많은 문제에서는 200개까지만 찾고 멈춥니다. 탐색 노드 수는 그때까지의 값입니다.
- 무작위 행렬 1500개에서 모든 부분집합을 훑는 완전탐색과 해의 개수를 대조했고, 도미노 타일링의 알려진 완전매칭 개수(2×4=5, 3×4=11, 4×4=36, 3×6=41)와도 맞춰 보았습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.