算法概论第八章课后习题8.3

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

证明:

补充一下SAT问题的概念:SAT问题是指是否存在一组对所有布尔变量的赋值(TRUE或FALSE),使得整个合取范式取指为真。

根据书本8.2章的定义:称一个搜索问题是NP-完全的,是指其它所有搜索问题都可以归约到它。

从定义可知,证明一个问题是NP-完全问题有两步,第一步是证明该问题是一个NP问题,第二步是证明其它所有搜索问题都可以归约到该问题。

先证明吝啬SAT问题是NP问题。

如果存在一组对应于吝啬SAT问题子句变量的值,将这组值代入该问题中,可以在多项式时间内验证问题的解是否为真。因此吝啬SAT问题是NP问题。

再证明其他所有搜索问题都可以归约到该问题。

因为所有搜索问题都可以被归约为SAT问题。因此上述问题转化为证明SAT问题可以归约为吝啬SAT问题。

设f为SAT的一个实例,令SAT问题中变量个数为k,即f中变量总数为k,则(f,k)为吝啬SAT问题的实例。

证明SAT问题可以归约为吝啬SAT问题从其充分性和必要性证明。

如果f的解存在,则该解中值为true的变量数量小于等于k个。所以该解也是吝啬SAT问题(f,k)的解。

如果(f,k)的解存在,则该吝啬SAT问题的解中值为true的变量数量也小于等于k个,因此它也是SAT问题f的解。

必要性和充分性得证。SAT问题可以归约为吝啬SAT问题。

综上,吝啬SAT问题为NP-完全问题。

时间: 2024-08-09 06:18:13

算法概论第八章课后习题8.3的相关文章

《算法竞赛入门》-课后习题-Chapter 3

3-1 得分(Score) #include <stdio.h> #include <string.h> #define MAX 82 int main() { int i,k=0,sum=0; char s[MAX]; scanf("%s",s); int len=strlen(s); for(i=0;i<len;i++) {if(s[i]=='X') k=0; if(s[i]=='O') { ++k; sum=sum+k; } } printf(&qu

《算法竞赛入门》-课后习题-Chapter 2

2-1 daffodil水仙花 #include <stdio.h> int main() { int i,a,b,c; for(i=100;i<=999;i++) { a=i/100; b=(i-a*100)/10; c=i-a*100-b*10; if(a*a*a+b*b*b+c*c*c==i) printf("%d\n",i); else continue; } return 0; } 2-2 hanxin韩信 #include <stdio.h>

谭浩强C语言第八章课后习题

1.输入三个整数,按照从小到大顺序输出 1 #include<stdio.h> 2 int main() 3 { 4 void swap(int *p1,int *p2); 5 int n1,n2,n3; 6 int *p1,*p2,*p3; 7 printf("input three integer n1,n2,n2:"); 8 scanf("%d,%d,%d",&n1,&n2,&n3); 9 p1=&n1; 10 p2

【算法竞赛入门经典】【第三章】课后习题(第一部分)

课后习题第三波来了,到第三章之后代码之类的稍微变长了一些,所以我把这一章的答案分为几部分.这一章重点是字符串的处理,对于字符串问题,通常只要细心就没有问题了,下面不多说了直接上详解. 习题3-1 分数统计(stat) 任务1:这个比较简单就直接上代码了: #include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXN 100 + 10 int cmp(const void*a,const v

《软件工程导论》课后习题解答

来源:https://blog.csdn.net/Rong_Toa/article/details/80771976 第一章 软件工程概论 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.这些问题表现在以下几个方面: (1)用户对开发出的软件很难满意. (2)软件产品的质量往往靠不住. (3)一般软件很难维护. (4)软件生产效率很低. (5)软件开发成本越来越大. (6)软件成本与开发进度难以估计. (7)软件技术的发展远远满足不了计算机应用的普及与深入

软件设计师教程第5版课后习题答案

软件设计师教程第5版课后答案 软件设计师教程第5版课后习题答案具体对比变化如下: 第4版 第5版 对比变化 第一章 计算机系统知识 第一章 计算机系统知识 无变化 第二章 程序设计语言基础 第二章 程序设计语言基础 无变化 第三章 操作系统知识 第四章 操作系统知识 第5版删减小节:网络与嵌入式操作系统.UNIX操作系统基础知识 第四章 软件工程基础知识 第五章 软件工程基础知识 第5版增加知识点:统一过程(UP)模型.webApp设计 增加小节:系统设计(概要设计和详细设计) 结构化开发方法独

计算机组成原理_第四版课后习题答案(完整版)

计算机组成原理_第四版课后习题答案(完整版) ?第一章 1.?比较数字计算机和模拟计算机的特点. 解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的: 数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行. 两者主要区别见P1?表1.1. 2.?数字计算机如何分类?分类的依据是什么? 解:分类: 数字计算机分为专用计算机和通用计算机.通用计算机又分为巨型机.大型机. 中型机.小型机.微型机和单片机六类. 分类依据:专用和通用是根据计算机的效率.速度.价格.运行的经济性和适应性来划

Week 10:Large Scale Machine Learning课后习题解答

大家好,我是Mac Jiang,今天和大家分享Coursera-Stanford University-Machine Learning-Week 10:Large Scale Machine Learning的课后习题解答.虽然我的答案通过了系统测试,但是我的分析不一定是正确的,如果各位博友发现错误或有更好的想法,请留言联系,谢谢.希望我的博客对您的学习有所帮助! 这单元,吴恩达老师主要讲了五个方面的内容: 1.随机梯度下降(Stochastic Gradient Descent),比较了随机

曾经做过的40道程序设计课后习题总结(一)

曾经做过的40道程序设计课后习题总结(一) 课后习题目录 1 斐波那契数列2 判断素数3 水仙花数4 分解质因数5 杨辉三角6 学习成绩查询7 求最大公约数与最小公倍数8 完全平方数9 统计字母.空格.数字和其它字符个数10 求主对角线之和11 完数求解12 求s=a+aa+aaa+aaaa+aa...a的值13 高度计算14 乘法口诀15 无重复三位数16 菱形打印17 利润计算18 第几天判断19 从小到大输出数列20 猴子吃桃问题21 乒乓球比赛22 求分数之和23 求阶乘的和24 递归求