DNF에서 CNF 로의 전환 : 쉬움 또는 어려움


10

스레드와 관련하여 CNF에서 DNF 로의 변환이 NP-Hard (및 관련 Math 스레드 ) 임을 증명하는 경우 :

DNF에서 CNF까지의 다른 방향은 어떻습니까? 쉽지 않습니까?

이 백서의 2 페이지에서 " CNF 표현에서 DNF 표현으로 또는 그 반대로 변환 할 때 최대 크기의 폭발에 관심이 있습니다 "라고 말하면 두 방향 모두 똑같이 어렵다고 암시하는 것 같습니다 .

그러나 DNF-SAT는 P 이고 CNF-SAT는 NP -complete입니다. 그래서 DNF 표현 주어진 ,이 생길 수 있어야 equisatisfiable CNF 표현 는 길이의 길이 다항식 . 그리고 변환은 시간으로 수행 할 수 있습니다. 이 올바른지?ϕ 2 ϕ 1 ϕ 1ϕ 2ϕ1ϕ2ϕ1ϕ1ϕ2

편집 : 동등한 것으로 변경 되었습니다 (즉, 에서 추가 변수가 허용됨 ).ϕ2


원래 공식이 다항식 시간 인 경우 정확히 만족할 수있는 모든 공식에서 CNF로 이동할 수 있습니다. 이것이 CNF-SAT가 NP-complete 인 이유입니다. 모든 SAT 인스턴스 (NP 완료 문제)는 다항식 시간에 CNF-SAT로 줄일 수 있습니다. 만족도를 유지하는 것뿐만 아니라 항상 급격한 폭발을 일으킨다는 것을 정확하게 번역한다고 생각합니다.하지만 확실히 말할 수는 없습니다.
Jake

en.wikipedia.org/wiki/Tseitin_transformation을 참조하십시오 . 기본적으로 보조 변수의 도입을 허용하면 폴리 타임으로이 변환을 수행 할 수 있습니다 (수식의 크기를 최대 선형으로 증가).
jschnei

변환에 새 변수를 도입 할 것인지 또는 변환 된 수식이 동일한 변수 세트를 참조해야하는지 (새 변수 없음)를 결정해야합니다. 이것은 대답에 극적인 영향을 미치는 미묘한 점입니다. 그래서, 당신은 어느 것에 대해 묻고 싶습니까?
DW

@Jake CNF-SAT는 NP-complete 이므로 모든 공식에서 동등한 CNF로 이동할 수 있습니다 . CNF-SAT가 NP-complete라는 사실은 "왜"가 아닙니다. CNF-SAT가 NP-complete라는 일반적인 증거는 임의의 공식을 CNF로 변환하는 것을 포함하지 않습니다. 오히려 튜링 기계를 CNF 공식으로 변환합니다.
David Richerby

DW와 다른 사람들에게-나는 등화 가능성 을 염두에 두었습니다. 이런 의미에서, 등화 가능성은 단지이 경우에 다른 부울 공식으로 축소 된 것 같습니다.
Martin Seymour

답변:


14

추가 변수를 기꺼이 도입하려는 경우 Tseitin 변환 을 사용하여 다항식 시간으로 DNF에서 CNF 형식으로 변환 할 수 있습니다 . 결과 CNF 공식은 원래 DNF 공식과 동등합니다. CNF 공식은 원래 DNF 공식이 만족할 수있는 경우에만 만족할 수 있습니다. https://en.wikipedia.org/wiki/Conjunctive_normal_form#Conversion_into_CNF참조하십시오 .

추가 변수를 도입하지 않으려면 DNF에서 CNF 형식으로 변환하는 것은 co-NP-hard입니다. 특히, DNF 공식이 타우 톨 로지인지 테스트하는 것은 공동 NP-hard입니다. 그러나 CNF 공식이 타우 톨 로지인지 테스트하는 것은 다항식 시간으로 수행 할 수 있습니다 (각 절이 리터럴의 분리이기 때문에 모든 절이 타우 톨 로지인지 여부를 별도로 확인하면됩니다). 따라서 새로운 변수를 도입하지 않고 다항식 시간에 DNF 형식에서 CNF 형식으로 변환 할 수 있다면 DNF 수식이 팽팽한 지 여부를 테스트하기위한 다항식 시간 알고리즘을 얻을 수 있습니다. P는 co-NP와 동일하지 않습니다. 다시 말하면, 추가 변수를 도입하지 않고 DNF에서 CNF 형식으로 변환하는 것은 co-NP-hard입니다.

이것은 동등성동등성 간의 차이 입니다. 동등성은 두 공식에 동일한 솔루션 세트가 있어야하므로 추가 변수를 도입 할 수 없습니다. 동등성만으로도 두 공식 모두 만족할 수 있거나 둘 다 만족할 수 없어야합니다 (따라서 추가 변수를 도입 할 수 있음).


@Mehrdad, 새로운 질문을하기 위해 의견을 사용하지 마십시오. 새로운 질문이 있으시면 오른쪽 상단에 '질문하기'가 있습니다. 그러나 약간의 팁 ... 당신은 새로운 질문을 하기 전에이 페이지의 상단에있는 질문을 읽고 싶을 수도 있습니다 ... 또는 그 문제에 대해서는이 의견을 게시하십시오. 도와 드릴 수는 없지만 귀하의 질문과 동일한 페이지에서 답변이있는 곳에서 질문을하셨습니다.
DW

@DW : 으악, 나는 실제로 다른 게시물을 조금 보았고 여기에서 내 의견을 제거하는 것을 잊었습니다. 죄송합니다. 지금 제거했습니다.
user541686
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.