本文主要是介绍形式系统(Formale System)-SAT问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是SAT问题
所谓SAT问题就是可实现性问题(Erfuellbarkeitsproblem)。即已知一个Formel F ∈For0 ,问是否存在一个解释(Interpretation) I 使得 valI(F)=T
同时SAT问题也是一个NP完备性问题。也就是说假如存在一个确定的在多项式时间内完成的用于判定一个Formel是否可实现的的算法,那么同时也就可以得到NP=P,换言之,每一个非确定性的可于多项式时间内完成的判定问题同时也是确定性的可在多项式时间内完成的。//有点绕,总之就是说不存在咋能在多项式时间内完成的算法把???NP问题不懂啊
特定Formel的SAT问题复杂度
//高项的KNF都可以通过转化化成3-KNF
//2-KNF也叫做Krom-Formel
//具体的数字不知道是怎么算出来的
Hron Formel
一个Formel A是Horn Formel,当且仅当:
1.A是KNF
2.A的每一个子项最多含有一个正的Literal
Hornformel可实现性测试
假如 C=D1∧..∧Dm 是一个Hornformel,那么可以通过以下算法,判定他是否可以实现:
0:假如 Di 中不存在单项式,那么算法结束,输出可实现。假如存在,那么标记所有的单项式
1:假如不存在 B1∧...∧Bm→K ,其中所有的 Bi 都已经标记过,那么输出可实现,算法停止
假如存在 B1∧...∧Bm→0 ,并且其中的 Bi 都已经标记过,那么输出不可实现,算法停止
假如存在 B1∧...∧Bm→A ,并且其中的 Bi 都已经标记过,只有A还没有标记过,那么把A也给标记了,然后跳转到1
除了上述外的其他一切情况都输出可实现,然后算法停止
DPLL(Davis-Putnam-Logemann-Loveland)
补充知识
I 是Interpretation,S是Klausel的集合,C是Klausel,那么就有:
1.
I( ∅ )=T // ∅ 表示S为空
I( ◻ )=F // ◻ 表示Klausel为空 恒假
算法
1.if S= ∅ then return 1;
2.if ◻∈ S then return 0;
3.if S contain singleklausel
then choose singleklausel {L} ∈ S
return DPLL( redL(S) );
else choose P ∈ atom(S)
return max{DPLL( SP ),DPLL( S¬P )}
其中:
red L (S)={red L (C)}C ∈S且L∉C
red L (C)=C\{ ¬L }
SP=S∪ {{P}}
S¬P=S∪ {{ ¬P }}
这篇关于形式系统(Formale System)-SAT问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!