【大话算法导论】从SAT规约到3SAT

今天看了网上很多SAT问题规约到3SAT,虽然写的不错,但是过于理论。其实我看到已知半解。

后来无意中发现一个解释这个规约,简单易懂,特此记录。

定义:
首先给出一个比较直观的定义:
假设现在有这么个问题:过年了,正打算烧年夜饭,家里每个人都可以说说自己想吃啥不想吃啥。小C说他要吃牛肉、不吃香菇、不吃内脏,小D说他要吃内脏、吃蔬菜、不吃牛肉。但毕竟众口难调、不一定所有愿望都能实现。因而只要每个人有一个愿望实现,这顿年夜饭就算非常成功了。所以现在问题来了,有没有一桌年夜饭可以让所有人都至少有一个愿望被实现呢?

这就是个很典型的SAT问题

所谓子句(Clause)就是每个人的愿望清单,比如小c说他要吃牛肉、不吃香菇、不吃内脏,“要吃牛肉、不吃香菇、不吃内脏” 就是一个子句。

所谓文字(Literal)就是一个愿望,比如“要吃牛肉”,“不吃香菇”都是所谓的文字。

所谓命题变元(Variable)就是指这个菜会不会出现在餐桌上。

3-CNF formula
包含一堆子句(Clause),这一堆子句每个都包含3个文字(Literal),每个literal表示命题变元集中一个布尔变量(Variable)或它的否定形式

3-SAT问题就是判定 一个 3-CNF formula 是不是被满足。

3-CNF formula 被满足 当且仅当 每个 clause 都被满足

clause 被满足 当且仅当 clause中至少有一个literal被满足

literal被满足 当且仅当这个literal所指向的Variable能使得这个literal为TRUE

所以3-SAT formula的自变量就是literal里面出现的这些variable。

3-SAT问题就是问你能不能给这些变量赋上合适的值使得这个formula被满足。

此时,我们再来看下面理论表达,
在这里插入图片描述
X就是fomular,C就是clause, C 1 , . . . , C m C_1,...,C_m C

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值