나는 복잡한 과정을 겪고 있으며 NPC 문제 사이의 감소를 생각해내는 데 어려움을 겪고 있습니다. 문제 사이의 감소를 어떻게 찾을 수 있습니까? 사용할 수있는 일반적인 트릭이 있습니까? 문제가 NPC임을 증명하도록 요청하는 문제에 어떻게 접근해야합니까?
나는 복잡한 과정을 겪고 있으며 NPC 문제 사이의 감소를 생각해내는 데 어려움을 겪고 있습니다. 문제 사이의 감소를 어떻게 찾을 수 있습니까? 사용할 수있는 일반적인 트릭이 있습니까? 문제가 NPC임을 증명하도록 요청하는 문제에 어떻게 접근해야합니까?
답변:
마법의 총알이 없습니다. NP 경도 증거는 어렵다. 그러나 이러한 모든 증명을위한 일반적인 프레임 워크가 있습니다. NP-경도 증거와 투쟁에 대해 혼동 많은 학생들이 무엇을 그들이 분명히 불가능 파악 할 수있는 일을 할 생각하고 어떻게 그것을 할 수 있습니다. 그래서 여기에 어떤 문제가 NP-하드를 입증 할 수 있습니다.
첫째, 숙제 만하지 않는 한 문제를 줄이기 위해 어떤 NP-hard 문제를 결정해야합니다 . 이것은 주로 "냄새"의 문제입니다. 문제 설명의 아무 곳에 나 숫자 3이 나타나면 또는 3 C o l o r 또는 3 P a r t i t i o n에서 줄이십시오 . (예, 진지합니다.) 문제에 최적의 하위 시퀀스 또는 순열 또는 경로를 찾는 것이 포함 된 경우 H a m i l t o n i a 또는 H a m i l t o n i a n P a t h . 문제가 특정 속성을 가진 가장 작은 하위 집합을 요구하면 C l i q u e ; 특정 속성을 가진 가장 큰 하위 집합을 요청하는 경우 I n d e p e n d e n t S e t를 시도하십시오. 비행기에서 무언가를하는 것이 문제라면, P를 시도하십시오 또는 P 패 N R T S P . 등등. 문제는 아무것도하지 같은 "냄새", 않으면 3 S T 또는 C I R C 유 전 t S T는 아마 당신의 최선의 방법입니다.
둘째, 실제 감소. 문제 X (내가 알고있는 NP 문제)를 문제 Y로 줄이려면 (증명하려는 것은 NP 하드 임), X 의 임의 인스턴스를 Y의 유효한 인스턴스로 변환하는 알고리즘을 설명해야합니다. 축소 알고리즘은 X- 인스턴스의 각 "기능"에 대해 특정 작업을 수행해야하며, 각 "기능"에 대한 출력 부분은 일반적으로 가젯 이라고합니다 .
그러나 기능은 무엇입니까? 문제 X에 따라 다릅니다. 예를 들면 다음과 같습니다.
가제트의 실제 형식은 감소 하는 문제 Y에 따라 다릅니다 . 예를 들어 그래프에 대한 문제를 줄이면 가제트는 작은 하위 그래프가됩니다. Wikipedia 기사를 참조하십시오. 예약 관련 문제로 줄어드는 경우 각 가젯은 예약 할 작업 집합이됩니다. Mario 에 대한 문제로 줄이면 각 가젯은 일련의 블록과 벽돌 및 Koopas가됩니다.
두 문제에 같은 종류의 물체가 관련된 경우 혼동 될 수 있습니다. 예를 들어 X와 Y가 모두 그래프에 문제가있는 경우 알고리즘은 하나의 그래프 (X 인스턴스)를 다른 그래프 (Y 인스턴스)로 변환합니다. 이 두 그래프를 혼동하지 않도록 현명하게 표기법을 선택하십시오. 또한 여러 색상의 잉크를 사용하는 것이 좋습니다.
마지막으로 축소 알고리즘은 세 가지 속성을 충족해야합니다.
다항식 시간으로 실행됩니다. (일반적으로 쉽습니다.)
축소 알고리즘 에 X 의 양의 인스턴스가 입력으로 주어지면 Y 의 양의 인스턴스가 출력으로 생성됩니다.
감소 알고리즘이 출력으로 Y 의 양의 인스턴스를 생성하는 경우 입력으로 X 의 양의 인스턴스 가 제공되어야합니다 .
여기에는 중요한 미묘함이 있습니다. 귀하의 감소 알고리즘은, 한 방향으로 작동 에서 X의 인스턴스 에 Y의 인스턴스 만 알고리즘은 올바른 증명하는 두 방향의 변화에 대한 추론을 필요로한다. 또한 감소 알고리즘 은 주어진 X 인스턴스가 양수인지 음수인지를 알 수 없으므로 다항식 시간에 NP-hard 문제를 해결해야합니다!
그게 뭐야 . 방법은 단지 연습을 함께 제공됩니다.
JeffE는 가장 일반적인 전략을 간략하게 설명합니다. 많은 NP- 완료 문제를 알고 매우 적합한 문제를 찾고 쉽게 줄일 수 있습니다.
또 다른 유효한 전략은 항상 3SAT (또는 다른 문제)를 사용하는 것입니다. 이것은 약간의 감소가 더 복잡 할 수 있지만 거꾸로 당신이 가지고있다 많은 문제의 다른 유형에 satifiability을 표현하는 경험을. 따라서 훌륭한 감축 파트너 (데드 엔드 포함)를 찾는 시간을 절약하고 더 어려운 경우에도 경험을 통해 신속하게 감축을 수행 할 수 있기를 바랍니다.
이 접근법에는 약간의 미학적 아름다움도있다 : (3) SAT는 NP- 완전성이 (거의) 직접적으로 입증 된 몇 안되는 문제 중 하나이다. 따라서 해당 증명에만 의존하면 "감소 트리"를 평평하게 유지하여 긴 줄임 체인을 피할 수 있습니다.