1. 3-SAT IN 𝑂(1.33 𝑛
) TIME
-WITH RANDOMIZATION
TAMREF
sluggeryck@naver.com
2. 𝑘-SAT problem
• 𝑛개의 boolean 변수 𝑥1, 𝑥2, ⋯ 𝑥 𝑛이 있다.
• 이 때 절(clause)을 다음과 같이 정의한다 :
• 𝐶𝑖 = 𝑦1 ∨ 𝑦2 ∨ ⋯ ∨ 𝑦 𝑘
• 단, 𝑦1, ⋯ 𝑦 𝑘 ⊂ {𝑥1, ⋯ 𝑥 𝑛, ¬𝑥1, ¬𝑥2, ⋯ ¬𝑥 𝑛}이다.
• 변수가 𝑘개인 cluase를 𝑘-CNF라고 한다.
• 다음의 명제가 참이 되도록 𝑥𝑖의 값을 조정할 수 있을까?
• 𝐶1 ∧ 𝐶2 ∧ ⋯ 𝐶𝑟
3. Importance & Reducibility
• 𝑘-SAT problem은 NP – complete problem이다.
• 즉, 모든 NP-문제를 SAT으로 변환할 수 있다.
• 모든 SAT 문제는 2-SAT 혹은 3-SAT 문제로 변환할 수 있
다.
• 관련된 라이브러리로는 z3가 있다.
• IOI 시험장에서 다운로드 받아서 풀면 된다.
• SAT문제는 CS 전반에서 매우 중요하지만, 이 자료의 main
topic이 아니므로 빨리 넘어가자.
4. 2-SAT
• 킹-갓-엠페러-그저-빛 Robert Tarjan이 𝑂(𝑛 + 𝑟)에 해결하
는 아이디어를 제시했다.
• 명제를 그래프로 변환하여 푸는데, 여러 블로그에 잘 설명
되어 있으니 역시 넘어가자.
5. 3-SAT
• 사실 이 3SAT이 NP인게 문제다.
• Naïve로는 대충 𝑂(𝑟 ⋅ 2 𝑛
)에 된다.
• …
• 더 줄일 수 있는 사람?
6. 저요!
• 되게 많다.
• 다항 시간 풀이는 당연히 나오지 않았다.
• 하지만 아래와 같이 𝑂(𝑐 𝑛
)에 푸는 풀이가 많이 개발되었다.
• prob : 확률론적 algorithm
• det : 결정론적 algorithm.
• 여기선 가장 간단하고 빠른
Schöning(1999)의
1.33n 알고리즘을 알아보자.
7. Algorithm for k - SAT
• 각각의 𝑥𝑖에 random한 값을 배정하고, 이 boolean string을
‘state’ 𝑎라 하자.
• 만약 𝑎가 조건식을 만족한다면 accept and terminate.
• 아래를 3n번 반복한다:
• 모든 절의 값이 true : accept and terminate.
• 값이 false인 절 𝐷가 있을 경우:
• 𝐷를 구성하는 변수 𝑘개 중 하나를 random하게 뒤집는다.
8. Analysis
• 문제 해결이 가능하다고 가정하자.
즉, 모든 절을 true로 만드는 state 𝑎∗가 있다고 가정하자.
• 한 algorithm step마다 𝑎를 𝑎∗로 만들 수 있는 확률
(success prob.)을 𝑝라고 하자.
• 대충
20
𝑝
회 정도 step을 반복하면 𝑎∗가 ‘있는데도 못 찾을 확률’이
1 − 𝑝
20
𝑝 < 𝑒−20이 된다.
• 따라서 𝑝의 값이 ‘생각보다 큼’을 보여보자!
9. Hamming – distance strategy
• 확률변수 𝑋를 𝑎와 𝑎∗의 hamming distance라고 하자.
• 이때 𝑃 𝑋 = 𝑗 =
𝑛 𝐶 𝑗
2 𝑗 이다.
• 현재의 hamming distance를 ℎ라고 하면,
현재 false인 절 𝐷에는 어찌되었건 flip해야만 하는 변수가
최소 1개 있다.
• 그렇다면 최소 한 놈은 hamming distance를 ℎ − 1로 만들
어 줄 거고,
다른 엄한 놈을 건드리면 되려 ℎ + 1이 될 거다.
10. Random walk approach
• 이 상황을 random walk로 생각해보자.
• 난 현재 (ℎ, 0)에 서 있고 0,0 으로 가야 하는데, 왼쪽으로
갈 확률과 오른쪽으로 갈 확률이 정해져 있다.
• 이때 언젠가는 (0,0)에 도착할 확률을 𝑞ℎ라고 하면,
• 𝑞ℎ = 𝑖(𝑖번 오른쪽 + 𝑖 + ℎ 번 왼쪽을 걸어서 도착할 확률) 이다.
• 괄호 안의 값을 𝑔𝑖ℎ라고 하자.
11. PPT 수식치기 빡세다…
• TeX으로 쳐서 캡처해왔다.
• 2번째 → 3번째 line에는 Ballot’s theorem이라는 게사용되었는데,
Catalan number와 관련이 있다.
• 𝑖 ≤ ℎ인 case만 고려했음에
주의하자.
12. Fact!
• 다음의 근사식이 성립한다.
• 𝐻 𝑝 ≔ −(𝑝 lg 𝑝 + 1 − 𝑝 lg 1 − 𝑝 )
• 겨우 ‘다항식 조금’밖에 차이(비율)가 없단다.
• 어째 점점 practical과 멀어진다.
13. Lower it!
• 이제 Pg11의 식에서 𝑖 =
𝑗
𝑘−2
인 ‘단 하나의 항’만 고려하고,
Pg12의 Fact를 사용하면
• ‘다항식 조금’ 정도의 오차로 다음이 성립한다.
• 여기서 𝛼 =
1
𝑘−2
이다.
• 열심히 계산하면 우변의 값은
1
𝑘−1
𝑗
가 된다.
• ℎ와 𝑗를 혼동하였다. 죄송합니다……….
14. Conclusion
• 𝑞ℎ값을 대입해주면 다음과 같이 𝑝의 값을 알아낼 수 있다.
• 따라서 이 알고리즘의 복잡도는
• 𝑂
1
𝑝
= 𝑂 2 −
2
𝑘
𝑛
이고, 3-SAT(𝑘 = 3)인 경우는
𝑂(1.33 𝑛
)이다.
• 물론 다항식 수준의 factor는 쿨하게 씹는다.
15. Is it CP - practical?
• 대충 𝑂(𝑟 ⋅ 1.33 𝑛)에 돌아갈 것 같으니까,
𝑟, 𝑛이 40정도까지는 1초 안에 돌아갈 것 같다.
• 근데 이 정도 사이즈면 차라리 𝑟 ⋅ 2 𝑛짜리 naïve 랜덤 돌리
는 편이 훨씬 낫지 않을까…?
• 3-SAT까지 써야 하는 연습문제가 없어서 벤치마킹이 어렵
다. 있다면 제보 바랍니다~
• Facebook : @tamreffingbaekjoon
• Blog : tam-ref.ga
• Email : sluggeryck@naver.com