算法设计与分析基础第七章作业

合集下载

算法分析与设计习题集整理

算法分析与设计习题集整理

算法分析与设计习题集整理第一章算法引论一、填空题:1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。

2、多项式10()m m A n a n a n a =+++的上界为O(n m )。

3、算法的基本特征:输入、输出、确定性、有限性 、可行性 。

4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。

5、计算下面算法的时间复杂度记为: O(n 3) 。

for(i=1;i<=n;i++)for(j=1;j<=n;j++){c[i][j]=0;for(k=1;k<=n;k++)c[i][j]= c[i][j]+a[i][k]*b[k][j];}6、描述算法常用的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。

7、算法设计的基本要求:正确性 和 可读性。

8、计算下面算法的时间复杂度记为: O(n 2) 。

for (i =1;i<n; i++){ y=y+1;for (j =0;j <=2n ;j++ )x ++;}9、计算机求解问题的步骤:问题分析、数学模型建立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。

10、算法是指解决问题的 方法或过程 。

二、简答题:1、按照时间复杂度从低到高排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3),O( n!)应该排在哪一位?答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n ),O( n!)2、什么是算法?算法的特征有哪些?答:1)算法:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。

通俗讲,算法:就是解决问题的方法或过程。

2)特征:1)算法有零个或多个输入;2)算法有一个或多个输出; 3)确定性 ; 4)有穷性3、给出算法的定义?何谓算法的复杂性?计算下例在最坏情况下的时间复杂性?for(j=1;j<=n;j++) (1)for(i=1;i<=n;i++) (2) {c[i][j]=0; (3)for(k=1;k<=n;k++) (4)c[i][j]= c[i][j]+a[i][k]*b[k][j]; } (5)答:1)定义:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。

算法设计与分析习题答案1-6章

算法设计与分析习题答案1-6章

习题11.图论诞生于七桥问题。

出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。

七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次,图1.7是这条河以及河上的两个岛和七座桥的草图。

请将该问题的数据模型抽象出来,并判断此问题是否有解。

七桥问题属于一笔画问题。

输入:一个起点 输出:相同的点 1, 一次步行2, 经过七座桥,且每次只经历过一次 3, 回到起点该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。

另一类是只有二个奇点的图形。

2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。

请用伪代码描述这个版本的欧几里德算法 1.r=m-n2.循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3 输出m3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。

要求分别给出伪代码和C ++描述。

//采用分治法//对数组先进行快速排序 //在依次比较相邻的差 #include <iostream> using namespace std;int partions(int b[],int low,int high) {图1.7 七桥问题int prvotkey=b[low];b[0]=b[low];while (low<high){while (low<high&&b[high]>=prvotkey)--high;b[low]=b[high];while (low<high&&b[low]<=prvotkey)++low;b[high]=b[low];}b[low]=b[0];return low;}void qsort(int l[],int low,int high){int prvotloc;if(low<high){prvotloc=partions(l,low,high); //将第一次排序的结果作为枢轴 qsort(l,low,prvotloc-1); //递归调用排序由low 到prvotloc-1qsort(l,prvotloc+1,high); //递归调用排序由 prvotloc+1到 high}}void quicksort(int l[],int n){qsort(l,1,n); //第一个作为枢轴,从第一个排到第n个}int main(){int a[11]={0,2,32,43,23,45,36,57,14,27,39};int value=0;//将最小差的值赋值给valuefor (int b=1;b<11;b++)cout<<a[b]<<' ';cout<<endl;quicksort(a,11);for(int i=0;i!=9;++i){if( (a[i+1]-a[i])<=(a[i+2]-a[i+1]) )value=a[i+1]-a[i];elsevalue=a[i+2]-a[i+1];}cout<<value<<endl;return 0;}4.设数组a[n]中的元素均不相等,设计算法找出a[n]中一个既不是最大也不是最小的元素,并说明最坏情况下的比较次数。

《算法分析与设计》课后作业

《算法分析与设计》课后作业

《算法分析与设计》各章课后作业第一章 课后作业1. 设某算法在输入规模为n 时的计算时间为T(n)=10*2n。

若在甲台计算机上实现并完成该算法的时间为t 秒,现有一台运行速度是甲的64倍的另一台计算机乙,问在乙计算机上用同一算法在t 秒内能解决的问题的规模是多大?2.按照渐近阶从低到高的顺序排列以下表达式:4n 2,logn ,3n,20n ,2,n 2/3。

又n!应该排在哪一位?第二章 课后作业1. 用展开法求解下列递推关系:T(n)=⎩⎨⎧>+=1n )()2/(20n )1(n O n T O,写出T(n)的大O 记号表示。

2. 下面是实现在a[0]<=a[1]<=…<=a[n-1]中搜索x 的二分搜索算法,请根据二分 搜索技术在下划线处填充语句。

算法描述如下: template<class Type>public static int BinarySearch(int []a, int x, int n) { //在a[0]<=a[1]<=…<=a[n-1]中搜索 x // 找到x 时返回其在数组中的位置,否则返回-1 int left = 0; int right = n - 1; while ( ) {int middle = ;if(x == a[middle]) return ; if(x > a[middle]) left = middle + 1; else right= ; }return -1; // 未找到x}第三章课后作业1、选择题。

(1)下列算法中通常以自底向上的方式求解最优解的是()。

A、备忘录法B、动态规划法C、贪心法D、回溯法(2)备忘录方法是那种算法的变形。

()A、分治法B、动态规划法C、贪心法D、回溯法(3)矩阵连乘问题的算法可由()设计实现。

A、分支界限算法B、动态规划算法C、贪心算法D、回溯算法2.计算题。

《计算机算法-设计与分析导论》课后习题答案共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交换,这时处于队列末尾的显然时队列中最大的元素。

数据结构与算法课程第7章的习题答案

数据结构与算法课程第7章的习题答案
if (loc==-1)printf("No find!\n");
else printf("Find success, location is: %d\n", loc+1);}
7.4
count+=JieChen(i+j)/(JieChen(i)*JieChen(j));
//
for (j=0; jv=N/2; j++) {//对每一种组合再算组合
if (s==9) printf("i=%d, j=%d, k=%d\n", i, j, k);
}
}
7.2 Armstrong
333
153=15 3
4444
1634=1 63 4
找出
枚举法:首先判断
【代码】
#include vstdio.h>
int digitLen(long m);//求整数m的位数
mid=(low+high)/2;
if (x>a[mid]) return find(a, x, mid+1,high);
else if (x<a[mid]) return find(a, x, low, mid-1);
else//即x==a[mid] return mid;
}
void main(){
7.1
的比例,试求出所有满足条件的三个三位数。例如:三个三位数
件。
分析:


置数组
最后,如果
【代码】
#include vstdio.h>
void main() {
int i, j, k, h, s;

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

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

算法设计与分析王晓东

算法设计与分析王晓东

习题2-1 求下列函数的渐进表达式:3n^2+10n; n^2/10+2n; 21+1/n; logn^3; 10 log3^n 。

解答:3n^2+10n=O(n^2),n^2/10+2^n=O(2^n),21+1/n=O(1),logn^3=O(logn),10log3^n=O(n).习题2-3 照渐进阶从低到高的顺序排列以下表达式:n!,4n^2,logn,3^n,20n,2,n^2/3。

解答:照渐进阶从高到低的顺序为:n!、3^n、4n^2 、20n、n^2/3、logn、2习题2-4(1)假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成该算法的时间为t秒。

现有另外一台计算机,其运行速度为第一台计算机的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?(2)若上述算法的计算时间改进为T(n)=n^2,其余条件不变,则在新机器上用t秒时间能解输入规模多大的问题?(3)若上述算法的计算时间进一步改进为,其余条件不变,那么在新机器上用t秒时间能解输入规模多大的问题?解答:(1)设能解输入规模为n1的问题,则t=3*2^n=3*2^n/64,解得n1=n+6(2)n1^2=64n^2得到n1=8n(3)由于T(n)=常数,因此算法可解任意规模的问题。

习题2-5 XYZ公司宣称他们最新研制的微处理器运行速度为其竞争对手ABC公司同类产品的100倍。

对于计算复杂性分别为n,n^2,n^3和n!的各算法,若用ABC公司的计算机能在1小时内能解输入规模为n的问题,那么用XYZ公司的计算机在1小时内分别能解输入规模为多大的问题?解答:n'=100nn'^2=100n^2得到n'=10nn'^3=100n^3得到n'=4.64nn'!=100n!得到n'<n+log100=n+6.64习题2-6对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=θ(g(n)),并简述理由。

《算法设计与分析》第07讲精品PPT课件

《算法设计与分析》第07讲精品PPT课件
上海海洋大学信息学院2009-12-2
不同的活结点表形成不同的分枝限界法,分为: FIFO分枝限界法、LIFO分枝限界法和LC(least cost)分枝限界法。三种不同的活结点表,规定了 从活结点表中选取下一个E-结点的不同次序。
FIFO分枝限界法的活结点表是先进先出队列 LIFO分枝限界法的活结点表是堆栈; LC分枝限界法的活结点表是优先权队列,LC分 枝限界法将选取具有最高优先级的活结点出队列, 成为新的E-结点。
2
3 5 2 4
19 6
18
3
16 4 7 16
10 20 0 13 14 2 1 3 0 16 3 15 12 0 3 12
1 10
0
2
2 2
0
3
4
上海海洋大学信息学院2009-12-2
归约列
10 20 0 13 14 2 1 3 0 16 3 15 12 0 3 12
iJ,i 1..n iJ,im i m1,...,n
ĉ(X) c(X) u(X)
上海海洋大学信息学院2009-12-2
可变大小元组状态空间树
上海海洋大学信息学院2009-12-2
7. 3 货郎担问题的分支限界法
上海海洋大学信息学院2009-12-2
问题描述
旅行商问题(travelling salesperson)是一个看似 简单其实十分难解的著名难题之一,至今仍有许多 人在研究它。此问题描述为:一个旅行商准备到n 个村庄售货。他从A村出发经过其它n-1个村庄,又 回到出发地A村。现要求一条最短路径,使得每个 村庄都经过且仅经过一次。
收益之和,使得总收益最大的作业子集是问题的最
优解。如果希望以最小值为最优解,则可以适当改
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章
习题7.1
1.分步计数算法是稳定的吗?
解:
分步计数算法是稳定的。

习题7.2
3.用Horspool算法在一个1000个0构成的二进制文本中查找下列模式时,分别需要进行多少次字符比较?
a.00001;
b.10000;
c.01010;
5
解:
a.
比较次数:(1000/5)*1=200
b.
比较次数:[(1000-5+1]*5=4980
c.
比较次数:[(1000-3)/2]*2=996 (1000-3)/2取整数部分
4.用Horspool算法在一个长度为n的文本中查找一个长度为m(n>=m)的模式。

请分别给出下面两种例子。

a.最差输入;
b.最优输入。

解:
a.模式的每次一移动的举例均为1,且没有匹配成功,或者到最后一次匹配才成功。

b.模式不需要移动,且比较了m次即成功。

7.用Boyer-Moore算法在一个1000个0构成的二进制文本中查找
列模式时,分别需要进行多少次字符比较?
a.00001;
b.10000;
c.01010;
解:
a.
坏符号移动表:
后缀移动表:
d1=max{t1(0),1}=1,d2=5
模式移动max(d1,d2)=5,所以每次移动5位,且每次只比较一次。

比较次数为:1000/5=200
b.
坏符号移动表:
后缀移动表:
d1=max{t1(0)-4,1}=1,d2=1
模式移动max(d1,d2)=1,所以每次都移动一位,比较5次。

比较次数:[(1000-5+1]*5=4980
c.
坏符号移动表:
后缀移动表:
d1=max{t1(0)-1,1}=1,d2=2
模式移动max(d1,d2)=2,所以每次都能移动2位,比较2次。

比较次数:[(1000-3)/2]*2=996
习题7.3
2.对于输入30,20,56,75,31,19和散列函数h(K)=K mod11
a.构造它们的闭散列表;
b.求在本表中成功查找的最大键值比较次数;
c.求在本表中成功查找的平均键值比较次数;
解:a.
b.最大的键值是19,k(19)=8,先将散列地址为8的中的键30与75比较,其次是散列地址为10的75与75比较,所以成功查找的比较次数是6。

c.
查找成功的平均键值比较次数为:(1+1+1+2+3+6)/6=7/3。

相关文档
最新文档