SlideShare a Scribd company logo
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を偽にする

More Related Content

What's hot

AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説
AtCoder Inc.
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
AtCoder Inc.
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
Preferred Networks
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
AtCoder Inc.
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
AtCoder Inc.
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
AtCoder Inc.
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
AtCoder Inc.
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
 
双対性
双対性双対性
双対性
Yoichi Iwata
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
AtCoder Inc.
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
AtCoder Inc.
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
AtCoder Inc.
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
AtCoder Inc.
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
AtCoder Inc.
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
okuraofvegetable
 
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
AtCoder Inc.
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick

What's hot (20)

AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
双対性
双対性双対性
双対性
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 

Viewers also liked

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

Viewers also liked (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(充足可能性問題)の解き方