算法设计技巧与分析第八章课后答案概要

合集下载

算法设计与分析王红梅第二版第8章_回溯法详解

算法设计与分析王红梅第二版第8章_回溯法详解

2018/10/15
Chapter 8 Back Track Method
10
概述 -问题的解空间
可行解:满足约束条件的解,解空间中的一个子集
最优解:
使目标函数取极值(极大或极小)的可行解,一个或少数几个 例:货郎担问题,有nn种可能解。n!种可行解,只有一个或 几个是最优解。 例:背包问题,有2n种可能解,有些是可行解,只有一个或 几个是最优解 有些问题,只要可行解,不需要最优解: 例:八皇后问题和图的着色问题
7
概述 -问题的解空间

例:0/1背包问题中,xi 有0/1 两种取值,则S={0,1}, 当n=3时,0/1背包问题的解空间是:
{(0,0,0), (0,0,1), (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0), (1,1,1)}
即:当输入规模为n 时,有2n 种可能的解。 例:货郎担问题,S={1,2,…,n},当n=3时,S={1,2,3} 。 货郎担TSP问题的解空间中的可能解有27个,是:
0 3 0 15
对物品2的选择
对物品3的选择
2018/10/15
Chapter 8 Back Track Method
12
概述 -问题的解空间
例:对于n=4 的TSP 问题,图8.3是经压缩后的解空间树,树中的24 个叶子结 点分别代表该问题的24 个可能解,例如结点5 代表一个可能解,路径为 1→2→3→4→1,长度为各边代价之和。
2018/10/15 Chapter 8 Back Track Method 2
学习目标
教学重点 教学难点 回溯法的设计思想,各种经典问题的回溯思想 批处理作业调度问题的回溯算法

算法设计与分析_王红梅_课后答案网(部分)

算法设计与分析_王红梅_课后答案网(部分)

第六章动态规划法• P137 2 ,3, 4•2.解答:cost[i]表示从顶点i 到终点n-1 的最短路径,path[i]表示从顶点i 到终点n-1 的路径上顶点i 的下一个顶点。

cost[i]=min{cij+cost[j]}3 有5 个物品,其重量分别是{3, 2, 1, 4,5},价值分别为{25, 20, 15, 40, 50},背包的容量为6。

V[i][j]表示把前i 个物品装入容量为j 的背包中获得的最大价值。

最优解为(0,0,1,0,1)最优值为65. 4.序列A =(x, z , y , z , z , y,x ),B =(z , x , y , y , z , x , z ),建立两个(m+1)×(n+1)的二 维表L 和表S ,分别存放搜索过程中得到的子序列的长度和状态。

z , x , y , y , z,x , z )path[i]= 使 cij+cost[j] 最小的 j i 012345678 9 10 11 12 13 14 15 Cost[i] 18 13 16 13 10 9 12 7 6875943Path[i]145778911 11 11 13 14 14 15 15 0得到最短路径 0->1->4->7->11->14->15 , 长度为 18(a)长度矩阵L(b)状态矩阵S 。

第七章贪心算法2.背包问题:有7 个物品,背包容量W=15。

将给定物品按单位重量价值从大到小排序,结果如下:个物品,物品重量存放在数组w[n]中,价值存放在数组放在数组x[n]中。

按算法7.6——背包问题1.改变数组w 和v 的排列顺序,使其按单位重量价值v[i]/w[i]降序排列;2.将数组x[n]初始化为0;//初始化解向量3.i=1;4.循环直到( w[i]>C )4.1 x[i]=1; //将第i个物品放入背包4.2 C=C-w[i];4.3 i++;5. x[i]=C/w[i];得出,该背包问题的求解过程为:: x[1]=1;c=15-1=14 v=6 x[2]=1; c=14-2=12V=6+10=10 x[3]=1; c=12-4=8V=16+18=34 x[4]=1; c=8-5=3V=34+15=49 x[5]=1; c=3-1=2 V=49+3=52x[6]=2/3 ; c=0; V=52+5*2/3=156/3 最优值为156/3 最优解为(1,1,1,1,1,2/3,0)) (x[i]按排序后物品的顺序构造)5.可以将该问题抽象为图的着色问题,活动抽象为顶点,不相容的活动用边相连(也可以将该问题理解为最大相容子集问题,重复查找剩余活动的最大相容子集,子集个数为所求).具体参见算法7.3 算法7.3——图着色问题1.color[1]=1; //顶点1着颜色12.for (i=2; i<=n; i++) //其他所有顶点置未着色状态color[i]=0;3.k=0;4.循环直到所有顶点均着色4.1k++; //取下一个颜色4.2for (i=2; i<=n; i++) //用颜色k 为尽量多的顶点着色4.2.1 若顶点i已着色,则转步骤4.2,考虑下一个顶点;4.2.2 若图中与顶点i邻接的顶点着色与顶点i着颜色k 不冲突,则color[i]=k;5.输出k;第八章回溯法4.搜索空间(a) 一个无向图(b) 回溯法搜索空间最优解为(1,2,1,2,3)5.0-1 背包问题n∑w i x i≤c 1• 可行性约束函数:i =1• 上界函数:nr =∑Vi5 = 3A B *CD8 ** * 131 =12 =23 = 14 = 2 34215课后答案网()i=k+1 1第九章分支限界法5,解:应用贪心法求得近似解:(1,4,2,3),其路径代价为:3+5+7+6=21,这可以作为该问题的上界。

《计算机算法-设计与分析导论》课后习题答案共39页word资料

《计算机算法-设计与分析导论》课后习题答案共39页word资料

4.1:在我们所了解的早期排序算法之中有一种叫做Maxsort 的算法。

它的工作流程如下:首先在未排序序列(初始时为整个序列)中选择其中最大的元素max ,然后将该元素同未排序序列中的最后一个元素交换。

这时,max 元素就包含在由每次的最大元素组成的已排序序列之中了,也就说这时的max 已经不在未排序序列之中了。

重复上述过程直到完成整个序列的排序。

(a) 写出Maxsort 算法。

其中待排序序列为E ,含有n 个元素,脚标为范围为0,,1n -K 。

void Maxsort(Element[] E) { int maxID = 0;for (int i=E.length; i>1; i--) { for (int j=0; j<i; j++) {if (E[j] > E[maxID]) maxID = k; E[i] <--> E[maxID];(b) 说明在最坏情况下和平均情况下上述算法的比较次数。

最坏情况同平均情况是相同的都是11(1)()2n i n n C n i -=-==∑。

4.2:在以下的几个练习中我们研究一种叫做“冒泡排序”的排序算法。

该算法通过连续几遍浏览序列实现。

排序策略是顺序比较相邻元素,如果这两个元素未排序则交换这两个元素的位置。

也就说,首先比较第一个元素和第二个元素,如果第一个元素大于第二个元素,这交换这两个元素的位置;然后比较第二个元素与第三个元素,按照需要交换两个元素的位置;以此类推。

(a)起泡排序的最坏情况为逆序输入,比较次数为11(1)()2n i n n C n i -=-==∑。

(b) 最好情况为已排序,需要(n-1)次比较。

4.3: (a)归纳法:当n=1时显然成立,当n=2时经过一次起泡后,也显然最大元素位于末尾;现假设当n=k-1是,命题也成立,则当n=k 时,对前k-1个元素经过一次起泡后,根据假设显然第k-1个元素是前k-1个元素中最大的,现在根据起泡定义它要同第k 个元素进行比较,当k 元素大于k-1元素时,它为k 个元素中最大的,命题成立;当k 元素小于k-1元素时,它要同k-1交换,这时处于队列末尾的显然时队列中最大的元素。

算法设计与分析智慧树知到课后章节答案2023年下山东交通学院

算法设计与分析智慧树知到课后章节答案2023年下山东交通学院

算法设计与分析智慧树知到课后章节答案2023年下山东交通学院山东交通学院第一章测试1.解决一个问题通常有多种方法。

若说一个算法“有效”是指( )A:这个算法能在一定的时间和空间资源限制内将问题解决B:这个算法能在人的反应时间内将问题解决C:这个算法比其他已知算法都更快地将问题解决D:(这个算法能在一定的时间和空间资源限制内将问题解决)和(这个算法比其他已知算法都更快地将问题解决)答案:(这个算法能在一定的时间和空间资源限制内将问题解决)和(这个算法比其他已知算法都更快地将问题解决)2.农夫带着狼、羊、白菜从河的左岸到河的右岸,农夫每次只能带一样东西过河,而且,没有农夫看管,狼会吃羊,羊会吃白菜。

请问农夫能不能过去?()A:不一定B:不能过去 C:能过去答案:能过去3.下述()不是是算法的描述方式。

A:自然语言 B:E-R图 C:程序设计语言 D:伪代码答案:E-R图4.有一个国家只有6元和7元两种纸币,如果你是央行行长,你会设置()为自动取款机的取款最低限额。

A:40 B:29 C:30 D:42答案:305.算法是一系列解决问题的明确指令。

()A:对 B:错答案:对6.程序=数据结构+算法()A:对 B:错答案:对7.同一个问题可以用不同的算法解决,同一个算法也可以解决不同的问题。

()A:错 B:对答案:对8.算法中的每一条指令不需有确切的含义,对于相同的输入不一定得到相同的输出。

( )A:错 B:对答案:错9.可以用同样的方法证明算法的正确性与错误性 ( )A:错 B:对答案:错10.求解2个数的最大公约数至少有3种方法。

( )A:对 B:错答案:错11.没有好的算法,就编不出好的程序。

()A:对 B:错答案:对12.算法与程序没有关系。

( )A:错 B:对答案:错13.我将来不进行软件开发,所以学习算法没什么用。

( )A:错 B:对答案:错14.gcd(m,n)=gcd(n,m m od n)并不是对每一对正整数(m,n)都成立。

算法设计与分析-课后习题集答案

算法设计与分析-课后习题集答案
10.(1)当 时, ,所以,可选 , 。对于 , ,所以, 。
(2)当 时, ,所以,可选 , 。对于 , ,所以, 。
(3)由(1)、(2)可知,取 , , ,当 时,有 ,所以 。
11. (1)当 时, ,所以 , 。可选 , 。对于 , ,即 。
(2)当 时, ,所以 , 。可选 , 。对于 , ,即 。
(3)因为 , 。当 时, , 。所以,可选 , ,对于 , ,即 。
第二章
2-17.证明:设 ,则 。
当 时, 。所以, 。
第五章
5-4.SolutionType DandC1(int left,int right)
{while(!Small(left,right)&&left<right)
{int m=Divide(left,right);
所以n-1<=m<=n (n-1)/2;
O(n)<=m<=O(n2);
克鲁斯卡尔对边数较少的带权图有较高的效率,而 ,此图边数较多,接近完全图,故选用普里姆算法。
10.
T仍是新图的最小代价生成树。
证明:假设T不是新图的最小代价生成树,T’是新图的最小代价生成树,那么cost(T’)<cost(T)。有cost(T’)-c(n-1)<cost(t)-c(n-1),即在原图中存在一颗生成树,其代价小于T的代价,这与题设中T是原图的最小代价生成树矛盾。所以假设不成立。证毕。
13.template <class T>
select (T&x,int k)
{
if(m>n) swap(m,n);
if(m+n<k||k<=0) {cout<<"Out Of Bounds"; return false;}

ch8参考答案

ch8参考答案
千里之行,始于足下。
算法作业第八章参考答案
8:23
KRUSKAL 算法找最小生成树
解:首先将图的边按照权值排好序。
每次贪婪选择最小边,检测是否产生回路,并将不形成
回路的边加入生成树的局部解。过程演示如下
1
6
3
4
5
27
37
1
9
3
2
2
4
6
6
1
6
3
4
5
27
37
1
9
3
2
2
4
6
6
第 1 页/共 5 页
千里之行,始于足下。
第 3 页/共 5 页
千里之行,始于足下。
算法作业第八章参考答案
8.31 用 Huffuman 算法构造编码树。 abcdef 7 5 3 2 12 9
构造过程(红色为叶节点,绿色由红色扩展而来):
5
2
3
5
7
d
c
b
a
10
5
5
9 12
f
e
2
3
7
9 12
第 4 页/共 5 页
千里之行,始于足下。
算法作业第八章参考答案
10
5
5
16
2
3
7
9 12
22
10
12
5
5
1
2
3
7
9
参考编码:a : 10
b : 001 c : 0001
e : 01
f : 11
d : 0000
第 5 页/共 5 页
算法作业第八章参考答案
1
6
3

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

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

算法分析与设计教程习题解答第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. 解:算法略。

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

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

习题4.13(b)元素最大交换次数:A9~A5 各1次;A4~A3 各2次;A2最多3次;A1最多4次Þ最多共需16次元素交换4.13另解:考虑第i个节点,其子节点为2i,则最多可交换1次;若子节点有子节点22i, 则最多可交换2次;若…..有子节点i×2k, 则最多可交换k次;因此有i×2k≤ 19求出满足上述不等式的最大的k值即可。

i=1时, k=4;i=2时, k=3;i=3或4时, k=2;i=5~9时, k=1;因此最多交换4+3+2×2+1×5=16次6.5 用分治法求数组A[1…n]元素和,算法的工作空间是多少?输入:数组A[1…n]输出:数组的所有元素之和∑A[i] {i=1…n}SUM(low, high)1.if high = low then2. return A[low]3.else4.mid←ë(low+high)/2û5.s1←SUM(low,mid)6.s2←SUM(mid+1, high)7. return s1+s28.end if工作空间:mid~Q(logn), s1&s2~Q(1)(后序遍历树,不断释放空间,故为常数Q(1)),总的工作空间为Q(logn).6.6 用分治法求元素x在数组A中出现的频次。

freq(A[low, high], x)1.if high=low then2. if A[low]=x then3. return 14. else5. return 06. end if7.else8. mid ←ë(low+high)/2û9. f1 ←freq(A[low, mid])10. f2 ← freq(A[mid+1, high])11. return f1+f212.end if复杂度:T(n)=T(ën/2û)+ T(én/2ù)≈2T(n/2) (设2k≤n<2k+1) =…=2k T(n/2k) =2k T(1) = n6.16修改后的MERGESORT算法最大比较次数(1)/2()2(/2)1n n if n m T nT n n if n m-≤⎧=⎨+->⎩最小比较次数1()2(/2)/2n if n m C nC n n if n m-≤⎧=⎨+>⎩令n/2k=m≥2,展开可知:T(n)= 2k T(n/2k) + kn - (2k-1)= n/m×m(m-1)/2 + nlog(n/m)- n/m+1= n(m-1)/2 + nlog(n/m) -n/m+1若T(n)=Q(nlogn), 其中表达式有nm, nlogn, nlogm, n/m等.有n/m < nlogm < nm 且须有nm=O(nlogn), i.e., nm ≤c·nlogn,则须有m≤c·logn. 可令c=1,则m≤logn. 另一方面,C(n) = 2k C(n/2k)+kn/2 = n/m×(m-1) + (n/2)log(n/m)= Q(nlogn)6.35split(A[low,...high])1. x←A[low] //备份为x2. while (low<high){3. while (low<high && A[high]>0) --high;4. A[low] ←A[high]5. while (low<high && A[low]≤0) ++low;6.A[high] ←A[low]7.}8.A[low] ← x //这时, low=highC,并分析其时间复杂度。

算法设计技巧与分析课后答案吴永昶

算法设计技巧与分析课后答案吴永昶

算法设计技巧与分析课后答案吴永昶习题1-2 方法头签名方法签名由方法的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。

需注意的是,方法签名既不包含返回类型,也不包含params 修饰符(它可用于最右边的参数)。

实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。

具体说来,实例构造函数的签名不包含可为最右边的参数指定的params 修饰符。

索引器签名由它的每一个形参(按从左到右的顺序)的类型组成。

具体说来,索引器的签名不包含元素类型。

运算符签名由运算符的名称和它的每一个形参(按从左到右的顺序)的类型组成。

具体说来,运算符的签名不包含结果类型。

签名是对类、结构和接口的成员实施重载的机制:方法重载允许类、结构或接口用同一个名称声明多个方法,条件是它们的签名在该类、结构或接口中是唯一的。

实例构造函数重载允许类或结构声明多个实例构造函数,条件是它们的签名在该类或结构中是唯一的。

索引器重载允许类、结构或接口声明多个索引器,条件是它们的签名在该类、结构或接口中是唯一的。

运算符重载允许类或结构用同一名称声明多个运算符,条件是它们的签名在该类或结构中是唯一的。

习题1-10 函数渐进阶大写O符号(上界,最坏)f(n)=O(g(n)),这里f(n)是分析出来算法的执行次数的函数,O的定义:当且仅当存在正的常数c和n0,使得对于所有的n>=n0,有f(n)<=cg(n)。

这里cg(n)就是函数f(n)的上限。

几种函数的例子:1.线性函数f(n)=3n+2,当n>=2时,3n+2<=3n+n=4n。

所以f(n)=O(n),这里c 就是4,n0=2。

2.平方函数f(n)=2n^2+3n+3,当n>=3时,3n+3<=4n,当n>=4时,4n<n^2,f(n)=2n^2+n^2=3n^2。

f(n)=O(n^2),这里c是3,n0=4。

算法设计与分析基础课后习题答案solu8

算法设计与分析基础课后习题答案solu8
rcises 8.1
1. a. Both techniques are based on dividing a problem’s instance into smaller instances of the same problem. b. Typically, divide-and-conquer divides an instance into smaller instances with no intersection whereas dynamic programming deals with problems in which smaller instances overlap. Consequently, divide-and-conquer algorithms do not explicitly store solutions to smaller instances and dynamic programming algorithms do. 2. a. 0 1 2 3 4 5 6 0 1 1 1 1 1 1 1 1 1 2 3 4 5 6 2 3
This file contains the exercises, hints, and solutions for Chapter 8 of the book ”Introduction to the Design and Analysis of Algorithms,” 2nd edition, by A. Levitin. The problems that might be challenging for at least some students are marked by ; those that might be difficult for a majority of students are marked by .

算法设计与分析书后参考答案

算法设计与分析书后参考答案

参考答案第1章一、选择题1. C2. A3. C4. C A D B5. B6. B7. D 8. B 9. B 10. B 11. D 12. B二、填空题1. 输入;输出;确定性;可行性;有穷性2. 程序;有穷性3. 算法复杂度4. 时间复杂度;空间复杂度5. 正确性;简明性;高效性;最优性6. 精确算法;启发式算法7. 复杂性尽可能低的算法;其中复杂性最低者8. 最好性态;最坏性态;平均性态9. 基本运算10. 原地工作三、简答题1. 高级程序设计语言的主要好处是:(l)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作;(2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;(3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可移植性好、重用率高;(4)把复杂琐碎的事务交给编译程序,所以自动化程度高,发用周期短,程序员可以集中集中时间和精力从事更重要的创造性劳动,提高程序质量。

2. 使用抽象数据类型带给算法设计的好处主要有:(1)算法顶层设计与底层实现分离,使得在进行顶层设计时不考虑它所用到的数据,运算表示和实现;反过来,在表示数据和实现底层运算时,只要定义清楚抽象数据类型而不必考虑在什么场合引用它。

这样做使算法设计的复杂性降低了,条理性增强了,既有助于迅速开发出程序原型,又使开发过程少出差错,程序可靠性高。

(2)算法设计与数据结构设计隔开,允许数据结构自由选择,从中比较,优化算法效率。

(3)数据模型和该模型上的运算统一在抽象数据类型中,反映它们之间内在的互相依赖和互相制约的关系,便于空间和时间耗费的折衷,灵活地满足用户要求。

(4)由于顶层设计和底层实现局部化,在设计中出现的差错也是局部的,因而容易查找也容易纠正,在设计中常常要做的增、删、改也都是局部的,因而也都容易进行。

《算法设计与分析实用教程》习题参考解答

《算法设计与分析实用教程》习题参考解答

《算法设计与分析实用教程》习题参考解答《算法设计与分析实用教程》参考解答1-1 加减得1的数学游戏西西很喜欢数字游戏,今天他看到两个数,就想能否通过简单的加减,使最终答案等于1。

而他又比较厌烦计算,所以他还想知道最少经过多少次才能得到1。

例如,给出16,9:16-9+16-9+16-9-9-9+16-9-9=1,需要做10次加减法计算。

设计算法,输入两个不同的正整数,输出得到1的最少计算次数。

(如果无法得到1,则输出-1)。

(1)若输入两个不同的正整数a,b均为偶数,显然不可能得到1。

设x*a与y*b之差为“1”或“-1”,则对于正整数a,b经n=x+y-1次加减可得到1。

为了求n的最小值,令n从1开始递增,x在1——n中取值,y=n+1-x:检测d=x*a+y*b,若d=1或-1,则n=x+y-1为所求的最少次数。

(2)算法描述// 两数若干次加减结果为1的数学游戏#includevoid main(){long a,b,d,n,x,y;printf(" 请输入整数a,b: ");scanf("%ld,%ld",&a,&b);if(a%2==0 && b%2==0){ printf(" -1\n");return;}n=0;while(1){ n++;for(x=1;x<=n;x++){ y=n+1-x;d=x*a-y*b;if(d==1 || d==-1) // 满足加减结果为1{ printf(" n=%ld\n",n);return;}}}}请输入整数a,b: 2012,19961请输入整数a,b: 101,20136061-2 埃及分数式算法描述分母为整数分子为“1”的分数称埃及分数,试把真分数a/b 分解为若干个分母不为b 的埃及分数之和。

(1)寻找并输出小于a/b 的最大埃及分数1/c ;(2)若c>900000000,则退出;(3)若c ≤900000000,把差a/b-1/c 整理为分数a/b ,若a/b 为埃及分数,则输出后结束。

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

《算法设计与分析》第08章
南京邮电大学计算机学院 2008年3月 2008年
8.1.3 回溯法的效率分析
回溯算法的最坏情况时间复杂度可达 最坏情况时间复杂度可达 回溯算法的最坏情况时间复杂度可达O(p(n)n!) ),这里 (或O(p(n)2n)或O(p(n)nn)),这里 或 ),这里p(n)是n的多项 是 的多项 是生成一个结点所需的时间。 式,是生成一个结点所需的时间。
南京邮电大学计算机学院 2008年3月 2008年
void NQueens(int k,int n,int *x) { for (int i=0; i<n;i++) { if (Place(k,i,x)) { x[k]=i; if (k==n-1) { for(i=0;i<n;i++)cout<<x[i]<<" "; cout<<endl; } else NQueens(k+1,n,x); } } }
南京邮电大学计算机学院 2008年3月 2008年
8.1.2剪枝函数和回溯法 8.1.2剪枝函数和回溯法
为了提高搜索效率, 在搜索过程中使用约束函数 为了提高搜索效率 , 在搜索过程中使用 约束函数 (constraint function),可以避免无谓地搜索那些 ) 已知不含答案状态的子树。如果是最优化问题, 已知不含答案状态的子树。如果是最优化问题,还 可使用限界函数 限界函数( 可使用 限界函数 ( bound function) 剪去那些不可 ) 能包含最优答案结点的子树。 能包含最优答案结点的子树。约束函数和限界函数 的目的是相同的,都为了剪去不必要搜索的子树, 的目的是相同的,都为了剪去不必要搜索的子树, 减少问题求解所需实际生成的状态结点数, 减少问题求解所需实际生成的状态结点数,它们统 剪枝函数( 称为剪枝函数 称为剪枝函数(pruning function)。 )

算法设计与分析(第二版) 第8章

算法设计与分析(第二版) 第8章
证明:由于N≤n,因而t(N)≤t(n)。如果对于某些常数d≥1, 算法A中的每个基本运算包含b(b≥1)位表示的一个或两个对 象,则至多利用db2个位就可完成每个基本运算。这些基本 运算包括所有比较、控制流和基本的非乘法的算术运算。然 而,在c增量算法的N步中,对于输入对象的任一最
大规模b,表示其中任一对象所用的最大位数为cN+b,而 cN+b≤(c+1)n。因此,完成A中的每一步至多需要O(n2)位。 证毕。
5. 另一种NP定义 实际上,存在另一种更直观的复杂类NP的定义。这种 NP类的定义是基于确定性的验证,而不是非确定性的接受。 我们说语言L可被一个算法A验证(verified),如果对于输入串 x∈L,存在另一个串y,满足对于输入z=x+y,算法A输出 “yes”,其中符号“+”表示连接。由于串y可帮助我们证明x 的确在L中,因此称串y为L中成员的证书(certificate)。当一 个串不在L中时,我们不做验证的声明。
由此可得,如果一个合理算法的运行时间是输入项数N 的多项式时间,那么它也是输入位数n的多项式时间。因此, 本章其余部分中,我们用n作为问题的输入规模,将多项式 算法的运行时间理解为输入位数的多项式函数。
8.1.1 复杂类P和复杂类NP 1. 判定问题(decision problem) 为了简化讨论,暂时只讨论判定问题,即输出为“yes”
尤其是给定了输入x后,可以构造用 p(n)步运行算法A的补算 法B,其中n是x的规模,并且如果算法B试图运行多于p(n)步, 就会终止算法A。如果算法A输出“yes”,那么算法B输出 “no”;同样,如果算法A输出“no”,或者算法A至少运行 p(n)步而没有产生任何输出,那么算法B输出“yes”。无论 哪一种情况,补算法B的运行时间均为多项式时间。因此, 如果表示某个判定问题的语言L在P中,那么L的补也在P中。

(完整版)数据结构与算法第8章答案

(完整版)数据结构与算法第8章答案

第8 章排序技术课后习题讲解1. 填空题⑴排序的主要目的是为了以后对已排序的数据元素进行()。

【解答】查找【分析】对已排序的记录序列进行查找通常能提高查找效率。

⑵对n个元素进行起泡排序,在()情况下比较的次数最少,其比较次数为()。

在()情况下比较次数最多,其比较次数为()。

【解答】正序,n-1,反序,n(n-1)/2⑶对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行直接插入排序,当把第7个记录60插入到有序表时,为寻找插入位置需比较()次。

【解答】3【分析】当把第7个记录60插入到有序表时,该有序表中有2个记录大于60。

⑷对一组记录(54, 38, 96, 23, 15, 72, 60, 45, 83)进行快速排序,在递归调用中使用的栈所能达到的最大深度为()。

【解答】3⑸对n个待排序记录序列进行快速排序,所需要的最好时间是(),最坏时间是()。

【解答】O(nlog2n),O(n2)⑹利用简单选择排序对n个记录进行排序,最坏情况下,记录交换的次数为()。

【解答】n-1⑺如果要将序列(50,16,23,68,94,70,73)建成堆,只需把16与()交换。

【解答】50⑻对于键值序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须从键值为()的结点开始。

【解答】60【分析】60是该键值序列对应的完全二叉树中最后一个分支结点。

2. 选择题⑴下述排序方法中,比较次数与待排序记录的初始状态无关的是()。

A插入排序和快速排序B归并排序和快速排序C选择排序和归并排序D插入排序和归并排序【解答】C【分析】选择排序在最好、最坏、平均情况下的时间性能均为O(n2),归并排序在最好、最坏、平均情况下的时间性能均为O(nlog2n)。

⑵下列序列中,()是执行第一趟快速排序的结果。

A [da,ax,eb,de,bb] ff [ha,gc]B [cd,eb,ax,da] ff [ha,gc,bb]C [gc,ax,eb,cd,bb] ff [da,ha]D [ax,bb,cd,da] ff [eb,gc,ha]【解答】A【分析】此题需要按字典序比较,前半区间中的所有元素都应小于ff,后半区间中的所有元素都应大于ff。

算法设计与分析课后答案

算法设计与分析课后答案

5..证明等式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//输出:实根或者无解信息D←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. 这个断言是正确的。

算法设计技巧与分析课后习题答案沙特

算法设计技巧与分析课后习题答案沙特

算法设计技巧与分析课后习题答案沙特【篇一:高级算法设计实验指导书2009(李淑琴)】=txt>一、适用专业计算机科学与技术专业研究生二、实验目的与任务算法分析与设计是计算机科学与技术专业本科学生第八学期专业选修课程。

实验课的目的是通过对一些常见而有代表性算法的上机实践,使学生理解和掌握算法设计的主要方法,培养学生对算法复杂性进行正确分析的能力,从而为独立地设计算法和对给定算法进行复杂性分析奠定坚实的基础。

三、实验内容安排实验一数据的排序算法比较(一)、实验目的1.通过上机实践,进一步理解、掌握几种著名的数据排序算法; 2.对排序算法的时间复杂性学会比较、分析。

(二)、实验内容及要求(1)从已学过的内部排序算法中至少选择4种算法,比较这四种算法的关键字移动次数以及比较次数。

(2)待排序数据用随机数产生程序产生。

(3)数据表的长度不小于100000,并且至少用五组不同的输入数据作比较。

(4)最后对结果作出简单分析,包括对各组数据得出结果波动大小的解释。

(三)、实验步骤1.2.3.4.5. 对于以上题目要认真分析和理解题意,设计出算法;详细写出正确的高级语言源程序;上机录入并调试程序;请指导教师审查程序和运行结果并评定成绩;撰写并上交实验报告。

(四)、实验报告内容1.班级、学号、姓名、实验日期;2.实验题目;3.对于实验题目的理解与说明;4.程序功能与框架;5.设计说明(存储结构、特别构思等);6.调试报告(调试过程中遇到的问题及如何解决此问题,程序设计的得失,对于改进程序的设想、经验、体会等);7.对算法进行比较分析;8.附录:源程序清单(加必要的注释)、测试数据及运行结果。

(五)、实验成绩考核方法实验成绩由实验结果、问题回答以及实验报告综合评定。

实验二递归与分治策略(一)、实验目的通过编程实现递归与分治策略的有关算法,理解递归与分治策略算法的原理,掌握递归与分治策略基本思想与应用技巧。

(二)、实验内容及要求实验内容给定平面上的至少n个点(n〉=20),找出其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档