证明题-算法概论8.3吝啬SAT问题证明

问题描述


吝啬SAT问题是这样的:给定一组子句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值——如果该赋值存在。证明吝啬问题是NP-完全问题。

解题思路


1.什么是SAT问题

假设我们有这样一组子句:
(a⋃b⋃c)⋂(a⋃b¯)⋂(b⋃c¯)(a¯⋂c)⋂(a¯⋃b¯⋃c¯)
我们需要做的就是找到a,b,c的取值(true or false)使得该表达式的结果是true,假设a,b,c都是true的话,那么整个表达式的取值就是false,不难发现,这个表达式不存在一个合适的abc的取值使得整个式子为true,对于这个问题而言,我们需要搜索所有取值组合才能确定是否能确定是否存在一个组合可以使得该式子为true,如果不存在我们就返回不存在,如果存在我们就返回这个组合,用穷举搜索的方法复杂度是O(2n),如果我们能找到一个简单的算法能够使得该算法的复杂度降到多项式时间的话,那么我们就认为该问题是p问题,但我们暂且认为该问题是个np问题,因为np问题至今无法把其复杂度降下来,其变种倒是有多项式的解法。

2.吝啬SAT问题的理解

吝啬SAT问题其实就是SAT问题的一个变种,就比如仍然是上一个问题,现在多了一个变量,这个变量就是k,我
们需要确定的是我们不能多于k个true个变量。

3.基本步骤

要证明吝啬SAT是NP-完全问题,首先证明吝啬SAT是NP问题,然后证明SAT是NP-完全问题,再将SAT归约成吝啬SAT。

4.证明过程

(1)前提条件

我们假设(f,k)为吝啬SAT的一个实例,x为一组赋值,也就是说,f是SAT的一个实例(包含k个变量),由于x是否可以使(f,k)为真的解是可在多项式时间内验证的,所以吝啬SAT是NP问题

(2)目标

SAT规约到吝啬SAT,即证:
x是f的解       当且仅当       x是(f,k)的解
(SAT)                           (吝啬SAT)

(3)充分性证明

假设x是f的解,则至多有k个变量为真,x赋给(f,k)也为真,所以x是(f,k)的解

(4)必要性证明

假设x是(f,k)的解,显然x也是f的解

(5)结论

吝啬 SAT也是一个NP-完全问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值