<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=Satisfiability_Problem</id>
	<title>Satisfiability Problem - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=Satisfiability_Problem"/>
	<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Satisfiability_Problem&amp;action=history"/>
	<updated>2026-04-29T14:18:36Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=Satisfiability_Problem&amp;diff=6389&amp;oldid=prev</id>
		<title>Ahn9807: 봇: 자동으로 텍스트 교체  (-\[\[분류:컴퓨터 공학(\|[^\]]+)?\]\] +)</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Satisfiability_Problem&amp;diff=6389&amp;oldid=prev"/>
		<updated>2026-01-15T15:24:25Z</updated>

		<summary type="html">&lt;p&gt;봇: 자동으로 텍스트 교체  (-\[\[분류:컴퓨터 공학(\|[^\]]+)?\]\] +)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026년 1월 15일 (목) 15:24 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;1번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[분류:알고리즘 설계와 분석]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[분류:알고리즘 설계와 분석]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[분류:컴퓨터 공학]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;상위 문서: [[NP-Completeness#Satisfiability Problem|NP-Completeness]]  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;상위 문서: [[NP-Completeness#Satisfiability Problem|NP-Completeness]]  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ahn9807</name></author>
	</entry>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=Satisfiability_Problem&amp;diff=6274&amp;oldid=prev</id>
		<title>Pinkgo: 새 문서: 분류:알고리즘 설계와 분석 분류:컴퓨터 공학 상위 문서: NP-Completeness   ==개요== SAT(Satisfiability Problem)는 컴퓨터 과학 이론에서 가장 유명한 NP-complete 문제이며, 전 세계의 알고리즘 전문가들이 빠른 알고리즘(다항시간)을 찾으려 했지만 실패했다. SAT를 빠르게 풀 수 있으면 P = NP가 되어버리며, NP 문제들이 전부 빠르게 풀려 암호...</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=Satisfiability_Problem&amp;diff=6274&amp;oldid=prev"/>
		<updated>2025-12-01T16:42:34Z</updated>

		<summary type="html">&lt;p&gt;새 문서: &lt;a href=&quot;/noriwiki/index.php?title=%EB%B6%84%EB%A5%98:%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98_%EC%84%A4%EA%B3%84%EC%99%80_%EB%B6%84%EC%84%9D&quot; title=&quot;분류:알고리즘 설계와 분석&quot;&gt;분류:알고리즘 설계와 분석&lt;/a&gt; &lt;a href=&quot;/noriwiki/index.php?title=%EB%B6%84%EB%A5%98:%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%B5%ED%95%99&quot; title=&quot;분류:컴퓨터 공학&quot;&gt;분류:컴퓨터 공학&lt;/a&gt; 상위 문서: &lt;a href=&quot;/noriwiki/index.php?title=NP-Completeness#Satisfiability_Problem&quot; title=&quot;NP-Completeness&quot;&gt;NP-Completeness&lt;/a&gt;   ==개요== SAT(Satisfiability Problem)는 컴퓨터 과학 이론에서 가장 유명한 NP-complete 문제이며, 전 세계의 알고리즘 전문가들이 빠른 알고리즘(다항시간)을 찾으려 했지만 실패했다. SAT를 빠르게 풀 수 있으면 P = NP가 되어버리며, NP 문제들이 전부 빠르게 풀려 암호...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[분류:알고리즘 설계와 분석]]&lt;br /&gt;
[[분류:컴퓨터 공학]]&lt;br /&gt;
상위 문서: [[NP-Completeness#Satisfiability Problem|NP-Completeness]] &lt;br /&gt;
&lt;br /&gt;
==개요==&lt;br /&gt;
SAT(Satisfiability Problem)는 컴퓨터 과학 이론에서 가장 유명한 NP-complete 문제이며, 전 세계의 알고리즘 전문가들이 빠른 알고리즘(다항시간)을 찾으려 했지만 실패했다. SAT를 빠르게 풀 수 있으면 P = NP가 되어버리며, NP 문제들이 전부 빠르게 풀려 암호 시스템 대부분이 붕괴한다. &lt;br /&gt;
&lt;br /&gt;
==Definition of SAT==&lt;br /&gt;
SAT는 아래와 같은 문제 정의를 가진다: &lt;br /&gt;
 입력: 변수들의 집합 &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; &lt;br /&gt;
     변수들로 이루어진 절(clause)&amp;lt;ref&amp;gt;여러 개의 리터럴(literal)들을 OR로 묶은 하나의 조건식이다. 예를 들면, &amp;lt;math&amp;gt;(v_1 \lor \bar{v_2} \lor v_3)&amp;lt;/math&amp;gt;이 있다.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;리터럴(literal)이란, 변수 &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;또는 그 부정 &amp;lt;math&amp;gt;\bar{ V}&amp;lt;/math&amp;gt;을 의미한다.&amp;lt;/ref&amp;gt;들의 집합 &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;&lt;br /&gt;
 질문: 변수들에 true/false 값을 적절히 넣어 모든 절(clause)이 동시에 참이 되도록 하는 방법이 존재하는가? &lt;br /&gt;
아래는 SAT 문제에 대한 예시 인스턴스이다: &lt;br /&gt;
 입력: &amp;lt;math&amp;gt;V=\{v_1, v_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;C=\{\{v_1,\bar{v_2}\},\{\bar{v_1},v_2\}\}&amp;lt;/math&amp;gt;&lt;br /&gt;
위와 같은 인스턴스에 대한 답은 모든 절을 참으로 만들 수 있다는 것이다. &amp;lt;math&amp;gt;v_1=v_2=true&amp;lt;/math&amp;gt;로 놓으면 두 절이 모두 만족되기 때문이다. 반면, 아래와 같은 인스턴스는 만족 불가능하다: &lt;br /&gt;
 입력: &amp;lt;math&amp;gt;V=\{v_1, v_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;C=\{\{v_1,v_2\},\{v_1,\bar{v_2}\},\{\bar{v_1}\}\}&amp;lt;/math&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
==3-Satisfiability Problem==	&lt;br /&gt;
3-SAT(3-Satisfiability)은 SAT 문제의 특수한 버전으로, 각 절(clause)에 정확히 3개의 literal이 들어간 형식이다. 이는 SAT의 특수한 버전이기 때문에(&amp;lt;math&amp;gt;3-SAT \subseteq SAT&amp;lt;/math&amp;gt;), 만약 reduction에 따라 3-SAT이 NP-complete이면 SAT도 NP-complete이다. &lt;br /&gt;
&lt;br /&gt;
===SAT to 3-SAT Reduction===&lt;br /&gt;
SAT의 절의 길이는 &amp;lt;math&amp;gt;k=1,2,3,4,..&amp;lt;/math&amp;gt;으로 일반적인 길이를 가지기 때문에, 어떤 인스턴스의 각 절 &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;를 독립적으로 길이가 3인 절로 바꾸어 전체 식을 3-SAT 인스턴스로 변환하여 reduction을 수행할 수 있다. &lt;br /&gt;
&lt;br /&gt;
먼저 &amp;lt;math&amp;gt;C_i=\{z_1\}&amp;lt;/math&amp;gt;과 같이 &amp;lt;math&amp;gt;k=1&amp;lt;/math&amp;gt;인 경우, 리터럴이 3개인 절로 만들기 위해서 새로운 변수 &amp;lt;math&amp;gt;v_1, v_2&amp;lt;/math&amp;gt; 2개를 만들어야 한다. 이 경우 아래와 같이 네 개의 절이 생성된다:&lt;br /&gt;
 &amp;lt;math&amp;gt;\{v_1,v_2,z_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\{v_1,\bar{v_2},z_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\{\bar{v_1},v_2,z_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\{\bar{v_1},\bar{v_2},z_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
위 네 절이 동시에 만족되기 위해서는 무조건 &amp;lt;math&amp;gt;z_1=true&amp;lt;/math&amp;gt;여야 하므로 원래의 의미가 보존된다.&lt;br /&gt;
&lt;br /&gt;
그리고 &amp;lt;math&amp;gt;C_i=\{z_1,z_2\}&amp;lt;/math&amp;gt;과 같이 &amp;lt;math&amp;gt;k=2&amp;lt;/math&amp;gt;인 경우, 리터럴이 3개인 절로 만들기 위해서 새로운 변수 &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt;을 만들어야 한다. 이 경우 아래와 같이 두 개의 절이 생성된다:&lt;br /&gt;
 &amp;lt;math&amp;gt;\{v_1,z_1,z_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\{\bar{v_1},z_1,z_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
위 두 절이 모두 만족되기 위해서는 &amp;lt;math&amp;gt;z_1&amp;lt;/math&amp;gt; 또는 &amp;lt;math&amp;gt;z_2&amp;lt;/math&amp;gt; 중 하나가 true여야 하므로 원래 절의 의미가 유지된다.&lt;br /&gt;
&lt;br /&gt;
마지막으로 &amp;lt;math&amp;gt;C_i=\{z_1,z_2,z_3,...,z_n\}&amp;lt;/math&amp;gt;과 같이 &amp;lt;math&amp;gt;k=n&amp;gt;3&amp;lt;/math&amp;gt;인 경우, 리터럴이 3개인 절로 만들기 위해서는 새로운 변수들 &amp;lt;math&amp;gt;v_1, v_2,\cdots,v_{n-3}&amp;lt;/math&amp;gt;를 만들고 아래와 같이 사슬형(chain) 절들을 만들어야 한다. &lt;br /&gt;
 &amp;lt;math&amp;gt;\{z_1,z_2,v_1\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\{\bar{v_1}, z_3,v_2\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;\{\bar{v_2}, z_4, v_3\}&amp;lt;/math&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt;math&amp;gt;\{\bar{v_{n-3}},z_{n-1}, z_n\}&amp;lt;/math&amp;gt;&lt;br /&gt;
위 절들은 각 절이 3개의 리터럴을 포함하도록 분해한 구조이다. 이를 통해서 원래의 절의 의미들을 보존할 수 있다. 또한 이를 통해서 &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;가 자연수일 때 모든 절들을 길이가 3인 절로 변환할 수 있다는 것이 증명되었다. 따라서 SAT &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; p 3-SAT이며, SAT는 NP-complete 이므로 3-SAT도 NP-complete이다. &lt;br /&gt;
&lt;br /&gt;
이때, 절이 4개, 5개 … literal로 구성되어 있어도 조금 조정하면 동일한 방식으로 3-SAT으로 변환할 수 있기 때문에 4-SAT, 5-SAT, … 도 모두 NP-complete이다. 하지만 사실, 2-SAT 자체는 NP-complete이 아니며, 다항시간 내에 해결된다. &lt;br /&gt;
&lt;br /&gt;
또한 어떤 문제에 대해 NP-complete 증명을 할 때 일반 SAT 대신 3-SAT를 기준 문제로 사용할 수 있다. 이때 3-SAT를 기준으로 사용하는 이유는 모든 절의 길이가 3으로 균일하여 구조가 더욱 규칙적이기 때문이다. 이때 reduction의 방향성은 아래와 같다:&lt;br /&gt;
 SAT &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; 3-SAT &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; X&lt;br /&gt;
즉, SAT 문제를 3-SAT로 바꿀 수 있으므로, 3-SAT를 증명하고자 하는 X라는 새로운 문제로 reduction하여야 X가 NP-complete임을 증명할 수 있다. 예를 들면, [[Vertex Cover]] 혹은 [[Independent Set]] 문제는 3-SAT을 이용하여 NP-complete임을 증명할 수 있다.&lt;br /&gt;
&lt;br /&gt;
==각주==&lt;/div&gt;</summary>
		<author><name>Pinkgo</name></author>
	</entry>
</feed>