직접 SAT에서 3-SAT로 감소


18

여기서 목표는 가장 적은 수의 절과 변수를 사용하여 임의의 SAT 문제를 다항식 시간으로 3-SAT로 줄이는 것입니다. 내 질문은 호기심에 의해 동기 부여됩니다. 덜 공식적으로 저는 "SAT에서 3-SAT로 '가장 자연적인'감축이 무엇입니까?"

이제 교과서에서 항상 본 축소는 다음과 같습니다.

  1. 먼저 SAT를 예로 들어 Cook-Levin 정리를 적용하여 SAT를 회로 SAT로 줄이십시오.

  2. 그런 다음 게이트를 절로 교체하여 회로 SAT를 3-SAT로 표준 축소하여 작업을 완료합니다.

이것이 작동하는 동안, 결과적인 3-SAT 조항은 Cook-Levin 정리의 초기 적용으로 인해 시작한 SAT 조항과 거의 유사하게 보이지 않습니다.

중간 회로 단계를 건너 뛰고 3-SAT로 직접 이동하여 축소를보다 직접 수행하는 방법을 누구나 볼 수 있습니까? 나는 n-SAT의 특별한 경우를 직접 줄이는 것에 만족할 것입니다.

(나는 계산 시간과 출력 크기 사이에 약간의 상충 관계가 있다고 생각합니다. P = NP가 아니라면 불행히도 용납 할 수는 없지만 해결책은 SAT 문제를 해결 한 다음 사소한 것입니다. -SAT 인스턴스 ...)

편집 : 래칫의 대답에 따르면 n-SAT 로의 축소는 다소 사소한 것입니다 (그리고 게시하기 전에 조금 더 신중하게 생각해야 함). 누군가가보다 일반적인 상황에 대한 답을 알고있는 경우이 질문을 조금 열어두고 있습니다. 그렇지 않으면 간단히 래칫의 대답을 받아들입니다.


7
(1)에서 Cook-Levin의 사용을 이해하지 못합니다. boolean-formula-SAT는 이미 회로의 그래프 구조가 트리가되는 회로 -SAT의 특별한 경우가 아닙니까?
Luca Trevisan

답변:


28

각 SAT 절에는 1, 2, 3 개 이상의 변수가 있습니다. 3 개의 변수 절을 문제없이 복사 할 수 있습니다

1, 2 절 변수 {a1}{a1,a2}확장 가능 {a1,a1,a1}하고 {a1,a2,a1}, 각각.

3 개 이상의 변수와 절 {a1,a2,a3,a4,a5}을 확장 할 수 {a1,a2,s1}{!s1,a3,s2}{!s2,a4,a5}s1s2원래 절 변수에 해당하는 값이되는 새로운 변수에 의존 할 것이다


6
꼼꼼한. SAT 입력에 "절"이 있어야한다고 누가 말합니까?
Jeffε

6
이 질문은 "n-SAT의 특별한 경우를 직접 줄이면 기뻐할 것"이라고 말했다.
Ryan Williams

그렇습니다. 마지막 줄을 추가하기 전에 좀 더 신중하게 생각해야했지만 더 일반적인 질문에 대한 답변을 얻지 못하면 이것을 받아 들일 것입니다.
Mikola

1
@Mikola 어쩌면 Tseitin 또는 Plaisted-Greenbaum 변환으로 3CNF를 얻을 수 있습니까? (나는 확실히 질문을 완전히 이해하고 있는지 확실하지 않습니다 :))
Mikolas

라 체트가 언급 한 k = 1의 확장이 어떤 책에도 나타나지 않는지 궁금합니다 (적어도 지금까지 나왔던 것). 제 생각에는 리터럴은 {a1, a1, a1}처럼 확장 될 수없는 'a1이 아님'일 수 있습니다. 반면, { 'not a1', 'not a1', 'not a1]}은 원본 sat에 부정 리터럴이 포함되어 있는지 여부를 식별하기위한 다른 논리가 필요하므로 수행 할 수 없습니다. 이것이 Michael R. Garey와 David S. Johnson을 포함한 모든 저자가 'Carlos Linares López'가 게시 한 다른 확장 프로그램을 사용한 이유 일 것입니다.
KGhatak


19

k-SAT에서 3-SAT로 축소해야하는 경우 래칫의 대답이 잘 작동합니다.

일반 명제 식에서 CNF (및 3-SAT) 로 직접 축소 하려면 , 적어도 "SAT 솔버 관점"에서-귀하의 질문에 대한 답 은 '가장 자연스러운'축소 란 무엇입니까? ? , '자연적인'감소는 없습니다 !.

2 장의 결론 - (매우 좋은) 책의 "CNF 인코딩" : 만족스러운 핸드북 :

...
CNF에서 주어진 문제를 모델링하는 방법에는 여러 가지가 있으며 그 중에서 선택하기위한 지침은 거의 없습니다. 변수로 모델링 할 문제 특징을 선택하는 경우가 종종 있으며, 일부는 발견해야 할 상당한 생각이 필요할 수 있습니다. Tseitin 인코딩은 컴팩트하고 기계화 가능하지만 실제로 항상 최상의 모델로 이어지는 것은 아니며 일부 하위 수식이 더 잘 확장 될 수 있습니다. 일부 조항은 극성을 고려하여 생략 될 수 있으며 내포 된 대칭 파괴 또는 차단 된 조항이 추가 될 수 있습니다. 다른 인코딩은 크기 또는 솔루션 밀도와 같은 다른 장단점을 가질 수 있으며, 하나의 SAT 솔버에 대한 장점은 다른 것에 대한 단점 일 수 있습니다. 간단히 말해서 CNF 모델링은 예술이며 직관과 실험을 통해 종종 진행해야합니다.
...

가장 알려진 알고리즘은 Tseitin 알고리즘입니다 (G. Tseitin. 명제 미적분학의 파생 복잡성. 추론 자동화 : 계산 논리의 고전 논문, 2 : 466–483, 1983. Springer-Verlag.)

CNF 엔코딩에 대한 좋은 소개는 제안 된 책 핸드북 o 만족도를 읽으십시오 . 최근 작품을 읽고 참고 문헌을 볼 수도 있습니다. 예를 들면 다음과 같습니다.

  • 잭슨과 D. 셰리 던 부울 회로에 대한 절 형태 변환. HH Hoos와 DG Mitchell의 편집자, 만족도 테스트 이론 및 응용 프로그램, 7 차 국제 컨퍼런스, SAT 2004 , LNCS 3542 권, 183–198 페이지. Springer, 2004. (구간의 수를 줄이는 것을 목표로 함)
  • P. Manolios, D. Vroon, 효율적인 회로 -CNF 변환. 에 이론과 Satisfiability 시험의 응용 -. 2007 (2007) SAT, PP 4-9

15

Ratchel과 유사하지만 다소 다른 솔루션을 게시하십시오. 이것은 "알고리즘 디자인 매뉴얼" 2 판 9 장에서 직접 가져온 것입니다. Steven Skiena의

  • 절에 리터럴 C = {z1}이 하나만 있으면 두 개의 새 변수 v1 및 v2와 네 개의 새 3 리터럴 절 ({v1, v2, z1}, {! v1, v2, z1}, {v1,!)을 작성하십시오. v2, z1} 및 {! v1,! v2, z1}. z4 = T 인 경우이 4 가지 조항을 모두 동시에 만족시킬 수있는 유일한 방법은 원래 C도 만족한다는 의미입니다.
  • 절에 두 개의 리터럴 C = {z1, z2}가있는 경우 하나의 새 변수 v1과 두 개의 새 절 ({v1, z1, z2} 및 {! v1, z1, z2})을 작성하십시오. 이 절을 모두 만족시키는 유일한 방법은 z1 및 z2 중 하나 이상이 true이므로 C를 만족시키는 것입니다.
  • 절에 세 개의 리터럴 C = {z1, z2, z3}가있는 경우 C를 3-SAT 인스턴스에 그대로 복사하면됩니다.
  • 절에 3 개 이상의 리터럴 C = {z1, z2, ..., zn}이 있으면 체인에 n-3 개의 새 변수와 n-2 개의 새 절을 작성하십시오. 여기서 2 <= j <= n-2 , Cij = {v1, j-1, zj + 1,! vi, j}, Ci1 = {z1, z2,! vi, 1} 및 Ci, n-2 = {vi, n-3, zn-1, zn}

1
@TayfunPay이 솔루션이 더 정확한 이유를 설명 할 수 있습니까? 중복 변수가 더 자연스러워 보였고 내가 본 3SAT의 정의를 위반하지 않습니다. 이 솔루션을 개선하는 기술이 있습니까?
crockeea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.