算法设计与分析 第九章NP问题

合集下载

算法分析设计NP完全问题PPT课件

算法分析设计NP完全问题PPT课件

if(a[j]==x) { cout<<j;
Success();
执行时间都为O(1) //不确定算法成功终止
}
cout<<-1; Failure(); }
若算法执行中需作出一系列的Choice函 数//不选确择定,算当法且失仅败当终C止hoice的任何一组选 择都不会导致成功信号时,算法在O(1)时 间不成功终止。
在不不确确定定搜机索上算执法行:的算法称为不确定算法(non
dveotiedrSmeianricsht(iicntaal[g],oTrxit)hm如)果。一个判定问题实例的解为真,
Hale Waihona Puke {Choice函数每一次总能在O(1)时间
int j=Choice(0,n-1); 内//从做{出0,1导,.致..,n成-1功}中的任正意确选选取择一。个值
即: ✓求解Q1的确定算法是通过调用求解Q2的确定算法完 成的, ✓对Q2算法实施的调用过程所需的时间是多项式时间 的。 那么:只要对问题Q2存在多项式时间求解算法,问题 Q1就能在多项式时间内得以求解。
第15页/共29页
约化存在以下性质: 性质10-1 若Q1∈P,Q2∝Q1,则有Q2 ∈P。 性质10-2 (传递性) 若Q1∝Q2,Q2∝Q3,则Q1∝Q3。
因为:对n个布尔变量赋值需要O(n)时间,计算公式 E(x,n)的时间为O(e),e是公式长度。
所以,可满足性问题的不确定算法时间为O(n+e)。
第13页/共29页
10.1.3 P类和NP类问题
P类问题:可在多项式时间内用确定算法求解的判定 问题。 NP类问题:可在多项式时间内用不确定算法求解的 判定问题。(多项式时间内可验证问题的解。)

第9章 NP完全理论

第9章 NP完全理论

★定义5 令 是一个判定问题,如果:
(1) NP,即问题属于NP类问题
(2)对NP中的所有问题 ‘,都有 '∝p则称
判定问题是一个NP完全问题,简记为NPC。
典型的NP完全问题
Cook在他1971年的论文中指出:所谓的合取范式可满足性
问题就是NP完全问题 。 几个典型的NP完全问题。 (1)图着色问题COLORING (2)路径问题LONG-PATH (3)顶点覆盖问题VERTEX-COVER (4)子集和问题SUBSET-SUM (5)哈密尔顿回路问题HAM-CYCLE (6)旅行商问题TSP (7)装箱问题BIN-PACKING
学习NP完全理论的意义
今天,NP-complete一词已经成为算法设计者在求解规模大而又
复杂困难的问题时所面临的某种难以逾越的深渊的象征。 2000年初,美国克雷数学研究所的科学顾问委员会选定了七个 “千年大奖问题”,该研究所的董事会决定建立七百万美元的大 奖基金,每个“千年大奖问题”的解决都可获得百万美元的奖励。 克雷数学研究所“千年大奖问题”的选定,其目的不是为了形成 新世纪数学发展的新方向,而是集中在数学家们梦寐以求而期待 解决的重大难题上。NP完全问题排在百万美元大奖的首位,足见 它的显赫地位和无穷魅力。 现在,人们已经认识到,在科学和很多工程技术领域里,常常遇 到的许多有重要意义而又没有得到很好解决的难题是NP完全问题。 另外,由于人们的新发现,这类问题的数目不断增加。
顶点覆盖问题的近似算法的性能比为2。
装箱问题
设有n个物品w1, w2, …,wn和若干个体积
均为C的箱子b1, b2, …,bk,…。n个物品 的 体 积 分 别 为 s1, s2, …,sn 且 有 si≤C(1≤i≤n)。要求把所有物品分别装入 箱子且物品不能分割,使得占用箱子数最 少的装箱方案。 算法设计方案:首次适宜法(近似比小于 2)、最适宜法(近似比小于2)、 首次适

算法设计与分析 NP完全问题

算法设计与分析 NP完全问题

NP 完全问题研究P=NP 的问题有两条基本思路:1.证明NP 类中的某些问题是难解的,从而得到NP ≠P 。

但是要证明这一点几乎同证明P=NP 一样困难。

2.考察NP 类中问题之间的关系,从中找到一些具有特殊性质的、与P 类问题显著不同的问题。

沿着这一路线人们已经证明了在NP 类中存在被称为NP 完全的子类,简称NPC 问题,并由此发展了一套著名的NP 完全理论。

本节简要先介绍NP 完全性理论。

为此,首先给出各语言之间的多项式变换的概念。

定义 1 所谓从一个语言*11∑⊆L 到另一个语言*22∑⊆L 的多项式变换是指满足下面两个条件的函数*2*1:∑→∑f ,(1) 存在计算f 的一个多项式时间DTM 程序;(2) 对于所有的*1∑∈x 有:1L x ∈当且仅当2)(L x f ∈。

用21L L ∝表示存在一个从语言1L 到语言2L 的多项式变换。

相应地,对于判定问题21,∏∏,设e 1和e 2是相应的编码策略。

若],[],[2211e L e L ∏∝∏,则记为21∏∝∏。

也可以从问题的层次来叙述:由判定问题1∏到判定问题2∏的多项式变换是满足下列条件的函数21:∏∏→D D f ,(1) f 可由一个多项式时间的确定性算法来计算;(2) 对于所有的1∏∈I D 有:1∏∈I D 当且仅当2)(∏∈I Y f 。

定义2 称一个语言L (判定问题∏)为NP 完全的(NPC ),如果)(NP NP L ∈∏∈,且对于所有别的语言NP L ∈'(判定问题NP ∈∏')均有)'('∏∝∏∝L L 。

按照定义2,要证明问题∏是NP 完全的,需要证明所有的NP 问题均能够经多项式变换变成∏。

这几乎是很难做到的。

如果NP 完全问题比较多,我们也不能对每一个这样的问题都这样验证。

为此我们讨论一些NPC 问题的有用的性质。

性质1 如果L L ∝',则P L ∈意味着P L ∈'。

算法分析与设计

算法分析与设计
m[i][j]=max(m[i+1][j], m[i+1][j-w[i]]+v[i]);
}
m[1][c]=m[2][c]; //当0<=j<w[1]
if (c>=w[1]) //当w[1] <= j
m[1][c]=max(m[1][c], m[2][c-w[1]]+v[1]);
}
3)根据最优值计算最优解
//进行(2)式赋值
for( int i=n-1; i>1; i--) {
jMax=min(w[i]-1,c);
for( int j=0; j<=jMax; j++)
m[i][j]=m[i+1][j]; //当0<=j<w[i]
for(int j=w[i]; j<=c; j++) //当w[i] <= j <= c
Sort(n,v,w); //按物品单位重量的价值降序排序。
int i;
for (i=1;i<=n;i++) x[i]=0;
float c=M;
for (i=1;i<=n;i++) {
if (w[i]>c) break;
x[i]=1;
c-=w[i];
}
if (i<=n) x[i]=c/w[i];//部分装入物品i。
x[n]=(m[n][c]>0)? 1:0;
}
最优子结构性质。
4.为什么用分治法设计的算法一般有递归调用?
解答:
子问题的规模还很大时,必须继续使用分治法,反复分治,必然要用到递归。
5.简述分治法所能解决的问题一般应具有的特征。

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

《算法设计与分析》(全)
巢湖学院计算机科学与技术系
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章 算法引论

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法及其分析》课后选择题答案及详解第1 章——概论1.下列关于算法的说法中正确的有()。

Ⅰ.求解某一类问题的算法是唯一的Ⅱ.算法必须在有限步操作之后停止Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊Ⅳ.算法执行后一定产生确定的结果A.1个B.2个C.3个D.4个2.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是()。

A.T(n)=T(n-1)+1,T(1)=1B.T(n)=2nC.T(n)= T(n/2)+1,T(1)=1D.T(n)=3nlog2n答案解析:1.答:由于算法具有有穷性、确定性和输出性,因而Ⅱ、Ⅲ、Ⅳ正确,而解决某一类问题的算法不一定是唯一的。

答案为C。

2.答:选项A的时间复杂度为O(n)。

选项B的时间复杂度为O(n)。

选项C 的时间复杂度为O(log2n)。

选项D的时间复杂度为O(nlog2n)。

答案为C。

第3 章─分治法1.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

这要求原问题和子问题()。

A.问题规模相同,问题性质相同B.问题规模相同,问题性质不同C.问题规模不同,问题性质相同D.问题规模不同,问题性质不同2.在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面()答案解释最合理。

A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。

但不同方法,算法复杂度上界可能不同3.对于下列二分查找算法,以下正确的是()。

A.intbinarySearch(inta[],intn,int x){intlow=0,high=n-1;while(low<=high){intmid=(low+high)/2;if(x==a[mid])returnmid;if(x>a[mid])low=mid;elsehigh=mid;}return –1;}B.intbinarySearch(inta[],intn,int x) { intlow=0,high=n-1;while(low+1!=high){intmid=(low+high)/2;if(x>=a[mid])low=mid;elsehigh=mid;}if(x==a[low])returnlow;elsereturn –1;}C.intbinarySearch(inta[],intn,intx) { intlow=0,high=n-1;while(low<high-1){intmid=(low+high)/2;if(x<a[mid])high=mid;elselow=mid;}if(x==a[low])returnlow;elsereturn –1;}D.intbinarySearch(inta[],intn,int x) {if(n>0&&x>=a[0]){intlow= 0,high=n-1;while(low<high){intmid=(low+high+1)/2;if(x<a[mid])high=mid-1;elselow=mid;}if(x==a[low])returnlow;}return –1;}答案解析:1.答:C。

算法设计与分析 王红梅 第二版 第9章 分支限界法

算法设计与分析 王红梅 第二版 第9章 分支限界法

6
分支限界法的设计思想
如果某孩子结点的目标函数可能取值超出目标函数的界,则 将其丢弃,因为从这个结点生成的解不会比目前已经得到的 解更好;否则,将其加入待处理结点表(表PT)
依次从表PT中选取使目标函数的值取极值的结点成为当前扩 展结点,重复上述过程,直到找到最优解。
目标函数的界[down, up]的确定
9
分支限界法的设计思想
PT表
2 w=4, v=40 ub=76
1 w=0, v=0 ub=100
3 w=0, v=0 ub=60

w=11 无效解
5 w=4, v=40 ub=70
6 w=9, v=65 ub=69
7 w=4, v=40 ub=64
8
×
w=12
无效解
9 w=9, v=65 ub=65
如TSP问题(图8.6)。
分支限界法
先确定一个合理的限界函数
由限界函数确定目标函数的界[down, up]
仍以穷举法的解空间树为基础,但以广度优先的原理搜 索该结点的所有孩子结点,分别估算这些孩子结点的目 标函数的可能取值
2020/1/12
Branch and Bound Method
2020/1/12
Branch and Bound Method
12
分支限界法的设计思想
在结点7 物品3不装入背包,w=4,v=40,与结点5相同 目标函数值为:ub=40 + (10-4)×4=64 将结点7加入表PT中
在表PT 中选取目标函数值取得极大的结点6 优先进行搜索
在结点8 物品4装入背包,w=12>W, 不满足约束条件,将结点8丢弃;
将结点2加入待处理结点表PT中

《算法设计与分析》第09章

《算法设计与分析》第09章

1 X1=1 0 3 0 5 6 1 0 7
X3=1 0
8 9
1
10
0
11
1
12
0
13
1
14
0
15
状态空间树
分枝限界算法有利于提高算法效率的两个特点:
• 该算法首先扩展上层结点,采用智能化的限界 函数,有利于大范围地剪枝; • 该算法处理活动结点时,只经过一次扩展即列 出所有子结点,而回溯算法每次只扩展一个子 结点,遍历的路径较长。所以效率较高。 • 较高的效率是以付出一定代价为基础的。
0-1背包问题分枝限界算法思路:
1

0 3
X1=1
2 X2=1 4 X3=1 0 8 9 1 10 0 5 0 11 1
1 6 0 13
0
n=3,M=35,W=( 11,21,23),P=(2 1,31,33)
12
按FIFO方式从活 7 动结点表中选 A-结点进行扩 1 0 展,其搜索过 14 15 程为:
– 对状态结点的处理是跳跃式的。 – 算法要维护一个“活动结点表”。需占用较多的空 间
6.2 单源最短路径问题
1. 问题描述
下面以一个例子来说明单源最短路径问题:在下 图所给的有向图G中,每一边都有一个非负边权。要求 图G的从源顶点s到目标顶点t之间的最短路径。
6.2 单源最短路径问题
下图是用优先队列式分支限界法解有向图G的单源最 短路径问题产生的解空间树。其中,每一个结点旁边的 数字表示该结点所对应的当前路长。
顶点i和j间有边,且此 路径长小于原先从原点 到j的路径长
6.3 最小耗费搜索
1.问题描述
设x是所有可行解集合A中的一个可行解,D(x)是找到x 所需要的耗费(如:当这个耗费与该解在T中的深度成正 比时,可以定义D(x)等于x的深度),要求找到一个可行 解x*,使得D(x*)=minD(x) (x∈A)。

计算机算法设计与分析-Chapter9计算机难解问题与NP-完全性

计算机算法设计与分析-Chapter9计算机难解问题与NP-完全性

0-1背包问题在经济规划和装载等应用领域中常常遇到,例如 ,它可以描述一个投资决策问题:有n项可投资的项目,每 个项目需要投入资金Si,可获利润为Pi,现有可用资金总数 为M,应选择哪些项目来投资,可获得最大利润。
9.1.3 子集合(Subset Sum)问题
已知:正整数C和正整数集合S={s1,s2,...,sn}。
合取范式(CNF)是命题公式(propositional formula)(亦称 Boolean表达式)的标准形式,它是由命题变元(或布尔变量) 、布尔常量(F或T)以及布尔运算符(与∧、或∨、非┐)组 成。
一个CNF形如:A1∧A2∧...∧Am,子句Ai形如:a1∨a2∨... ∨ak 。其中aj(1≤j≤k)为某一布尔变量或是该变量的非。
K = min {C(V) || C(V)为G的着色方案}。
图着色(Graph Coloring)问题,就是求图G=<V,E>的色数K。
除交通信号灯问题外,课程时间表问题也可归结为GC问题。 例如,有n门课的考试,每次考试用一个课时,如果课程i和课 程j有同一学生选修,则两门课的考试不能同时进行,希望用 最少的课时数(教室不限)完成n门考试。
无向图G=<V,E>的团集问题:求G的最大团集。
例如,在Fig9.1中的5顶点 无向图中,由V1、V2、 V4及相应的边组成一个三 点团集,它就是一个最大 团。
任何无向图的一个顶点是一个一点平凡团集,由一边连接的 两个顶点形成一个两点团集。问题的复杂性来源于,若图G有 一个k点团集,并且要证明它没有k+1点的完全子图。n个顶点 的k+1点子集的组合数是n的指数函数,因此无法设计出一个 多项式阶时间复杂度的函数判断图G是否包含一个k+1点完全 子图。

算法分析与设计(习题答案)

算法分析与设计(习题答案)

算法分析与设计教程习题解答第1章 算法引论1. 解:算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列计算方法。

频率计数是指计算机执行程序中的某一条语句的执行次数。

多项式时间算法是指可用多项式函数对某算法进行计算时间限界的算法。

指数时间算法是指某算法的计算时间只能使用指数函数限界的算法。

2. 解:算法分析的目的是使算法设计者知道为完成一项任务所设计的算法的优劣,进而促使人们想方设法地设计出一些效率更高效的算法,以便达到少花钱、多办事、办好事的经济效果。

3. 解:事前分析是指求出某个算法的一个时间限界函数(它是一些有关参数的函数);事后测试指收集计算机对于某个算法的执行时间和占用空间的统计资料。

4. 解:评价一个算法应从事前分析和事后测试这两个阶段进行,事前分析主要应从时间复杂度和空间复杂度这两个维度进行分析;事后测试主要应对所评价的算法作时空性能分布图。

5. 解:①n=11; ②n=12; ③n=982; ④n=39。

第2章 递归算法与分治算法1. 解:递归算法是将归纳法的思想应用于算法设计之中,递归算法充分地利用了计算机系统内部机能,自动实现调用过程中对于相关且必要的信息的保存与恢复;分治算法是把一个问题划分为一个或多个子问题,每个子问题与原问题具有完全相同的解决思路,进而可以按照递归的思路进行求解。

2. 解:通过分治算法的一般设计步骤进行说明。

3. 解:int fibonacci(int n) {if(n<=1) return 1;return fibonacci(n-1)+fibonacci(n-2); }4. 解:void hanoi(int n,int a,int b,int c) {if(n>0) {hanoi(n-1,a,c,b); move(a,b);hanoi(n-1,c,b,a); } } 5. 解:①22*2)(−−=n n f n② )log *()(n n n f O =6. 解:算法略。

算法设计与分析王红梅NP完全理论PPT课件

算法设计与分析王红梅NP完全理论PPT课件
❖ 关键——存在一个确定性算法,能够以多项式时间来检 查和验证猜测阶段所产生的答案。 例: NP类问题——Hamilton问题
汉诺塔问题不是NP类问题
第14页/共33页
P类问题和NP类问题的主要差别: ✓ P类问题可以用多项式时间的确定性算法来 进行判定或求解; ✓ NP类问题可以用多项式时间的非确定性算法 来进行判定或求解。
通常将存在多项式时间算法的问题看作是易解问题 (Easy Problem),将需要指数时间算法解决的问题 看作是难解问题(Hard Problem)。
例:易解问题——排序问题、查找问题、欧拉回路 难解问题——TSP问题、 Hanio问题、Hamilton回路
第7页/共33页
为什么把多项式时间复杂性作为易解问题和 难解问题的分界线?
第3页/共33页
例:对三个数进行排序的判定树

a1<a2


a2<a3


a1<a3

a1<a2<a3
a1<a

3
a2<a1<a3 否
a2<a

3

a1<a3<a2
a3<a1<2
a2<a3<a1
a3<a2<a1
第4页/共33页
2.1.3 最优算法
所谓最优算法(Optimality Algorithm)是 指在某一种度量标准下,优于该问题的所有 (可能的)算法。
第24页/共33页
定义2.7 令Π是一个判定问题,如果对于NP类 问题中的每一个问题Π',都有Π'∝pΠ,则称判定 问题Π是一个NP难问题。

算法设计技巧与分析:第九讲 NP完全问题

算法设计技巧与分析:第九讲 NP完全问题

• 最优化问题: MAX-CLIQUE.
输入:一个无向图G=(V,E). 输出:一个正整数k,它是G中最大团集的大小
Algorithms Design Techniques and Analysis
• 如果我们有一个求解判定问题的有效算法,那么很容易把 它变成求解与它相对应的最优化问题的算法。 • 例如,我们有一个求解图着色判定问题的算法A,则可以 用二分搜索并且把算法A作为子程序来找出图G的色数。 很清楚,1<=x (G)<=n,这里n是G中顶点数,因此仅用 O(1og n)次调用算法A就可以找到G的色数。由于我们正处 理多项式时间的算法, log n因子是不重要的。
• 定理 10.1
• P类问题在补运算下是封闭的。
Algorithms Design Techniques and Analysis
Algorithms Design Techniques and Analysis
例子 10.3
给出一个无向图G=(V,E),对于某个正整数k, G中大 小为k的团集,是指G中有k个顶点的一个完全子图。 团集问题是问一个无向图是否包含一个预定大小的 团集。 • 判定问题: CLIQUE.
输入:一个无向图G=(V,E)和一个正整数k。 问题: G有大小为k的团集吗?
Algorithms Design Techniques and Analysis
P类的问题
• 2着色问题: • 给出一个无向图G ,它是否是2可着色的?即它的顶点是否可仅用 两种颜色着色,使两个邻接顶点不会分配相同的颜色?注意,当且 仅当G是二分图,即当且仅当它不包含奇数长的回路时,它是2可 着色的。
2.47×1041 1024
观察结论:n≤100时,(不自然的)多项式函数值大于指数 函数值,但n充分大时,指数函数仍然超过多项式函数。

算法设计与分析 NP类问题

算法设计与分析 NP类问题

NP 类问题不难看出,上面定义的P 类语言只能用来描述那些存在有效算法(多项式时间)的问题。

然而,在实际中存在许多别的重要问题,对于它们,至今尚未找到有效的求解算法。

其中有一大类这样的问题,虽然不知道求解它们的有效算法,但是,一旦通过某种办法给出了其答案的一个猜测或估计,就能设计出一个多项式时间算法来验证其真实性(称为多项式时间可验证性)。

这类问题的分析和描述需要借助另一类图灵机作为计算模型。

非确定性单带图灵机(non-deterministic one-tape Turing machine),简记为NDTM ,是一种假想的机器。

通常有两种方式描述它:多值模型和猜想模块模型。

多值模型认为它和确定性图灵机的共同之处是也包括:(a).带中字符集Γ,使得Γ⊂∑,且 ∑-Γ∈b ;(b).有限状态集},,{0q q q Q N Y ⊇;不同之处在于(c).多值转移函数},{2}),{\(:r l Q N Y q q Q ⨯Γ⨯→Γ⨯δ,},{),(r l Q S s q ⨯Γ⨯⊆ ,确定性图灵机在任一状态只能做一种运算,而非确定性图灵机在同一时刻可以独立、并行地完成(无限)多种运算(表现在转移函数的多值性),这显然是不现实的。

猜想模块模型是一种更形象、直观的描述方法。

可将NDTM 描述成:除多了一个猜想模块(guessing module )外,NDTM 与DTM 有着完全相同的结构,而这个猜想模块带有自己的仅可对带写操作的猜想头,它提供写下猜想的方法,仅此而已。

非确定性图灵机(NDTM )示意图基于这一模型,一个NDTM 程序可以类同于一个DTM 程序的方式来进行定义,并用相同的记号(包括带中字符集Γ,输入字符表∑,空白符号b ,状态集Q ,初始状态0q ,两个停机状态Y q 和N q ,以及状态转移函数},{}),{\(:r l Q q q Q N Y ⨯Γ⨯→Γ⨯δ猜想模块 有限状态控制器 … -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 … 猜想头 读写头但对于一个输入*∑∈x ,NDTM 程序的计算却与DTM 程序的不同,它把计算分为两个阶段:猜想阶段和检验阶段。

计算机算法设计与分析-Chapter9计算机难解问题与NP-完全性

计算机算法设计与分析-Chapter9计算机难解问题与NP-完全性

9.1.5 作业调度(Job Scheduling)问题
已知:n项作业J1,...,Jn将按照某种次序依次完成,它们所需的 执行时间为t1,...,tn,要求最迟完成的时间(deadlines)为 d1,...,dn(从第一项作业开始执行的时间开始计算),以及逾 期未能完成该项作业的罚款数为P1,...,Pn。
已知n点图G=<V,E>,求对G的n个顶点进行着色的一种方法( 相邻顶点颜色不同),使得所用颜色的总数最小。
问题的答案是一种着色方案,为每个顶点赋一种颜色,当然 ,最优着色方案找到时,其(最小)色数也就找到了。
2、 求值形式: 已知n点图G=<V,E>,求图G的色数k。(指为图G着色,使相 邻顶点颜色不同的最小色数)。 问题的答案是一个值,一般情形下,在色数k的计算过程中也 可以得到用k种颜色进行着色的方法。 Graph Coloring问题的求解形式与求值形式称为优化问题( Optimization Problem),一般也称为组合优化(Combinatorial Optimization)问题。二者之间只需要经过简单的计算或处理 就可相互转化,更多的情形是着色算法可以同时满足求解和 求值的要求。
9.2.2 问题求解与判定问题
判定问题实际上是要判定一个元素或对象是否属于某一特定 集合。
例如在SAT问题中,所有的CNF逻辑公式(或称布尔表达式) 的集合为全集U,满足SAT条件的CNF,即存在一组逻辑赋值 使其取真值的所有CNF的集合 称为可满足集。判定问题 SAT就是要对任一输入x∈U,判定x是否属于S,因此其回答 是“yes”或“no”。
n 10 100 1000 10000
T1(n)
T2(n)
0.00033Sec 0.0015Sec

算法分析第9章(10)

算法分析第9章(10)


NP完全问题 P NP
17
9.2 P类问题、NP类问题和NP完全问题
三、 NP完全问题

NP完全问题有一种令人惊奇的性质,即如果一个NP完全问题
能在多项式时间内得到解决,那么NP中的每一个问题都可以 在多项式时间内求解,即P=NP。

目前还没有一个NP完全问题有多项式时间算法。
18
9.2 P类问题、NP类问题和NP完全问题
log | i | i 0 l (i ) 1 i0
9
9.1 计算模型
二、随机存取存储程序机RASP 1、RASP的结构
RASP的整体结构类似于RAM。 不同的是: RAM不是存储中存储器中,程序不能修改其自身,而 RASP的程序是存储在存储器中并能修改自身。 RASP不允许使用间接寻址。 RASP存储在寄存器中的。每条RASP指令占据2个连续的 寄存器。第一个寄存器存放操作码的编码,第二个寄存器 存放地址。RASP指令用整数进行编码。
9.1 计算模型
3、 RAM程序的耗费标准
标准一:均匀耗费标准 在均匀耗费标准下,每条RAM指令需要一个单位时间;每 个寄存器占用一个单位空间。以后除特别注明,RAM程序的复杂 性将按照均匀耗费标准衡量。 标准二:对数耗费标准 对数耗费标准是基于这样的假定,即执行一条指令的耗费 与以二进制表示的指令的操作数长度成比例。在RAM计算模型下, 假定一个寄存器可存放一个任意大小的整数。因此若设l(i)是整 数i所占的二进制位数,则
92p类问题np类问题和np完全问题19四一些典型的np完全问题部分np完全问题树92p类问题np类问题和np完全问题合取范式的可满足性问题三元合取范式的可满足性问题团问题顶点覆盖问题子集和问题哈密顿回路问题旅行售货员问题20第一个np完全问题

算法设计与分析_05NP完全问题-一些重要的概念..

算法设计与分析_05NP完全问题-一些重要的概念..
算法设计与分析
——NP完全问题
2018/10/6
算法设计与分析演示稿 纪玉波制 作(C)
1
一、一些重要的概念
1、多项式时间算法和难解问题
• 不同的算法具有很不相同的时间复杂性函数,什么样的算法算作 “效率高”,什么样的算法算作“效率低”,计算机科学家们公 认一种简单的区别,这就是多顶式时间算法(polynomial time algorithm)和指数时间算法(exponential time algorithm)之间的区别。Cobham[1964]和Edmonds[1965]首先 讨论了这种区别的基本性质。特别是Edmonds把多项式时间算法与 “好的”算法等同看待,并且猜想某些整数规划问题可能不能用 这种“好的”算法求解。这反映了一种观点,认为指数时间算法 不应该算作“好的”算法。通常也的确是这样的。大多数指数时 间算法只是穷举搜索法的变种,而多项式时间算法通常只有在对 问题的结构有了某些比较深入的了解之后才有可能给出。艰多人 都认为只有知道了问题的多项式时间算法才能认为“很好地解决 了”这个问题。因此,如果一个问题困难到不可能用多项式时间 算法求解,那末我们就认为这个问题是“难解的”。
算法设计与分析演示稿 纪玉波制 作(C)
19
2018/10/6 算法设计与分析演示稿 纪玉波制 作(C) 15
现在认为NP完全问题是否是难解的这一向题是当代 数学和计算机科学中尚未解决的最重要问题之一。尽管 大多数研究工作者猜想NP完全问题是难解的,然而在证 明或否定这个广泛的猜想方面几乎没有取得什么进展。 但是,即使没有证明NP完全性蕴涵难解性,知道一个问 题是NP完全的至少暗示着要想用多项式时间算法解这个 问题必须有重大的突破。
2018/10/6
算法设计与分析演示稿 纪玉波制 作(C)

第9章 图算法设计-算法设计与分析(第2版)-李春葆-清华大学出版社

第9章 图算法设计-算法设计与分析(第2版)-李春葆-清华大学出版社

{ lowcost[j]=g.edges[k][j];
closest[j]=k;
}
}
}
Prim()算法中有两重for循环,所以时间复杂度为O(n2),其中n为 图的顶点个数。
3. 普里姆算法的正确性证明
普里姆算法是一种贪心算法。对于带权连通无向图G=(V,E),采用 通过对算法步骤的归纳来证明普里姆算法的正确性。
8
2
4
3
6
lowcost[1]最小,将k=1添加到U中
U
0
6
1
仅修改V-U中顶点j:
1
4 3
g.edges[k][j]<lowcost[j] 调整
5
6
2
lowcost[j]=g.edges[k][j]
7
5
8
4
3
6
2
V-U
closest[j]=k
Prim(g,v)算法利用上述过程构造最小生成树,其中参数g为带权 邻接矩阵,v为起始顶点的编号。
k=j;
//k记录最近顶点的编号
}
printf(" 边(%d,%d)权为:%d\n",closest[k],k,mincost);
lowcost[k]=0;
//标记k已经加入U
for (j=0;j<g.n;j++)
//修改数组lowcost和closest
if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])
void Prim(MGraph g,int v)
//Prim算法
{ int lowcost[MAXV];
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章 NP -完全问题§1 关于问题及算法的描述为了应用算法复杂性理论,首先要对问题、问题的一般描述、计算模型、算法、算法的复杂性给出严格的定义。

但在给出精确定义之前,我们先回顾一下有关概念的粗略解释。

所谓一个问题(problem)是指一个有待回答、通常含有几个值还未确定的自由变量的一个一般性提问(question)。

它由两部分决定:一是对其所有参数的一般性描述;二是对该问题的答案所应满足的某些特性的说明。

而一个问题的某个例子则可通过指定问题中所有参数的具体取值来得到。

以下用II 表示某个问题,用I 表示其例子。

例1.1 旅行商问题该问题的参数是由所需访问城市的一个有限集合},,,{11m C C C C =和C 中每对城市j i C C ,之间的距离),(j i C C d 所组成。

它的一个解是对所给城市的一个排序),,,()()2()1(m C C C πππ ,使得该排序极小化下面表达式(目标函数)的值),(),()1()()1(11)(ππππC C d C C d m i m i i ++-=∑旅行商问题的任一个例子的是通过限定城市的数目,并指定每两个城市之间的具体距离而得到的。

例如:{}4321,,,C C C C C =,10),(,10),(,10),(,10),(,10),(,10),(212121212121======C C d C C d C C d C C d C C d C C d 就构成了一个具体例子,而这个例子的一个解是排序4321,,,C C C C ,因为四个城市的这个排序所对应旅行路线是所有能旅行路线中长度最小的,且为27。

所谓算法(algorithm)是指用来求解某一问题的、带有一般性的一步一步的过程。

它是用来描述可在许多计算机上实现任一计算流程的抽象形式,其一般性可以超越任何具体实现时的细节。

注意,复杂性理论中对算法的定义与我们通常理解的具体算法-用某种计算机语言编写的、可在某一特定计算机上实现的计算机程序-不同。

不过,将算法想象为某个具体的计算机程序在许多情况下可以帮助我们理解有关概念和理论。

称一个算法求解一个问题II ,是指该算法可以应用到II 的任一个例子I ,并保证能找到该例子的一个解。

广义地讲,一个算法的有效性可以用执行该算法所需要的各种计算资源的量来度量,最典型、也是最主要的两个资源就是所需要的时间和内存空间。

但时间需求常常是决定某一特定算法在实际中是否真正有用和有效的决定性因素。

应该注意到,由于计算机速度和指定系统的不同,同一算法所需时间的多少随着计算机的不同可能有很大差别。

为使其具有一般性和在实际中有用,所给时间的度量不应该依赖于具体计算机,即是说,如果它们用不同的编程语言来描述,或在不同的计算机上运行,好的算法仍然保持为好的。

另一点需要注意的是,即使同一算法和同一计算机,当用它来解某一问题的不同例子时,由于有关参数取值的变化,使得所运行时间也有很大差别。

对于前一个问题的解决,人们提出了一些简单但又能反映绝大多数计算机的基本运作原理的计算模型,如各种形式的图灵(Turing)机、随机存储机(RAM)等,然后基于这些计算模型来研究算法。

对于第二个问题的解决,人们引进了问题例子大小(size)的概念。

所谓一个问题例子的大小是指为描述或表示它而需要的信息量。

只要表示的合适,可望例子的大小的值应该与求解的难易程度成正比。

并称相应的标识法为编码策略(encoding scheme)。

事实上,作为输入提供给计算机的任一问题例子的描述可以看作是从某一有限字母表中选取所需的字符而构成的有限长字符串。

通常称该字母表中的字符为码,而由其中之字符如何组成描述问题例子的字符串的方法则称为编码策略。

合理的编码策略应该具有可解码性(decodability)和简洁性(conciseness)。

一种典型的方法就是利用所谓的结构化字符串、通过递归、复合的方式来给出所考虑问题的合理编码策略。

给定任一问题II ,假设已经找到描述问题例子的一个合理编码策略e ,则对II 的任一例子I ,称其依编码策略e 所得的相应字符串描述中所含有字符的个数为其输入长度,并将该输入长度的具体值作为例子I 的大小的正式度量。

例如,若用字母表}9,8,7,6,5,4,3,2,1,0/,],[,,{C 中的字符表示旅行商问题的具体例子,则前面所给该问题的具体例子可以用字符串"3//9//6//9//5//10//]4[]3[]2[]1["C C C C 来描述,其相应的输入长度为32,从而,称这个例子的大小为32。

目前广泛采用的描述问题的方法主要有两种:一是将任一问题转化为所谓的可行性检验问题(feasibility problem),二是把问题转化为判定问题(decision problem)。

这里,我们采用后一种形式。

实际中几乎所有问题都可直接或间接地转述为判定问题。

判定问题是答案只有“是”与“非”两种可能的问题。

一个判断问题II 可简单地由其所有例子的集合II D 与答案为是的例子所构成的子集II II D Y 刻划。

不过,为了反映实际问题所具有的特性,通常所采用的标准描述方法由两部分组成。

第一部分用诸如集合、图、函数等各种描述分量来刻划判定问题的一般性例子,以下用“例子”表示这一部分;第二部分则陈述基于一般性例子所提出的一个“是非”提问,以下简称“问题”。

因此,一个例子属于II D 当且仅当它可通过用具有特定性质 的某些对象替代一般性例子所有一般性描述分量而得到,而一个例子属于II Y 当且仅当限定于该例子时,它对所述提问的回答为“是”。

例 1.2 待访问城市的有限集合},,,{21m C C C C =、每对城市j i C C ,C ∈之间的距离+∈Z C C d j i ),(以及一个界+∈Z B 。

问题 在C 存在一个总长不超过B 的、通过所有城市的旅行路线吗?也就是说,存在C 的一个排序),,,()()2()1(m C C C πππ 使得BC C d C C d m i m i i ≤++-=∑),(),()1()()1(11)(ππππ这是一个将优化问题转化成判定问题的例子。

一般地,一个优化问题可以看作是其所有实例的集合。

而每一个实例为一个元素对),(c F ,其中F 是可行解集,而c 是目标函数。

一个最优化问题可以提出下述三种模式:✓ 最优化模式:求最优解;✓ 求值模式:求出最优值;✓ 判定模式:给定一个实例),(c F 和一个整数L ,问是否存在一个可行解F f ∈,使得L f c ≤)(?显然,在求解最优值不太困难的假设下,上述三种模式的每一种都不比前一种困难。

一般而且比较现实的假设是:最优值是一个整数,且这个整数或其绝对值的对数被输入长度的一个多项式所界定。

在这种情况下,用二分搜索(或叫折半搜索)技术证明,只要判定模式存在多项式时间算法,求值模式也存在多项式时间算法。

为了给出算法的严格定义,我们借助于“语言”这一术语。

设∑是一个字符集,用*∑表示由∑中的字符组成的所有有限长度字符串的集合。

*∑的任何非空子集L 都称为∑上的一个语言(language)。

例如{01,001,111,1010110}就是字符集{0,1}上的一个语言。

判定问题于语言之间的对应关系是通过编码策略来实现的。

一旦选定了某个字符集∑,则对于任一个判定问题II 及其编码策略e ,II 和e 将会把*∑中的所有字符串划分为三部分:那些不是II 的例子的编码、那些对II 的回答为“非”的例子的编码和那些对II 的答案为“是”的例子的编码。

这后一类编码正是要与II 通过e 来联系的语言。

定义:}e e |{],[*下的编码在为某个例子所使用的字符集,为II Y I x x e II L ∈∑∑∈=如果一个结论对语言],[e II L 成立,则说它在编码策略e 下对问题II 成立。

计算复杂性理论所直接考虑的是对语言或字符串集的分析。

对于任何两个合理的编码策略e 和e ’,问题II 的某个性质要么对],[e II L 和]',[e II L 均成立,要么对二者均不成立。

因此,可以直接说某个性质对II 成立或不成立,常常将],[e II L 简记为][II L 。

但是,这样的省略却失去了对输入长度的具体确定办法,而我们还需要象这样的一个参变量以便能确切表述复杂性的概念。

为此,以后总是隐含假定:对每个判定问题II ,均有一个不依赖于编码方式的函数Length :+→Z D II该函数的值将与从任一合理的编码策略所得的关于II 的任一例子的输入长度多项式相关。

这里,多项式相关是指:对于II 的任一合理编码策略e ,都存在两个多项式p 和'p ,使得如果II D I ∈且x 为I 在e 下的编码,则有])[('|||)(|][I Length p x x p I Length ≤≤且这里,||x 表示字符串x 的长度。

易知,II 的任何两个合理的编码策略将导出多项式相关的输入长度。

例如,对于旅行商问题对应的判定问题的任一例子I ,可以定义⎡⎤⎡⎤{}C C C C C d B m I Length j i j i ∈++=,|),(lb max lb ][这里,x lb 表示x 2log 。

在下面的陈述中,我们也交替地使用(判定)问题、语言这两个术语而不加区分。

§2 图灵机与确定性算法为了给出算法的精确定义,我们需要选定一种可用于描述计算的计算模型。

第一个给出这种模型的是英国数学家图灵,后人称他所提出的模型为图灵机。

图灵机本质上是一个具有存储载体(通常用一个带有无限多个方格线性带表示)的、按照具体指令可完成左或右移动、放置标记、抹去标记以及在计算终止时停机等四种基本操作的、用于描述算法的语言。

在原理上,与我们用于和计算机交流的,更为复杂的各种程序语言同样有力。

由于其简单性,图灵机及其各种变形已被广泛用于计算复杂性的理论研究。

在此,首先选择确定性单带图灵机(deterministic one-tape Turing machine),简称确定图灵机,记为DTM 。

一个DTM 是由一个有限状态控制器、一个读写头和一条双向的具有无限多个带格的线性带所组成。

如下图读写头一个DTM 程序(program)应详细规定下列信息:(a).带中所用字符的一个有限集合Γ,它应包含输入字符表子集Γ⊂∑和一个特别的空白符号 ∑-Γ∈b ;(b).一个有限状态集Q ,它包括初始状态0q 和两个特有的停机状态N Y q q 和。

(c).一个转移函数},{}),{(:r l Q q q Q N N ⨯Γ⨯→Γ⨯-δ。

这样一个程序运行很简单。

相关文档
最新文档