금지 된 가장자리의 각 하위 집합 S에 대해 얼마나 많은 해밀턴 사이클이 있는지, S의 모든 에지를 사용하는지 알아 보겠습니다.이 하위 작업을 해결하면 inclusion-exclusion formula으로 문제를 해결할 수 있습니다.
이제 하위 작업을 어떻게 해결할 수 있습니까? S의 모든 모서리를 그려 봅시다. degree가 2보다 큰 버텍스가 존재한다면 분명히 사이클을 완료 할 수없고 대답은 0입니다. 그렇지 않으면 그래프가 연결된 구성 요소로 나뉩니다. 각 구성 요소는 하나의 정점, 사이클 또는 단순 경로입니다.
주기가 있으면 모든 꼭지점을 통과해야합니다. 그렇지 않으면 해밀턴 순환을 완료 할 수 없습니다. 이 경우, 응답이 2 인 (싸이클 2 개 방향으로 이송 될 수있다.) 그렇지 않으면, 응답은 C 경로 및 K 단독 정점이 때, 나머지 경우는 0
이다. 해밀턴 사이클을 완료하려면 각 경로의 방향 (2^ 방법)을 선택하고 구성 요소의 순서를 선택해야합니다. c + k 구성 요소가 있으므로 (c + k)로 다시 정렬 할 수 있습니다. 방법. 그러나 우리는 순환에 관심이 있습니다. 그래서 우리는 순환 이동에 의해 서로 차례가되는 순서를 구별하지 않습니다. (So (1,2,3), (2,3,1)과 (3,1,2)는 동일합니다.) 대답은 이동 횟수 (c + k)로 나누어야 함을 의미합니다. 따라서 서브 타스크에 대한 답은 2^c (c + k-1)입니다!.
이 아이디어는 bmerry의 솔루션 (매우 깨끗한 코드, btw)에서 구현됩니다.
에 의해 "Algos 소개"의 NP 완전 문제 장을 왜 bmerry의 솔루션의 코드의 끝에 2분의 9,901에 의해 곱셈이 확인? "(x * w/2) mod w"는 무엇을 제공합니까? –