SlideShare ist ein Scribd-Unternehmen logo
1 von 10
2-SATの解き方
吉岡恒夫(@yoshiokatsuneo) 2017/02/21
SATとは?
• 充足可能性問題(satisfiability problem)
• 論理式
(A∨B∨C∨…)∧(D∨E∨F∨…)∧…
# CNF, Conjunctive Normal Form, 連現標準形
• 論理式を満たす(真にする)ことができるか?
(そのような、A,B,C,D…が存在するか?)
2-SATとは?
• 論理式
(A∨B)∧(D∨E)∧…
#かっこの中(クロージャ)が最大2個まで
• 論理式を満たす(真にする)ことができるか?
(そのような、A,B,C,D…が存在するか?)
論理包含(implication)
• A→B (AならばB)
(注: Aが偽の場合もBは真になる)
• A→B
かつ
B→C
ならば
A→C
(三段論法)
A B A→B
真 真 真
真 偽 偽
偽 真 真
偽 真 真
論理式と論理包含
• A∨B ≡ ¬B→A≡ ¬A→B
¬A B ¬A→B A B
真 真 真 偽 真
真 偽 偽 偽 偽
偽 真 真 真 真
偽 真 真 真 真
2-SATの「ならば(→)」表記
• (A∨B)∧(C∨D)∧…
は
(¬B→A)∧(¬A→B)∧(¬D→C)∧(¬C→D)∧…
と表せる
2-SATのグラフ表記
B ¬A A ¬B
A B A→B
真 真 真
真 偽 偽
偽 真 真
偽 真 真
• X→YでXとYが反対でも成立
するのはX:偽, Y:真の組み合
わせ
• ¬A→Aの場合、¬Aを偽に、
Aを真にする。
B ¬A A ¬B
偽 偽 真 真
矛盾の検出
• ¬AとAがループしていると、¬AとAを同時に
満たす必要が出て来て矛盾する
A ¬A
強連結成分分解
• 強連結成分分解で同じループの中に、Aと¬A
が存在するか検出。
A
B
C
D
E
F
G
H
強連結成分 強連結成分
まとめ
• 論理式: (A∨B)∧(D∨E)∧…
• ならばに変換: (¬B→A)∧(¬A→B)∧…
• グラフを作成
• 強連結成分分解でAと¬Aが同じ成分か検出
• ¬A→Aがあれば、Aを偽にする

Weitere ähnliche Inhalte

Was ist angesagt?

指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
Yoichi Iwata
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 

Was ist angesagt? (20)

指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端指数時間アルゴリズムの最先端
指数時間アルゴリズムの最先端
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
abc032
abc032abc032
abc032
 
AtCoder Regular Contest 028 解説
AtCoder Regular Contest 028 解説AtCoder Regular Contest 028 解説
AtCoder Regular Contest 028 解説
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
ユークリッド最小全域木
ユークリッド最小全域木ユークリッド最小全域木
ユークリッド最小全域木
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
 
AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説AtCoder Regular Contest 030 解説
AtCoder Regular Contest 030 解説
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
競プロは社会の役に立たない+ベンチャー企業の話 (NPCA夏合宿OB講演).pdf
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 

Andere mochten auch (8)

Create twitter-ios-app
Create twitter-ios-appCreate twitter-ios-app
Create twitter-ios-app
 
[ACM-ICPC] Dinic's Algorithm
[ACM-ICPC] Dinic's Algorithm[ACM-ICPC] Dinic's Algorithm
[ACM-ICPC] Dinic's Algorithm
 
OR学会 2015/9/11 組合せ最適化の体系化とフリーソフトによる最適化
OR学会 2015/9/11 組合せ最適化の体系化とフリーソフトによる最適化OR学会 2015/9/11 組合せ最適化の体系化とフリーソフトによる最適化
OR学会 2015/9/11 組合せ最適化の体系化とフリーソフトによる最適化
 
型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ型理論 なんて自分には関係ないと思っているあなたへ
型理論 なんて自分には関係ないと思っているあなたへ
 
証明プログラミング超入門
証明プログラミング超入門証明プログラミング超入門
証明プログラミング超入門
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 

2SAT(充足可能性問題)の解き方