第5章算法与复杂性

合集下载

第5章归纳法-寻找多数元素

第5章归纳法-寻找多数元素

寻找多数元素算法:●变量设置:变量c: 存储当前子序列的候选多数元素;计数器count:记录变量c中元素在已扫描部分中未被删除的个数,实现对序列元素的删除并控制对子序列的递归。

例:注意:序列扫描完成后,变量c存储有序列的候选多数元素,此时,若序列存在多数元素,则必有count>0且c为该多数元素。

●算法:算法5.9 MAJORITY输入:n个元素的数组A[1..n]。

输出:若A[1..n]存在多数元素,则输出;否则输出none。

c=candidate ( 1 ) // 求A[1..n]中的候选多数元素。

count=0 //以下验证c是否为A[1..n]中的多数元素。

for j=1 to nif A[j]=c then count=count+1end forif count > n/2 then return celse return noneend MAJORITY过程candidate ( m )//求A[m..n]中的候选多数元素并返回。

j=m; c=A[m]; count=1while j<n and count>0j=j+1if A[j]=c then count=count+1else count=count-1 //除去两个不同的元素。

end whileif j=n then return c //此时序列已扫描完毕。

else return candidate ( j+1 )//递归求A[j+1..n]中的候选多数元素。

end candidate●时间复杂性:Θ(n)。

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

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

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

2、多项式10()m m A n a n a n a =+++L 的上界为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)定义:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。

算法分析与设计概论

算法分析与设计概论

9
How to Study Algorithm?
“Sometimes we have experiences, and sometimes not. Therefore, the better way is to learn more."
10
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行 每条指令的时间也有限。
1) 第一种解法:
输入:所购买的三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[ ],m[ ],s[ ] 1. void chicken_question(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int a,b,c; 4. k = 0; 5. for (a=0;a<=n;a++) 6. for (b=0;b<=n;b++) 7. for (c=0;c<=n;c++) { 8. if ((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. }}}
矩阵。
数组 T:表示售货员的路线,依次存放旅行路线中的城 市编号。
售货员的每一条路线,对应于城市编号的一个排列。
n 个城市共有 n! 个排列,采用穷举法逐一计算每一条路线的费 用,从中找出费用最小的路线,便可求出问题的解。

计算机科学导论(第4版)习题答案-第5、6章

计算机科学导论(第4版)习题答案-第5、6章

第5章算法与复杂性习题一、选择题1. B2. D3. C4. A5. B6. B7. D8.B9.C 10.A11.A 12.C 13.A 14.A二、简答题1.什么是算法,算法的特性有哪些?答:“算法(Algorithm)是一组明确的、可以执行的步骤的有序集合,它在有限的时间内终止并产生结果”。

算法的特性有:(1) 有穷性(可终止性):一个算法必须在有限个操作步骤内以及合理的有限时间内执行完成。

(2) 确定性:算法中的每一个操作步骤都必须有明确的含义,不允许存在二义性。

(3) 有效性(可执行性):算法中描述的操作步骤都是可执行的,并能最终得到确定的结果。

(4) 输入及输出:一个算法应该有零个或多个输入数据、有1个或多个输出数据。

2.什么是算法的时间复杂度和空间复杂度,如何表示?答:时间复杂度是与求解问题规模、算法输入相关的函数,该函数表示算法运行所花费的时间。

记为,T(n),其中,n代表求解问题的规模。

算法的空间复杂度(Space complexity)度量算法的空间复杂性、即执行算法的程序在计算机中运行所占用空间的大小。

简单讲,空间复杂度也是与求解问题规模、算法输入相关的函数。

记为,S(n),其中,n代表求解问题的规模。

时间复杂度和空间复杂度同样,引入符号“O”来表示T(n)、S(n)与求解问题规模n之间的数量级关系。

3.用图示法表示语言处理的过程。

答:语言处理的过程如图所示:4.简述算法设计的策略。

答:作为实现计算机程序实现时解决问题的方法,算法研究的内容是解决问题的方法,而不是计算机程序的本身。

一个优秀的算法可以运行在比较慢的计算机上,但一个劣质的算法在一台性能很强的计算机上也不一定能满足应用的需要,因此,在计算机程序设计中,算法设计往往处于核心地位。

要想充分理解算法并有效地应用于实际问题,关键是对算法的分析。

通常可以利用实验对比分析、数学方法来分析算法。

实验对比分析很简单,两个算法相互比较,它们都能解决同一问题,在相同环境下,一般就会认为哪个算法的速度快这个算法性能更好。

计算机算法

计算机算法

第一章绪论算法(Algorithm)理论处于计算机科学的核心地位,它与计算机应用的许多实际问题有着直接的联系。

§1 算法的基本概念1 算法的地位①算法(Algorithm)理论处于计算机科学的核心地位。

想要使用计算机解决问题,就要设计该问题的算法,要给出解决该问题所需的一系列解题步骤。

②算法与程序计算机软件的重要内容之一是程序,程序是计算机指令的序列,计算机一步一步地执行这个指令序列,就完成了希望它所做的事情。

程序设计就是按照一定的要求编排一个合理的指令序列。

程序设计主要包含两个方面,行为特性设计和结构特性设计。

结构特性设计是指确定合适的数据结构,将程序处理的数据在计算机内部表示和存放。

行为特性设计是确定要解决的实际问题的具体步骤,把全部解题过程完整地描述出来,这一过程就是算法设计。

算法设计是程序设计的基础。

美国《计算机科学基础》一书指出,“算法代表了对问题的解”,“程序是算法在计算机上的特定实现”。

N.Wirth指出“程序就是在数据的某些特定的表示方法和结构的基础上对抽象算法的具体表述。

”通俗地讲,程序是用计算机语言表述的算法。

数据结构是程序设计的另一基础。

程序的目的是加工数据,具体的数据加工步骤为算法,程序是算法和数据结构的统一。

著名计算机科学家N.Wirth于1976年提出了“程序=算法+数据结构”的概念。

这个公式表明,算法与数据结构是密切相关的,算法的设计要与数据结构相适应。

算法不等于程序,它不需考虑具体的机器,算法也不等于计算方法,它比计算方法更具体。

算法知识位于程序设计的高层(算法,方法学,语言和工具),具有相对稳定性。

很多经典算法产生于20世纪50、60年代,如hash算法,快速排序算法,至今仍在使用。

2 算法的定义下面我们先看两个例子:例1 求一个数a的平方根。

利用迭代公式:x n+1=(x n+a/x n)/2 ,算法如下:①对x赋初值x0②如果| x2-a| < ε则转④③x=(x+a/x)/2, 转②④输出x例2 求m,n的最大公约数利用辗转除法可得求自然数m,n的最大公约数的算法如下:①r=m mod n②循环直到r=0m=nn=rr= m mod n③输出n可以看出,算法是解题方案的准确而完整的描述,它是由一些步骤组成的一个过程,这些步骤连在一起给出一类问题的解。

第5章 算法与复杂性

第5章 算法与复杂性
对于一个算法的评价,通常要从正确性、可理解性、 健壮性、时间复杂度(Time Complexity)及空间复杂 度(Space Complexity)等多个方面加以衡量。 1.算法的时间复杂度 时间复杂度是度量时间的复杂性,即算法的时间效率 的指标。 2.算法的空间复杂度 算法的空间复杂度是度量空间的复杂性,即执行算法 的程序在计算机中运行时所占用空间的大小。
5.7 可计算性理论基础
研究计算的可行性和函数算法的理论,又称算法 理论,是算法设计与分析的基础,也是计算机科 学的理论基础。可计算性是函数的一个特性。
5.8 NP问题
NP(Non-deterministic Polynomial)问题是非确定性多 项式问题,是指算法无法直接计算出结果,只能通过进 行一些有选择的“猜算”来得到结果。 NP问题的研究结果有两种可能: 一种是找到了求解问题的算法; 另一种就是求解问题的算法是不存在的,那么就要从数
钥,通常有两个密钥,称为“公钥”和“私钥”,它 们两个必须配对使用,否则不能打开加密文件。
5.10 加密算法
常见加密算法有如下: (1)DES(Data Encryption Standard):数据加密标准,速 度较快,适用于加密大量数据的场合。 (2)3DES(Triple DES):是基于DES,对一块数据用3个不 同的密钥进行3次加密,强度更高; (3)RC2和RC4:用变长密钥对大量数据进行加密,比DES 快。 (4)IDEA(International Data Encryption Algorithm)国 际数据加密算法,使用128位密钥提供非常强的安全性。 (5)RSA:由RSA公司发明,是一个支持变长密钥的公共密 钥算法,需要加密的文件块的长度也是可变的。 (6)DSA(Digital Signature Algorithm):数字签名算法, 是一种标准的DSS(数字签名标准)。

第5章高级搜索


2.最优化问题的分类 最优化问题根据系统的结构性能和完成的任务各不相 同,通常可以按下述情况进行分类: (1) 单变量函数与多变量函数最优化问题 (2) 无约束与有约束最优化问题 (3) 确定性和随机性最优化问题 (4) 线性和非线性最优化问题 (5) 静态和动态最优化问题
3.计算复杂性问题 定义5-2(算法的计算复杂性) 给定任一问题S,可假设已找 到描述该问题例子的一个合理编码策略e,则对S的任一例子I, 称其依编码策略e所得的相应字符串描述中所含字符的个数为 其输入长度,并将该输入长度的具体数值作为例子I 的大小的 正式度量。 定义5-3 对某一问题S和任一可能的输入长度n,称用所给算法 求解S的所有大小为n的例子所需的时间的最大值为该算法在 输入长度为n时的复杂性。 复杂性函数O(*)可以将函数划分为不同的类,因此对如此定 义的同一类型的不同函数往往不加区分。对于定义于正整数 集上的两个正实值函数f(n)与g(n),若存在两个常数c > c`> 0, 使得当n充分大时有c`g(n)≤f(n)≤cg(n),则记f(n) =O(g(n))。
5.2.2 禁忌搜索的算法流程
(1) 给定算法参数,随机产生初始解x=x0,置禁忌表为空。 (2) 判断算法终止条件是否满足?若是,则结束算法并输出优化结果; 否则,继续以下步骤。 (3) 利用当前解x的邻域函数产生其所有(或若干)邻域解,计算领域内 各解的评价值,并从中确定若干候选解。 (4) 对候选解判断特赦准则是否满足?若成立,则用满足特赦准则的最 佳状态y替代x成为新的当前解,即x=y,并用与y对应的禁忌对象替换最 早进入禁忌表的禁忌对象,同时用y替换最优解,然后转步骤(2);否则, 继续以下步骤。 (5) 判断候选解对应的各对象的禁忌属性,选择候选解集中非禁忌对象 对应的最佳状态为新的当前解,同时用与之对应的禁忌对象替换最早进 入禁忌表的禁忌对象元素。转步骤(2)。

大学计算机基础第五章

大学计算机基础第五章第五章软件技术基础1.程序设计语言(1)机器语言和汇编语言由计算机硬件系统可以识别的指令组成的语言称为机器语言。

汇编语言是将机器指令映射为一些可以被人读懂的助记符。

由于计算机只能识别机器语言,所以汇编语言通常需要通过汇编程序翻译为机器语言。

汇编语言的翻译软件称为汇编程序,它可以将程序员写的助记符直接转换为机器指令,然后由计算机去识别和执行。

用机器语言编写的程序是计算机可以直接执行的程序。

用机器语言编写的程序,代码长度短,执行效率高。

但是,这种语言的缺点也很明显。

最主要的是编写机器语言程序必须要熟知CPU 的指令代码,编写程序既不方便,又容易出错,调试查错也非常困难。

而且编写的程序只能在特定的机器上运行,没有通用性。

(2)高级语言高级语言源程序翻译为指令代码有两种做法:编译或者解释。

编译通过编译程序来完成。

解释则是通过解释程序完成。

解释的结果产生可以直接执行的指令。

编译的结果是得到目标程序。

目标程序也是要经过连接才会得到可执行程序目前应用比较广泛的几种高级语言由FORTRAN/BASIC/PASCAL/C等。

(3)面向对象的语言(4)未来的语言2、语言处理程序语言处理程序是把源程序翻译成机器语言的程序,可分为三种:汇编程序、编译程序和解释程序。

(1)汇编程序把汇编语言源程序翻译成机器语言程序的程序称为汇编程序,翻译的过程称为汇编。

汇编程序在翻译源程序时,总是对源程序从头到尾一个符号一个符号地进行阅读分析,一般用两遍扫描完成对源程序的加工转换工作。

汇编语言在翻译的同时,还对各种形式的错误进行检查和分析,并反馈给用户,以便修改。

反汇编程序也是一种语言处理程序,它的功能与汇编程序相反,它能把机器语言程序转换成汇编语言程序。

(2)编译程序编译程序是把高级语言源程序(如Fortran、Pascal、C 等)翻译成目标程序(机器语言程序)的一种程序,翻译的过程称为编译。

(3)解释程序解释程序也是一种对高级语言源程序进行翻译处理及的程序。

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

巢湖学院计算机科学与技术系
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章 算法引论

计算机算法分析与设计第5章new


2008-7-20
计算机算法设计与分析
17
用递归回溯法求N后问题
s为准备放置后的行数 Try(s){ 列数不到n就还有候选者 令列标记j = 0;q表示未成功。 候选者为1到n列。 j = 0; q = 0; 做挑选候选者的准备; 列数加1 (!q && j < n ) { while (未成功且还有候选者) { 各后都安全,便可接受 j++; 挑选下一个候选者next; 记下该行后的位置(列数) (Safe(s, j)) { if (next可接受) { n行后都放完就成功了 不成功,删 Record(s, j); 记录next; (s = = n) {q = {成功并输出结果} 去后在该行 if (满足成功条件)1; output( );} else Try(s+1); 的位置。 (!q) Move-Off(s, j); }}} if (不成功) 删去next的记录; }} q} return 成功与否}
初始状态
目标状态
搜索的过程可描述为:S0⇒S1⇒…⇒Sn,其中 S0为初态,Sn为终态。或者说ψ(S0)且φ(Sn), 这里ψ称为初始条件,φ称为终止条件。
2008-7-20 计算机算法设计与分析 3
求解是状态空间的搜索
求解的过程可以描述为对状态空间的搜索
S0 S11 S12

S1k
其中S0为初始状 态,不妨设Sni为 终止状态
S110 S11
1
S001
1
S011
0
S100
S10
1
S101
1
S111
对应第三章的例子中的终止状态为S011。
2008-7-20 计算机算法设计与分析 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第 5 章算法与复杂性
习题
、选择题
1. B
2. D
3. C
4. A
5. B
6. B
7. D
8.B
9.C 10.A
11.A 12.C 13.A 14.A
二、简答题
1.什么是算法,算法的特性有哪些?
答:“算法 (Algorithm) 是一组明确的、可以执行的步骤的有序集合,它在有限的时间内终止并产生结果” 。

算法的特性有:
(1)有穷性 (可终止性 ):一个算法必须在有限个操作步骤内以及合理的有限时间内执行完成。

(2)确定性:算法中的每一个操作步骤都必须有明确的含义,不允许存在二义性。

(3)有效性 (可执行性 ):算法中描述的操作步骤都是可执行的,并能最终得到确定的结果。

(4)输入及输出:一个算法应该有零个或多个输入数据、有 1 个或多个输出数据。

2.什么是算法的时间复杂度和空间复杂度,如何表示?答:时间复杂度是与求解问题规模、算法输入相关的函数,该函数表示算法运行所花费的时间。

记为,T(n),其中,n代表求解问题的规模。

算法的空间复杂度(Space complexity)度量算法的空间复杂性、即执行算法的程序在计算
机中运行所占用空间的大小。

简单讲,空间复杂度也是与求解问题规模、算法输入相关的函数。

记为,S(n),其中,n代表求解问题的规模。

时间复杂度和空间复杂度同样,引入符号“O”来表示T(n)、S(n)与求解问题规模 n之
间的数量级关系。

3.用图示法表示语言处理的过程。

答:语言处理的过程如图所示:
4.简述算法设计的策略。

答:作为实现计算机程序实现时解决问题的方法,算法研究的内容是解决问题的方法,
而不是计算机程序的本身。

一个优秀的算法可以运行在比较慢的计算机上,但一个劣质的算法在一台性能很强的计算机上也不一定能满足应用的需要,因此,在计算机程序设计中,
算法设计往往处于核心地位。

要想充分理解算法并有效地应用于实际问题,关键是对算法的分析。

通常可以利用实验对比分析、数学方法来分析算法。

实验对比分析很简单,两个算法相互比较,它们都能解决同一问题,在相同环境下,一般就会认为哪个算法的速度快这个算法性能更好。

在算法设计中,通常采用能近似表达性能的方法来展示某个算法的性能指标。

例如,计算机对n2
2
和n ,2n的响应速度,当n比较大的时,没什么区别,便可直接认为后者算法的复杂度为
2
n。

基于算法复杂度简化表达的思想基础上,通常会对算法进行最坏情况分析和平均情况分析。

对于一个给定的算法,如果能保证它的最坏情况下的性能依然很好,但是在某些情况下,程序的最坏情况算法的运行时间和实际情况的运行时间相差很大,在实际应用中几乎不会碰到最坏情况下的输入,那么此时进行最坏情况分析显得有些画蛇添足,特别是分析最坏情况算法会花费大量精力的时候。

算法的平均情况分析可以帮助估计程序的性能,作为算法分析的基本指标之一,但是平均情况和实际情况仍然会有相差很大的时候,这时便可以使用随机法来尽量模拟现实中的情况,这样可以得到在严格的概率意义上的预测运行时间。

另外,对于一个经典算法,没有必要再去对该算法进行改进,研究它的上界和下界,只需要了解该算法的特性,然后在合适的时候使用它。

5.简述并行算法研究的内容。

答:(1)并行计算模型并行算法作为一门学科,首先研究的是并行计算模型。

并行计算模型是算法设计者与体系结构研究者之间的一个桥梁,是并行算法设计和分析的基础。

它屏蔽了并行机之间的差异,从并行机中抽取若干个能反映计算特性的可计算或可测量的参数,并按照模型所定义的
计算行为构造成本函数,以此进行算法的复杂度分析。

并行计算模型的第一代是共享存储模型,如SIMD-SM和MIMD-SM勺一些计算模型,模
型参数主要是CPU的单位计算时间,这样科学家可以忽略一些细节,集中精力设计算法。

第二代是分布存储模型。

在这个阶段,人们逐渐意识到对并行计算机性能带来影响的不仅仅是CPU还有通信。

因此如何把不同的通信性能抽象成模型参数,是这个阶段的研究重点。

第三代是分布共享存储模型,也是我们目前研究所处的阶段。

随着网络技术的发展,通信延迟固然还有影响,但对并行带来的影响不再像当年那样重要,注重计算系统的多层次存储特性的影响。

(2) 设计技术并行算法研究的第二部分是并行算法的设计技术。

虽然并行算法研究还不是太成熟,但并行算法的设计依然是有章可循的,例如划分法、分治法、平衡树法、倍增法/指针跳跃法、流水线法破对称法等都是常用的设计并行算法的方法。

另外人们还可以根据问题的特性来选择适合的设计方法。

以上是并行算法的常规研究内容。

随着时代的进步,我们需要不断调整研究方向。

目前并行算法研究的新走向是并行算法研究内容不断拓宽,并行计算被纳入研究范畴;与广大用户领域结合,注重应用,强调走到用户中去,为用户解决问题;重视新的、非常规计算模式,如神经计算、量子计算等,这些模式能够解决某类特定问题,有其自身的优越性。

三、讨论题
1.算法是程序设计的基础,没有好的算法,就不可能写出好的程序,但是,学习算法涉及到很多交叉学科的知识,怎样才能把这些知识融会贯通,写出优秀的程序?
答案略。

2.算法设计非常复杂,如何才能设计优秀的算法?
答案略。

相关文档
最新文档