문제 하나가 무너지면 모두가 무너진다. 그것이 완전(complete)이라는 단어의 무게다.
지난 강의에서 우리는 다항 시간 환원 ≤p를 정의했다. 이 환원은 어려움을 화살표 방향으로 흘려보낸다 — A ≤p B는 “B가 적어도 A만큼 어렵다”는 뜻이다. 이 흐름의 종착점에 서 있는 문제들이 있다.
NP-완전 문제는 NP의 “꼭대기”에 박힌 못이다. NP 안에 있으면서도 NP의 어떤 문제든 자기 위로 환원받는다. 비유하자면, 한 클래스의 학생들 중 모든 시험 범위를 자기 머릿속에 다 들고 있는 학생이다 — 다른 누구의 시험 답안도 자기를 통해 풀린다.
이 정리는 NP-완전 문제가 가지는 무게를 한마디로 요약한다. SAT, CLIQUE, HAMPATH 중 어느 하나라도 다항 알고리즘이 발견되면 우리가 아는 “어려운” 문제 수천 개가 한꺼번에 풀린다. 반대로 NP-완전 문제 하나에 대해 다항 시간 하한이 증명된다면 P ≠ NP가 풀린다. 천만 달러는 이 단 하나의 문턱에 걸려 있다.
NP-완전 문제 하나가 일단 박히면, 거기서 다른 문제로 환원시키는 것만으로 새로운 NP-완전 문제가 줄지어 등장한다. 다섯 가지 대표 환원을 둘러본다. 모든 환원은 다항 시간이다.
지난 강의의 복습. 3CNF 식 ϕ에서 절 k개에 대해 그래프 G를 만든다. 각 절의 세 리터럴 자리 하나하나가 정점이 된다. 같은 절의 정점끼리는 간선을 두지 않고, 서로 다른 절의 정점 사이에는 두 리터럴이 모순(예: x와 ¬x)이 아닐 때만 간선을 둔다. ϕ가 만족 가능 ⟺ G에 k-클리크 존재. 만족시키는 대입이 절마다 한 리터럴을 참으로 만들고, 그 리터럴 정점들이 일관성 덕에 모두 연결되어 클리크가 된다.
입력 ⟨G, k⟩를 ⟨G̅, n − k⟩로 보낸다. 여기서 G̅는 G의 보색 그래프(같은 정점 집합, G에서 간선이 아니던 쌍이 G̅의 간선)이고 n = |V|.
한 줄짜리 마술처럼 보이지만, 그 안에는 “덮지 못함”과 “이웃 아님”이 보색에서 정확히 맞물린다는 조합론적 사실이 들어 있다.
이 환원은 가장 정교하다. 3CNF 식 ϕ가 변수 x1, …, xn과 절 c1, …, cm를 가진다고 하자. 그래프 G는 변수마다 “다이아몬드(diamond)”라 부르는 사다리 모양 가젯을 두고, 절마다 절 노드(clause node) 하나를 둔다.
UHAMPATH는 무방향 그래프에서의 해밀턴 경로 문제다. 방향 그래프 G의 각 정점 v를 세 정점 vin, vmid, vout으로 분해해 무방향 그래프 G′를 만든다.
“in / mid / out” 분해는 무방향성에서 사라진 방향 정보를 토폴로지로 살려내는 영리한 트릭이다. vmid는 양옆을 한 번씩만 사용해야 하므로 사실상 화살표 역할을 한다.
SUBSET-SUM의 NP-완전성은 부울 논리에서 산수로의 점프라 특히 인상적이다. 3CNF 식 ϕ에 변수 n개, 절 m개가 있다고 하자. (n + m)자리 십진수들의 집합을 만들어 합 목표 t를 정한다.
자릿수가 곧 채널이다 — 변수와 절을 서로 다른 자릿수에 가두어 두면, 자릿올림 없는 산술이 곧 부울 논리의 진리값 책정과 절 만족 검사를 동시에 수행한다. 부울에서 산수로의 다리이자, NP-완전성이 얼마나 침투력 강한지를 보여주는 사례다.
NP-완전 문제는 카프(R. Karp)의 1972년 목록에서 출발해 21세기에는 수만 개에 이른다. 왜 이렇게 빠르게 늘어나는가? 이유는 환원의 추이성(transitivity)이다.
증명은 두 다항 환원 함수의 합성이 다시 다항이라는 사실에서 곧장 따라온다. 결과적으로 어떤 새 문제 X가 NP에 속하고 NP-완전이라 알려진 문제 B에 대해 B ≤p X라는 환원만 보이면, X 또한 NP-완전이다 — 임의의 A ∈ NP에 대해 A ≤p B ≤p X이기 때문이다.
그래서 SAT 하나가 NP-완전이라고 증명된 다음(쿡-레빈 정리, 다음 강의), 그로부터 3SAT, CLIQUE, VERTEX-COVER, INDEPENDENT-SET, HAMPATH, UHAMPATH, SUBSET-SUM, KNAPSACK, GRAPH-COLORING, SET-COVER, BIN-PACKING, … 줄줄이 사탕이 풀린다. 첫 번째 도미노만 쓰러뜨리면 나머지는 거저였다.
지금까지 우리는 NP-완전 문제 하나만 손에 들어오면 환원으로 무한정 늘릴 수 있다는 사실을 보였다. 그러나 “첫 번째” NP-완전 문제는 어떻게 만들어졌는가? 그것은 환원의 사슬을 출발시킬 단단한 첫 발걸음이어야 한다.
1971년 스티븐 쿡(Stephen Cook), 그리고 거의 동시에 레오니드 레빈(Leonid Levin)이 같은 결과를 독립적으로 증명했다. SAT은 NP-완전이다. 즉, NP에 속한 임의의 언어가 SAT으로 다항 시간에 환원된다. 이 정리는 NP에 속한 언어의 정의 — 다항 시간 비결정 TM이 수락한다는 것 — 자체를 부울 식으로 “인코딩”함으로써 증명된다.
다음 강의는 이 인코딩의 디테일을 다룬다. 비결정 TM의 계산을 일종의 표(tableau)로 그리고, 그 표가 “수락하는 합법적 계산”이라는 사실을 한 줄짜리 거대한 부울 식으로 옮겨 적는 작업. 그것이 바로 NP-완전성 이론 전체의 첫 도미노다.