算法设计与分析-f (1)

合集下载

《算法设计与分析》考试题目及答案(DOC)

《算法设计与分析》考试题目及答案(DOC)

《算法设计与分析》考试题目及答案(DOC)D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。

A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。

A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。

A.B.C.D. void backtrack (int t){if (t>n) output(x);elsefor (int i=t;i<=n;i++) {swap(x[t], x[i]);if (legal(t)) backtrack(t+1); swap(x[t], x[i]);}}void backtrack (int t){if (t>n) output(x);elsefor (int i=0;i<=1;i++) {x[t]=i;if (legal(t)) backtrack(t+1); }}10. 回溯法的效率不依赖于以下哪一个因素?(C )A.产生x[k]的时间;B.满足显约束的x[k]值的个数;C.问题的解空间的形式;D.计算上界函数bound的时间;E.满足约束函数和上界函数约束的所有x[k]的个数。

F.计算约束函数constraint的时间;11. 常见的两种分支限界法为(D)A. 广度优先分支限界法与深度优先分支限界法;B. 队列式(FIFO)分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式(FIFO)分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性S(n)是指(B)A.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数。

B.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的方格数的总和。

C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数。

《算法设计与分析》实验报告实验一...

《算法设计与分析》实验报告实验一...

《算法设计与分析》实验报告实验一递归与分治策略应用基础学号:**************姓名:*************班级:*************日期:2014-2015学年第1学期第九周一、实验目的1、理解递归的概念和分治法的基本思想2、了解适用递归与分治策略的问题类型,并能设计相应的分治策略算法3、掌握递归与分治算法时间空间复杂度分析,以及问题复杂性分析方法二、实验内容任务:以下题目要求应用递归与分治策略设计解决方案,本次实验成绩按百分制计,完成各小题的得分如下,每小题要求算法描述准确且程序运行正确。

1、求n个元素的全排。

(30分)2、解决一个2k*2k的特殊棋牌上的L型骨牌覆盖问题。

(30分)3、设有n=2k个运动员要进行网球循环赛。

设计一个满足要求的比赛日程表。

(40分)提交结果:算法设计分析思路、源代码及其分析说明和测试运行报告。

三、设计分析四、算法描述及程序五、测试与分析六、实验总结与体会#include "iostream"using namespace std;#define N 100void Perm(int* list, int k, int m){if (k == m){for (int i=0; i<m; i++)cout << list[i] << " ";cout << endl;return;}else{for (int i=m; i<k; i++){swap(list[m], list[i]);Perm(list, k, m+1);swap(list[m], list[i]);}}}void swap(int a,int b){int temp;temp=a;a=b;b=temp;}int main(){int i,n;int a[N];cout<<"请输入排列数据总个数:";cin>>n;cout<<"请输入数据:";for(i=0;i<n;i++){cin>>a[i];}cout<<"该数据的全排列:"<<endl;Perm(a,n,0);return 0;}《算法设计与分析》实验报告实验二递归与分治策略应用提高学号:**************姓名:*************班级:*************日期:2014-2015学年第1学期一、实验目的1、深入理解递归的概念和分治法的基本思想2、正确使用递归与分治策略设计相应的问题的算法3、掌握递归与分治算法时间空间复杂度分析,以及问题复杂性分析方法二、实验内容任务:从以下题目中任选一题完成,要求应用递归与分治策略设计解决方案。

第7章 减治法(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

第7章 减治法(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

比较对象,若 k 与中间元素相等,则查找成功;若 k 小于中间元素,则在中间元
算 法 设

素的左半区继续查找;若 k 大于中间记录,则在中间元素的右半区继续查找。不
与 分

断重复上述过程,直到查找成功,或查找区间为空,查找失败。
( 第
版 )
k
清 华


[ r1 … … … rmid-1 ] rmid [ rmid+1 … … … rn ] (mid=(1+n)/2)
Page 4
3
7.1.2 一个简单的例子——俄式乘法
【问题】俄式乘法(russian multiplication)用来计算两个正整数 n 和 m 的乘积
,运算规则:如果 n 是偶数,计算 n/2×2m;如果 n 是奇数,计算(n-1)/2×2m+
m;当 n 等于 1 时,返回 m 的值。


俄式乘法的优点?
与 分 析
2. 测试查找区间[low,high]是否存在,若不存在,则查找失败,返回 0;
( 第
3. 取中间点 mid = (low+high)/2; 比较 k 与 rmid,有以下三种情况:
版 )
3.1 若 k < rmid,则 high = mid - 1;查找在左半区进行,转步骤2;
清 华
3.2 若 k > rmid,则 low = mid + 1;查找在右半区进行,转步骤2;
Page 12
7.2.2 选择问题
【想法】假定轴值的最终位置是 s,则: (1)若 k=s,则 rs 就是第 k 小元素; (2)若 k<s,则第 k 小元素一定在序列 r1 ~ rs-1 中; (3)若 k>s,则第 k 小元素一定在序列 rs+1 ~ rn 中。

算法设计与分析复习题目及答案 (3)

算法设计与分析复习题目及答案 (3)

分治法1、二分搜索算法是利用(分治策略)实现的算法。

9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。

34.实现合并排序利用的算法是(分治策略)。

实现大整数的乘法是利用的算法(分治策略)。

17.实现棋盘覆盖算法利用的算法是(分治法)。

29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。

不可以使用分治法求解的是(0/1背包问题)。

动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。

下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。

(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。

矩阵连乘问题的算法可由(动态规划算法B)设计实现。

实现最大子段和利用的算法是(动态规划法)。

贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。

回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。

剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。

分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。

分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。

(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

算法设计与分析-习题参考答案

算法设计与分析-习题参考答案

算法设计与分析基础习题1.15..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:●如果d整除u和v, 那么d一定能整除u±v;●如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。

数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。

故gcd(m,n)=gcd(n,r)6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0<=m<n的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcd(m,n)=gcd(n,m)并且这种交换处理只发生一次.7.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?(1次)b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?(5次)gcd(5,8)习题1.21.(农夫过河)P—农夫W—狼G—山羊C—白菜2.(过桥问题)1,2,5,10---分别代表4个人, f—手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平方根的函数)算法Quadratic(a,b,c)//求方程ax^2+bx+c=0的实根的算法//输入:实系数a,b,c//输出:实根或者无解信息If a≠0D←b*b-4*a*cIf D>0temp←2*ax1←(-b+sqrt(D))/tempx2←(-b-sqrt(D))/tempreturn x1,x2else if D=0 return –b/(2*a)else return “no real roots”else //a=0if b≠0 return –c/belse //a=b=0if c=0 return “no real numbers”else return “no real roots”5.描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n第二步:如果n=0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法DectoBin(n)//将十进制整数n转换为二进制整数的算法//输入:正整数n//输出:该正整数相应的二进制数,该数存放于数组Bin[1...n]中i=1while n!=0 do {Bin[i]=n%2;n=(int)n/2;i++;}while i!=0 do{print Bin[i];i--;}9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略) 对这个算法做尽可能多的改进.算法MinDistance(A[0..n-1])//输入:数组A[0..n-1]//输出:the smallest distance d between two of its elements习题1.31.考虑这样一个排序算法,该算法对于待排序的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.a.应用该算法对列表‖60,35,81,98,14,47‖排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表‖60,35,81,98,14,47‖排序的过程如下所示:b.该算法不稳定.比如对列表‖2,2*‖排序c.该算法不在位.额外空间for S and Count[] 4.(古老的七桥问题)习题1.41.请分别描述一下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度. a.删除数组的第i 个元素(1<=i<=n)b.删除有序数组的第i 个元素(依然有序) hints:a. Replace the i th element with the last element and decrease the array size of 1b. Replace the ith element with a special symbol that cannot be a value of the array ’s element(e.g., 0 for an array of positive numbers ) to mark the i th position is empty. (―lazy deletion ‖)第2章 习题2.17.对下列断言进行证明:(如果是错误的,请举例) a. 如果t(n )∈O(g(n),则g(n)∈Ω(t(n)) b.α>0时,Θ(αg(n))= Θ(g(n)) 解:a. 这个断言是正确的。

《算法设计与分析》(全)

《算法设计与分析》(全)
巢湖学院计算机科学与技术系
1.1、算法与程序
程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如操作系统,是一个在无限循环中执行的程序, 因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个 问题由操作系统中的一个子程序通过特定的算法来实 现。该子程序得到输出结果后便终止。
渐近分析记号的若干性质
(1)传递性: ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= O(g(n)), g(n)= O (h(n)) f(n)= O (h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= o(g(n)), g(n)= o(h(n)) f(n)= o(h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); (2)反身性: ➢ f(n)= (f(n));f(n)= O(f(n));f(n)= (f(n)). (3)对称性: ➢ f(n)= (g(n)) g(n)= (f(n)) . (4)互对称性: ➢ f(n)= O(g(n)) g(n)= (f(n)) ; ➢ f(n)= o(g(n)) g(n)= (f(n)) ;
巢湖学院计算机科学与技术系
渐近分析记号的若干性质
规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: ➢ 对于任意f1(n) O(f(n)) ,存在正常数c1和自然数n1,使得对
所有n n1,有f1(n) c1f(n) 。 ➢ 类似地,对于任意g1(n) O(g(n)) ,存在正常数c2和自然数
巢湖学院计算机科学与技术系
第1章 算法引论

算法设计与分析基础

算法设计与分析基础

2023/12/21
20
LingJie/GDUT
1.2.6 详细表述该算法的方法
• 可以用到的工具有自然语言(nature
language)、伪代码(pseudocode)以及程序 流程图(flow chart)等。
• 当对一个问题有了概要的理解后,下面的工作
就是把这个问题的想法进行细化。所谓的细化 就是把它们表示成算法的步骤。
令执行顺序以及同步等问题。并行算法的设计 有相应的理论,这里仅考虑串行算法。
2023/12/21
17
LingJie/GDUT
1.2.3 选择精确或者近似的算法
• 解决问题下一步要考虑的是使用精确的还是近
似的算法。并不是每一个可解的问题都有精确 的算法,例如求一个数的平方根,求非线性方 程的解等。有时候一个问题有精确的解法但是 算法的执行效率很差,例如旅行家问题。因此 如果待处理的问题涉及到上述那些方面,则要 考虑是选择精确的还是近似的算法。
2023/12/21
10
LingJie/GDUT
-- 2* 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
-- 2 3*
5
7
9
11
13
15
17
19
21
23
25
-- 2 3
5*
7
11
13
17
19
23
25
-- 2 3
5
7
11
13
第一步:找出m的所有质因数。 第二步:找出n的所有质因数。 第三步:从第一步求得的m的质因数分解式和第二步求得的n
的质因数分解式中,找出所有公因数。 第四步:将第三步找到的公因数相乘,结果为所求的

(完整版)算法设计与分析考试题及答案,推荐文档

(完整版)算法设计与分析考试题及答案,推荐文档
法好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是
____________________________________。 4.若序列 X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列
X 和 Y 的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至

之分。
5、 f(n)= 6×2n+n2,f(n)的渐进性态 f(n)= O(
)
6、 贪心算法总是做出在当前看来
的选择。也就是说贪心算法并不从整体最优考
虑,它所做出的选择只是在某种意义上的

7、 许多可以用贪心算法求解的问题一般具有 2 个重要的性质:
性质和
性质。
二、简答题(本题 25 分,每小题 5 分)
五、算法理解题(本题 5 分) 设有 n=2k 个运动员要进行循环赛,
现设计一个满足以下要求的比赛日程表:
①每个选手必须与其他 n-1 名选手比赛各一次; ②每个选手一天至多只能赛一次;
③循环赛要在最短时间内完成。
我去(人1)如也果 就n=2k有,循人环赛!最少为需要U进R行扼几天腕; 入站内信不存在向你偶同意调剖沙 (2)当 n=23=8 时,请画出循环赛日程表。
六、算法设计题(本题 15 分) 分别用贪心算法、动态规划法、回溯法设计 0-1 背包问题。要求:说明所使用的算法
策略;写出算法实现的主要步骤;分析算法的时间。 七、算法设计题(本题 10 分)
建议收藏下载本文,以便随时学习! 通过键盘输入一个高精度的正整数 n(n 的有效位数≤240),去掉其中任意 s 个数字后, 剩下的数字按原左右次序将组成一个新的正整数。编程对给定的 n 和 s,寻找一种方案, 使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Johnson’s改进算法Max-k-SAT-W(U,C)(二)
1. 2. 3. 4.
5.
6.
对C中的每个项c赋权W(c)=2-|c|。 设SU=,True=,Left=C,Lit=U U , 如果Lit中的任一变量都不出现在Left的任意子句中,则 结束。 设y为Lit中的某变量符号,YT为该包含y的子句的集合, YF为包含y的反变量的子句的集合。 如果YT中子句的权之和不小于YF中子句的权之和,则: True= True{y},SU=SUYT,Left=Left-YT。 YF中所有子句的权加倍。 否则, True= True{ y }, SU=SUYF,Left=Left-YT。 YT中所有子句的权加倍。 Lit=Lit-{y, y },转第3步。
算法Max-k-SAT(U,C)的近似度不大于1+1/k
• 证明:
– 每次将变量y添加到True集合中,肯定满足|C[y]||C[ y ]|。 – 称|C[ y ]|中的项为被y伤害的项。 – 算法结束时,如果某个项未能满足,则该项受伤害的次数 为其含有的变量个数。从而,总的受伤害的次数至少为: k*|Left|。 – 所以有|SU| k*|Left|。则有:|C|= |SU|+|Left|(1+1/k)|SU|。 • A tight example for k=3: S={{x1,x2,x3},{ x1 ,x4,x5},{x 2 ,x6,x7},{x3 ,x8,x9}} 选择三个反变量加入True,只能使3个项满足。 • 为了使受伤害次数较多的项尽可能满足,考虑给项加上权。
1. 2.
3. 4.
5. •
设SU=,True=,Left=C,Lit=U U , 如果Lit中的任一变量都不出现在Left的任意子 句中,则结束。 设y为Lit中的某变量字母,满足在Left中包含y 的子句最多。YT为该包含Y的子句的集合。 SU=SUYT,Left=Left-YT, True=True{y}, Lit=Lit-{y, y}。 转第2步。 注意,上述算法中的y可以为某ui,也可为ui 的反变量,并且默认反变量的反变量为变量 本身。
• 关键引理:设M1是任意可选择的正整数集合,S0为 s E的任意子覆盖,则有: 1
M1
ss0 j 1
j
• 证明:设M0={i:siS0},h=max{|si|:iM0},根据h的 取值进行归纳证明。
– h=0时, M0=,Uncov= , 则M1=,结论成立。 – 假设h=k-1时结论成立。下面证明h=k时亦成立。 – 设M1={j1,…,jt-1},其中r为满足Set[jr]<k 的第一个ji的下标。 设Cov=Set[j1]Set[j2]Set[jr-1],则Cov=Uncov[1]Uncov[r],且 r-1|Cov|/k (1) Set[r ][i] Un cov[r ] – 对于任意的iM0,|Set[r][i]|<k,且 iM 所以{Set[r][i]: iM0}是Uncov[r]的子覆盖,由归纳假设,有:
• A tight Example for k=3 S {{x1 , x2 , x3 },{x1 , x2 , x3 },{x1 , x2 , x3 },{x1 , x2 , x3 },
{x1 , x4 , x5 },{x1 , x6 , x7 },{x1 , x8 , x9 },{x1 , x10 , x11}} 如果第一次选择 x1 加入集合True,则最后只能有7个项满足。
算法Max-k-SAT-W(U,C)的近
– 开始时,Left中所有项的权重不超过|C|/2k。 – 每次循环,集合Left中裁掉的项的权重总和不小于留在Left中被 伤害的项增加的权重总和。 – 所以Left中项的权重总和不会增加。当算法结束时, Left中所 有项的权重不超过|C|/2k。 – 算法结束时,每个不能被满足的项的受伤害次数为它含有的变 量字母个数,从而,每个不能被满足的项的权值为1。 – 即|Left| |C|/2k。 – |SU||C|(1-1/2k)。得证!
i iI
集合覆盖贪心算法Set-Cover(E,S)
1. 2. 3. 4.
5.
I=,Uncov=E,Set[i]=si,1im。 如果Uncov= ,则结束。 选择j,使得|Set[j]|最大。 I=I{j},Uncov=Uncov-Set[j], Set[i]= Set[i]- Set[j] ,1im 。 转第2步。
1
n=1时,显然成立。 假设nk-1时结论成立。 n=k时,算法对u1的真值指派至少满足1/2*|C[u1]C[u1]|个 项。 u1赋值后的项集合C1中不含有u1及其反变量。根据归 纳假设,Max-SAT()对u2un的赋值使可满足的项不小于: 1/2*|C1|。所有算法满足: MaxSAT(U,C) 1/2*|C[u1]C[u1 ]| + 1/2*|C1|=n/2 • 从而算法的近似性能比不超过2。
N 1 1 I M 0 sS0 j 1 j sS0 j 1 j h
1 j 1 j
N
1 j 1 j
N
• A tight case
S0 k!个不相 交的 k-元 素子集, 每个子集 含有一个 Segment 中的一个 点。 Segment 1 k! points
k!个不相交的 1-元素子集。
Design and Analysis of Algorithm 算法设计与分析
朱大铭 教授 山东大学计算机学院 dmzhu@
第八章
• 8.1 组合技术
近似算法设计技术
– Max-SAT问题的2近似性能比算法 – Max-k-SAT问题的
– 集合覆盖问题O(logn)近似性能比算法 – 顶点覆盖问题的2近似性能比算法 – 集合覆盖问题的f近似性能比算法
合取范式最大可满足贪心算法Max-SAT(U,C)


对任一变量
如果含有其本身的项不少于含有其反变量的项
• • • 该变量赋值为T。 将其反变量从所有项中删除。 将所有已满足的项从项集合中删除。 该变量赋值为F。 将该变量本身从所有项中删除。 将所有已满足的项从项集合中删除。

如果含有其本身的项少于含有其反变量的项
iM 0

Set[1][i] Set[r ][i] k
iM 0
1 j Set [ r ][i ] 1 k
set [1][i ]
再由k|Set[1][i]||Set[r][i]|可得:
cov k
由(1)(2)(3)可得:

iM 0

1 j Set [ r ][ i ] 1 j
• 1+1/k近似性能比算法 • 1+1/(2k-1)近似性能比算法
• 8.2 线形规划技术 • 8.3 原始对偶技术 • 8.4 局部搜索技术 • 8.5 随机近似算法
– Max-3-SAT问题的4/3近似度局部搜索算法 – Max-SAT问题的4/3近似度随机算法
第一讲 组合技术
• Max-SAT问题的2近似性能比算法
先讨论算法的性质:
• 定义如下符号:(第i次循环开始时)
– Set[i][j] :可选择的子集数组。1 jm。 – Uncov[i] :未被覆盖的元素构成的集合。 – Set[ji]:第i次循环选择的集合。
• 假设算法共执行t-1次循环,则Uncov[t]=;且对于 i<t, Uncov[i]。 • 则算法可用如下序列R表示:
s
set [1][ i ]
(3)
M 1 t 1
ss0
1 j 1 j
即当h=k时结论成立。
• 设N=max{|si|:siS},则算法的近似性能比不大于 • 证明:设S0为E的最小子覆盖,M0={i:siS0}, h=max{|si|:iM0},显然Nh。设I为算法求得的子覆 盖中集合的下标,则
E Segment k k! points Segment k-1 k! points
S1
k!/k 个不相交的 k-元素子集。 k!/(k-1)个不相交 的 k-元素子集。
第二讲 线性规划、局部搜索和随机算法
• 8.2 线形规划技术
– 顶点覆盖问题的2近似性能比算法 – 集合覆盖问题的f近似性能比算法
• Max-k-SAT问题的
– 1+1/k近似性能比算法 – 1+1/(2k-1)近似性能比算法
• 集合覆盖问题O(logn)近似性能比算法
一、Max-SAT问题
• 实例:布尔变量集合U={u1,u2,…,un},项集合 Ci U U 。其中, C={C1,C2,…,Cm }, U {u1 , u2 ,..., un } 。 • 询问:计算U的真值指派f:U{T,F},使得可满足 项的数目最大。 • 设项Ci={u[i,1], …, u[i,k]} ,Ci可满足的含义是: u[i,1]…u[i,k]=T ,即Ci所含有的布尔变量字母至少有一 个取真值。
R=Set[1][1m],Uncov[1],j1,…,Set[t-1][1m],Uncov[t-1],jt-1,Set[t][1m],Uncov[t].
• 显然每次选择ji后,置集合Set[ji]为空,所以任何集 合均不可能被重复选择。
• I(R)={j1,j2,…,jt-1}表示算法一个运行序列所选择的集 合的下标的集合。 • 对于正整数集合M,如果存在算法的一个运行序列R, 使得M=I(R),则称M为可选择的。 • 根据上面的定义,很显然有: • 设S1S是E的一个子覆盖,M1={i:siS1},则M1是 可选择的,当且仅当存在算法的一个运行序列R, 使得M1=I(R)。
二、Max-K-SAT问题
• 如果对Max-SAT问题的输入子句加以限制,使得每 个子句都至少含有k个布尔变量字母,则得到的子 问题为Max-K-SAT。 • 当K1时,所有的Max-K-SAT问题都是NPC的。 • 下面的算法是Johnson于1974年设计的。
相关文档
最新文档