计算机算法设计与分析练习题

计算机算法设计与分析练习题
计算机算法设计与分析练习题

计算机算法设计与分析练习题

一. 最大子段和问题:给定整数序列 n a a a ,,,21 ,求该序列形如 j

i k k a 的子

段和的最大值:

j i k k n j i a 1max ,0max 1. 一个简单算法如下:

int Maxsum(int n,int a,int& besti,int& bestj)

{

int sum = 0;

for (int i=1;i<=n;i++){

int suma = 0;

for (int j=i;j<=n;j++){

suma + = a[j];

if (suma > sum){

sum = suma;

besti = i;

bestj = j;

}

}

}

return sum;

}

试分析该算法的时间复杂性。

2. 试用分治算法解最大子段和问题,并分析算法的时间复杂性。

3. 试说明最大子段和问题具有最优子结构性质,并设计一个动态规划算法解最大子段和问题。分析算法的时间复杂度。

二.设n x x x ,,,21

是n 个互不相同的元素,每个元素i x 有一个正实数权值i w ,且满足11

n i i w 。n 个元素n x x x ,,,21 的带权)1(n i w i 的中位数是

满足下面不等式的元素k x :

k

i k i x x i x x i w w 2121 (1) 1). 证明n x x x ,,,21 的(不带权的)中位数是带权n w i /1 (,2,1 i n , )的带权中位数(不带权的中位数是指按照大小排在中间位置的数,如果有两个,则取小者)。

2). 说明如何通过排序,在最坏情况下用)log (n n O 时间求出n 个元素的带权中位数。

3). 说明如何利用一个线性时间选择算法,在最坏情况下用)(n O 时间求出n 个元素的带权中位数。

4). 邮局位置问题是:已知n 个点n p p p ,,,21 以及与它们相联系的权

n w w w ,,,21 ,要求确定一点p (未必是输入的点),使和式 n

i i i p p d w 1

),(达到最

小,其中),(b a d 表示a 与b 之间的距离。试论证带权的中位数是一维邮局问题的最优解,此时),(b a d ||b a 。

三.设n p p p ,,,21 是准备存放到长为L 的磁带上的n 个程序,程序i p 需要的带长为i a 。设L a n

i i 1,要求选取一个能放在带上的程序的最大子集合(即其中

含有最多个数的程序)Q 。构造Q 的一种贪心策略是按i a 的非降次序将程序计入集合。

1). 证明这一策略总能找到最大子集Q ,使得 Q

p i i L a 。

2). 设Q 是使用上述贪心算法得到的子集合,磁带的利用率

Q p i i L a /可以小到

何种程度?

3). 试说明1)中提到的设计策略不一定得到使 Q

p i i L a /取最大值的子集合。

四.电路布线问题:在一块电路板的上、下两段分别有n 个接线柱,如下 图。根据电路设计,要求用导线))(,(i i 将上端接线柱i 与下端接线柱)(i 相连,

导线))(,(i i 称为电路板上的第i 条连线。对于任何,1n j i 连线j i ,相交的充分必要条件是)()(j i 。在制作电路板时,要求将这n 条连线分布到若干个绝缘层上,使得在同一层上的连线不相交。电路布线问题就是要确定将哪些连线安排在第一层上,使得该层上有尽可能多的连线。该问题等价于确定布线集 n i i i Nets 1)),(,( 的最大不相交子集。

如果记 j t i t Nets t t t j i N )(,,))(,(|),( ,),(j i N 的最大不相交子集为),(j i Mns ,试证明电路布线问题具有最优子结构性质。构造一个动态规划算法解电路布线问题(写出算法的基本步骤即可),并说明你的算法的时间复杂度。

五.给定n 件物品和一个背包,物品i 的重量是i w ,体积是i v ,价值是i p ; 背包的容量为C ,容积为D 。一件物品只能整个放进背包中或不放进背包中,也不允许重复放入。试设计一个求解此问题的算法,并计算其时间复杂度。

六.设计一个)(2n O 时间的算法,找出n 个数组成的序列的最长单调递增子 序列。

七. 字符h a ~出现的频率恰好是前8个Fibonacci 数,它们的Huffman 编码是什么?将结果推广到n 个字符的频率恰好是前n 个Fibonacci 数的情形。Fibonacci 数的定义为:1,1,11210 n if F F F F F n n n 。

八. (双机调度问题)用两台处理机A 和B 处理n 个作业。设第i 个作业交给机器A 处理时所需要的时间是i a ,若由机器B 来处理,则所需要的时间是i b 。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这n 个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。以下面的例子说明你的算法:

)4,3,11,4,8,3(),,,,,(),2,5,10,7,5,2(),,,,,(,6654321654321 b b b b b b a a a a a a n

九.考虑下面特殊的整数线性规划问题

10

1 2 6 5 4 3 8 9 7

n i x b x

a x c i n i i

i n

i i

i 1},2,1,0{,max 11 试设计一个解此问题的动态规划算法,并分析算法的时间复杂度。

十.考虑下列问题

i. 在一个由元素组成的表中,出现次数最多的元素称为众数。试写出一个 求众数的算法,并分析其时间复杂性。

ii. 主元素问题:数组]:1[n T 中的元素x 称为该数组的主元素,如果该数组

中有多于一半的元素等于x ,即 2

1,][|n n i x i T i 。主元素问题是确定已知数组中是否存在主元素。设计一个线性时间算法求解主元素问题。 十一. 分派问题一般陈述为:给n 个人分派n 件工作,把工作j 分派给第i 个人的成本为),(j i Cost 。设计一个回溯算法,在给每个人分派一件不同工作的情况下,使得总成本最小。

十二. 已知一个无向连通图),(E V G 用它的邻接矩阵]:1,:1[n n T 表示,试设计一个回溯算法HamiltonCycle ,判定该图是否有Hanmilton 圈,如果有将所有不同的Hanmilton 圈都打印出来。

十三. 设)20,18,15,12,10,7,5( W 和35 M ,使用求定和子集问题的回溯算法找出W 中所有和数为M 的子集,并画出所生成的部分状态空间树。

十四. 画出优先队列式算法对于下列0/1背包问题实例所生成的部分状态 空间树:

15),9,8,5,4,4(),,,,(),,,,(,512),2,4,3,6,4(),,,,(),4,8,6,15,10(),,,,(,554321543215432154321 M w w w w w p p p p p n M w w w w w p p p p p n 十五.栈式分枝限界法将活结点表以后进先出(LIFO)的方式存储于一个栈中。试设计一个解0/1背包问题的栈式分枝限界算法,并说明栈式分枝限界算法与回溯法的区别。

部分问题提示:

问题一.1.3个for 循环,时间复杂度为)(3n O ;

2. 将序列]:1[n a 分成两部分:]2/:1[n a 和]:12/[n n a ,此时有三种可能情

况:

(1) ]:1[n a 的最大子段和与]2/:1[n a 的最大子段和相同;

(2) ]:1[n a 的最大子段和与]:12/[n n a 的最大子段和相同;

(3) ]:1[n a 的最大子段和为 j

i k k a ,其中n j n n i 12/,2/1;

注意到上述三种情况,就可以设计出求最大子段和问题的分治算法。该算法的时间复杂度函数)(n T 满足如下递推关系式

c n n O n T c n O n T ),()2/(2),1()( 其中c 是一个固定正整数。直接推得可得时间复杂度为)log ()(n n O n T 。

3.若记n j k a j b j i k j i

1,][max ][1,所求的最大子段和为 ][max ][max max ][max 1111j b k a k a n j j

i k j i n j j i k n j i 注意到

][],1[][max 0],1[,,][,][max ][][],1[][,,][][,][][max ][,][,,][,][max ][12111211121j a j b j a j a k a k a j a j a j a j a k a j a k a j a j a k a k a k a j b j k j k j k j k j j k j k j k

可以证明最大子段和问题具有最优子结构性质,并且设计出求解该问题的动态规划算法。该算法的时间复杂度为)(n O 。

问题二 3.对线性选择算法进行改进:首先同线性选择算法一样找到划分子程序(Partition )所用的“标竿”j x (即用来作为标尺的数,比该数大的数向后移,比该数小的向前移,通过交换完成),在Partition 程序中加一句:计算比j x 的元素的权和)(j x s ;在线性选择算法的递归过程中,将判断?k j 改为?2

1)( j x s ,这样就构造出线性时间的求带权中位数算法。

4.因为1维的邮局问题,所有的点都可以表示在一个实数轴上,假设i p 的坐标为i x ,n i ,,2,1 。不妨假定11 n i i w (不然,可以令 n i i i

i w w w 1'),此

时可以认为i w 是i x 的权。注意到

i

i i i i i x x if x x x x if x x x x p p d ,,||),( 其中,x 代表点p 的坐标。于是

x x i i x x i i n

i i i n i i i i i x x w x x w x x w p p d w p m )()(||),()(11 (1)

如果k x 是带权中位数,则

k i k i x x k i i x x i k i n i i k i n i i k i k x x w x x w x x w p p d w p m )()(||),()(11 (2)

直接推导可知)()(p m p m k ,从而证明断言。

问题四.记|),(|),(j i Mns j i Size ,对于固定的)2( i i ,分两种情况讨论(画图):情况1,)(i j ,此时),1(),(j i Size j i Size ;

情况2,)(i j ,此时 11)(,1),,1(m ax ),( i i Size j i Size j i Size ;

对于1 i 有 )

(,1)(,0),(i j i j j i Size ,由此,可以说明电路布线问题具有最优子结构性质,并设计出求该问题的动态规划算法。其时间复杂度为)(2n O 。

问题五.设计动态规划算法时,注意淹没规则,因为此时不仅有容量约束还有容积约束。设 111,,V W v 和 222,,V W v 是两个点偶,当21v v 而且2121,V V W W 时,称点耦 111,,V W v 淹没点耦 222,,V W v 。其它部分同0/1背包问题的动态规划算法。设计回溯算法和分枝限界算法时,同时注意到两个约束即可。其余略。 问题六. 用][j b 记序列]:1[j a 中最长单调递增子序列的长度,][j s 为序列]:1[j a 中所有长度为][j b 的单调递增子序列中最后元素最小的子序列的最后元素。则

]

[]1[,1][][]1[],[]1[j s j a if j b j s j a if j b j b 根据此递推关系式,可以设计一个求最长单调递增子序列的动态规划算法,该算法时间复杂度为)(2n O 。

问题八:假定n 个作业的集合为 n S n ,,2,1 。则双机处理作业问题相当于确定n S 的子集J ,使得J 中的作业在机器A 上处理、其余作业在机器B 上处理的

安排是最省时的安排。此时所用时间为 J S j j J

j j b a \,max ,即最优安排所用时间

应为

J S j j J j j S J b a n \,max min 。若记 1,,2,11 n S n ,则有如下递推关系:

J S j j n J j j S J J S j j J j j n S J I S j j I j j S I b b a b a a b a n n n \\\,max min ,,max min min ,max min 11-- (4.1)

令),,(B A t t S m 表示机器A 需等待时间A t ,且机器B 需等待时间B t 情况下安排作业集合S 在两台机器A 、B 上处理所需的最短时间,则对于任意作业S i ,

),},{\(),,},{\(m in ),,(B i A B A i B A t b t i S m t t a i S m t t S m (4.2) n 个作业的双机处理问题满足:

),0,(),0,,(m in )0,0,(11n n n n n b S m a S m S m (4.3)

(4.2)说明双机调度问题具有最优子结构性质,可以采用动态规划算法。在(4.3)中,如果),0,()0,,(11n n n n b S m a S m ,则作业n 安排在机器A 上处理,否则安排在机器B 上处理。若用1 i x 表示第i 件作业在机器A 上处理,0 i x 表示第i 件作业在机器B 上处理,则不等式),0,()0,,(11n n n n b S m a S m 就决定了n x 的取值。根据以上分析不难给出双机调度问题的动态规划算法。

注:此种方法能否推广求解多机调度问题,比如求解3机调度问题? 问题九:将每件物品用两个和它完全一样的物品来替代,构造一个具有n 2件物品的0/1背包问题。为写出数学模型,可以把用于表示物品i 装包情况的变量i x 用两个变量21,i i x x 表示其被装入背包的可能情况:021 i i x x 表示物品i 没有被装进背包;0,11,02121 i i i i x x or x x 则表示两件物品i 有一件装进背包,而

1,121 i i x x 则表示两件物品i 都被装进了背包。因而21i i i x x x 。

注:这种将整数规划问题转化成0/1规划问题求解方法使得问题的规模增加过大,你能否设计一个较好的方法,使问题规模的增大小些?

第二部分:分析比较

1.试比较复杂性函数的渐进性态与 函数的区别和联系。

2.假定复杂性函数都是定义在正整数集合上的正函数,那么关于渐进上界符

号O ,如下运算性质那些成立、那些不成立。成立则给出证明、不成立则举出反例。

(1) )),(max()()(g f O g O f O ;

(2) )()()(fg O g O f O ;

(3) )/()(/)(g f O g O f O ;

(4) ))(())((n f O n cf O ,其中c 是一个正的常数;

(5) )()()(f f f O .

3.何谓递归算法?就k 2阶矩阵相乘B A 分别设计递归算法和迭代算法,并比

较两个算法的时间和空间复杂度。

4.归并排序和快速排序各自都强调了那方面的进程?

5.试分析求最有生成树的Prim 算法和Kruskal 算法的时间复杂性,看它们在

何种情况下表现各自的优越性。

6.贪心算法和动态规划算法有什么共同点和区别?

7.试比较回溯法与分枝限界算法,分别谈谈这两个算法比较适合的问题?

8.确定性图灵机模型与非确定性图灵机模型的主要区别在那里?确定性图灵

机模型下算法的时间复杂度和空间复杂度指的是什么?

9.什么是多项式时间算法?什么是NP 类问题?

10.已经知道如何通过已知的NPC 问题去证明另一个NP-问题也是NPC 问题的

方法,能否给出一个通过已知的P-问题证明另一个判定问题是P-问题?

11. NP-困难问题与NPC 问题是一类问题吗?就旅行商最优问题和旅行商判

定问题谈你的看法。

12. 下列问题那些是P-问题、那些是NPC-问题?那些是NP-困难问题?

(1) 最优生成树的判定问题;

例:给定一个赋权(权为正整数)连通图),(E V G ,一个正整数R 。 问:是否存在G 的生成树T ,其权值不超过R ?

(2) 二维匹配问题

例:给定一个二部图||||),(2121V V E V V G ,

,, 问:是否存在G 的完备匹配,即存在E 的子集1E 满足:1E 中任何两条边

没有公共顶点,而且1E 的端点集为21V V ?

(3) 二元可满足性问题

例:给定逻辑语句l C C C C 21,其子句定义在布尔变量 n x x x X ,,,21 上,而且每个子句的均由两个文字构成i i i z y C ,l i ,,2,1 。

问:是否存在布尔变量的一个真值分配,使得语句取真值?

(4) 三元可满足性问题3SAT(3-Satisfiability)

例:给定布尔变量的一个有限集合},,,{21n u u u U 及定义于其上的逻辑语句m C C C C 21,其中,3|| i C ,m i ,,2,1 。

问:是否存在U 的一个真赋值,使得C 为真?

(5) 图的独立集问题

例:对于给定的无向图),(E V G 和正整数)||(V k

问:G 是否包含一个k -独立集'V ,即是否存在一个子集

k V V V |'|,',使得'V 中的任何两个顶点在图中G 都不相邻。

提示:考虑独立集和团的关系:如果'V 是图G 的团,则'V 是G 的补图G ~的

独立集;反之亦然。

(6) 二部图的独立集问题

例:给定一个二部图二部图),(21E V V G , ,正整数||21V V k

问:G 是否含有一个不小于k 的独立集?

(7) 团问题(CLIQUE )

例:给定一个无向图),(E V G 和一个正整数k 。

问:G 是否包含一个k 团?即是否存在k V V V |'|',

,且对任意',V v u ,有E v u ),(

(8) 顶点覆盖问题VERTEX-COVER

例:给定无向图),(E V G 和一个正整数k

问:G 是否有k 覆盖,即是否存在k V V V |'|,',使得对任意E v u ),(,

有''V v or V u 。

(9) 定和子集问题DSS

例:给定非负整数集合S ,正整数M

问:是否存在子集S C ,使得M c C

c

(10)精确覆盖问题XC

例:已知有限集合S 的子集族C

问:C 是否包含一个精确覆盖,即是否存在C C ',使得'C 中元素互不相

交,且S c C c '

(11) 划分问题PARTS

例:已知一个有限集合A ,及对每个A a 赋予的权值 Z a s )(

问:是否存在一个子集A A ',使得

'\')()(A A s A s a s a s

(12) 0/1背包判定问题 KPS

例:给定一个有限集合U ,对于每个U a ,对应一个值 Z a w )(和另一

个值 Z a v )(。另外给定一个约束值 Z B 和目标

Z K

问:是否存在U 的一个子集U U ',使得B a w U a ')(,而且K a v U a ')(

(13) 0/1背包最优问题

(14) 旅行商判定问题

例:待访问城市的集合 m n C C C C ,,,1 ,每对城市C C C j i ,之间的距

Z C C d j i ,,以及一个界 Z B 。

问:在C 存在一个总长不超过B 的、通过所有城市的旅行路线吗?

(15) 旅行商最优问题

(16)有向图的有向Hamilton 圈问题

例:给定有向图),(E V G

问:G 是否有一个有向Hamilton 圈,即长度为||V n ,而且恰好经过每个顶点一次,然后回到起始顶点

(17) 无向图的Hamilton 圈问题

例:给定无向图),(E V G

问:G 是否有一个Hamilton 圈,即长度为||V n ,而且恰好经过每个顶点一次,然后回到起始顶点的圈。

提示:

将有向图的(有向)Hamilton 圈问题实例变换成无向图的Hamilton 问题实例:把已知有向图D 的每个顶点u 换成欲构造的无向图G 的三个顶点:o m i u u u ,,,并将顶点m u 与顶点o i u u ,分别相连。如果在有向图D 中有从顶点u 到顶点v 的有向边(弧),则在无向图G 中将顶点o u 与顶点i v 连接一条边。

(18) 区间排序问题(Sequencing within intervals )

例:给定任务的有限集合W ,对于每个任务W w ,相应有一个开始时间)(w r 和终止时间)(w d 以及工作时间)(w l ,其中}0{)( Z w r , Z w l w d )(),( 问:是否存在任务集的一个可行时间排序表,即是否存在函数}0{: Z W ,满足下面两个条件:

(1) 对每个W w ,有),()(w r w 且)()()(w d w l w ;

(2) 若w w W w ',',则)()'()'(w w l w 或)()()'(w l w w

(19) 三元精确覆盖问题X3C

例:给定有限集合X,|X|=3q ,以及X 的三元子集族C 。

问:C 含有X 的一个精确覆盖吗?即是否存在一个子族C C ',使得X 的每个元素恰好只出现'C 的一个三元子集中。

(20) Steiner 树判定问题

例:给定图),(E V G ,对其每条边E e 都有相应的权 Z e w )(,另外有G 的顶点子集V R ,某个界 Z B 。

问:是否存在G 的一颗子树),(11E V T ,使E E V V R 11,,而且

B e w E e 1)(?

《计算机算法设计与分析》习题及答案

《计算机算法设计与分析》习题及答案 一.选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是(A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树 5.下列算法中通常以自底向上的方式求解最优解的是(B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 6、衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 7、以下不可以使用分治法求解的是( D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 8. 实现循环赛日程表利用的算法是(A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 9.下面不是分支界限法搜索方式的是(D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先 10.下列算法中通常以深度优先方式系统搜索问题解的是(D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法

11.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 12.哈夫曼编码的贪心算法所需的计算时间为(B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 13.分支限界法解最大团问题时,活结点表的组织形式是(B )。 A、最小堆 B、最大堆 C、栈 D、数组 14.最长公共子序列算法利用的算法是(B)。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 15.实现棋盘覆盖算法利用的算法是(A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 16.下面是贪心算法的基本要素的是(C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 17.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C.计算限界函数的时间 D. 确定解空间的时间 18.下面哪种函数是回溯法中为避免无效搜索采取的策略(B ) A.递归函数 B.剪枝函数 C。随机数函数 D.搜索函数 19. (D)是贪心算法与动态规划算法的共同点。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、最优子结构性质 20. 矩阵连乘问题的算法可由( B )设计实现。 A、分支界限算法 B、动态规划算法 C、贪心算法 D、回溯算法 21. 分支限界法解旅行售货员问题时,活结点表的组织形式是( A )。

算法设计与分析考试题及答案

算法设计与分析考试题 及答案 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性 有穷性 可行性 0个或多个输入 一个或多个输出 2.算法的复杂性有时间复杂性 空间复杂性之分,衡量一个算法好坏的标准是 时间复杂度高低 3.某一问题可用动态规划算法求解的显着特征是 该问题具有最优子结构性质 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y 的一个最长公共子序列{BABCD}或{CABCD}或{CADCD } 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解 6.动态规划算法的基本思想是将待求解问题分解成若干_子问题 ,先求解_子问题 ,然后从这些子问题 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法 背包问题的回溯算法所需的计算时间为o(n*2n ) ,用动态规划算法所需的计算时间为o(min{nc,2n }) 9.动态规划算法的两个基本要素是最优子结构 _和重叠子问题 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造最优解; 2. 流水作业调度问题的johnson 算法的思想。 ①令N 1={i|a i =b i };②将N 1中作业按a i 的非减序排序得到N 1’,将N 2中作业按b i 的非增序排序得到N 2’;③N 1’中作业接N 2’中作业就构成了满足Johnson 法则的最优调度。 3. 若n=4,在机器M1和M2上加工作业i 所需的时间分别为a i 和b i ,且 (a 1,a 2,a 3,a 4)=(4,5,12,10),(b 1,b 2,b 3,b 4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N 1’={1,3}, N 2’={4,2}; 最优值为:38 4. 使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为:16 最优解为:(1,1,0) 5. 设S={X 1,X 2,···,X n }是严格递增的有序集,利用二叉树的结点来存储S 中的元素,在表示S 的二叉搜索树中搜索一个元素X ,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=X i ,其概率为b i 。(2)在二叉搜索树的叶结点中确定X ∈(X i ,X i+1),其概率为a i 。在表示S 的二叉搜索树T 中,设存储元素X i 的结点深度为C i ;叶结点(X i ,X i+1)的结点深度为d i ,则二叉搜索树T 的平均路长p 为多少假设二叉搜索树T[i][j]={X i ,X i+1,···,X j }最优值为m[i][j],W[i][j]= a i-1+b i +···+b j +a j ,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 .二叉树T 的平均路长P=∑=+n i 1 Ci)(1*bi +∑=n j 0 dj *aj

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

算法设计与分析第2版 王红梅 胡明 习题答案

精品文档习题胡明-版)-王红梅-算法设计与分析(第2答案 1 习题)—1783Leonhard Euler,17071.图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(提 出并解决了该问题。七桥问题是这样描述的:北区一个人是否能在一次步行中穿越哥尼斯堡(现东区在叫加里宁格勒,在波罗的海南岸)城中全部岛区的七座桥后回到起点,且每座桥只经过一次,南区是这条河以及河上的两个岛和七座桥的图1.7 1.7 七桥问题图草图。请将该问题的数据模型抽象出来,并判断此问题是否有解。 七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点一次步行1,经过七座桥,且每次只经历过一次2,回到起点3,该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。)用的不是除法而是减最初的欧几里德算法2.在欧几里德提出的欧几里德算法中(即法。请用伪代码描述这个版本的欧几里德算法 1.r=m-n r=0 循环直到2.m=n 2.1 n=r 2.2 r=m-n 2.3 m 输出3 .设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代3++描述。C码和 采用分治法// //对数组先进行快速排序在依次比较相邻的差//精品文档. 精品文档 #include using namespace std; int partions(int b[],int low,int high) { int prvotkey=b[low]; b[0]=b[low]; while (low=prvotkey)

计算机算法设计与分析

算法设计与分析 实 验 报 告 班级: 姓名: 学号: (备注:共给出5个参考实验案例,根据学号尾数做对应的实验,即如尾号为1,则模仿案例实验123;尾号2,则模仿案例实验234;尾号3,即345;尾号4,同1.)

目录 实验一分治与递归 (1) 1、基本递归算法 (1) 2、棋盘覆盖问题 (2) 3、二分搜索 (3) 4、实验小结 (5) 实验二动态规划算法 (5) 1、最长公共子序列问题 (5) 2、最大子段和问题 (7) 3、实验小结 (8) 实验三贪心算法 (8) 1、多机调度问题 (8) 2、用贪心算法求解最小生成树 (10) 3、实验小结 (12) 实验四回溯算法和分支限界法 (12) 1、符号三角形问题 (12) 2、0—1背包问题 (14) 3、实验小结 (18) 实验五多种排序算法效率比较 1、算法:起泡排序、选择排序、插入排序、shell排序,归并排序、快速排序等 (19) 2、实验小结 (18)

P art1:课程设计过程 设计选题--→题目分析---→系统设计--→系统实现--→结果分析---→撰写报告 P art2:课程设计撰写的主要规范 1.题目分析:主要阐述学生对题目的分析结果,包括题目描述、 分析得出的有关模型、相关定义及假设; 2.总体设计:系统的基本组成部分,各部分所完成的功能及相互 关系; 3.数据结构设计:主要功能模块所需的数据结构,集中在逻辑设 计上; 4.算法设计:在数据结构基础上,完成算法设计; 5.物理实现:主要有数据结构的物理存储,算法的物理实现,系 统相关的实现。具体在重要结果的截图,测试案例的结果数据,核心算法的实现结果等; 6.结果分析:对第五步的分析,包括定性分析和定量分析,正确 性分析,功能结构分析,复杂性分析等; 7.结论:学生需对自己的课程设计进行总结,给出评价,并写出 设计体会; 8.附录:带有注释的源代码,系统使用说明等; 9.参考文献:列出在撰写过程中所需要用到的参考文献。

算法设计与分析实验报告

算法设计与分析课程实验项目目录 学生姓名:学号: *实验项目类型:演示性、验证性、综合性、设计性实验。 *此表由学生按顺序填写。 本科实验报告专用纸

课程名称算法设计与分析成绩评定 实验项目名称蛮力法指导教师 实验项目编号 201 实验项目类型设计实验地点机房 学生姓名学号 学院信息科学技术学院数学系信息与计算科学专业级 实验时间 2012年 3月 1 日~6月30日温度24℃ 1.实验目的和要求: 熟悉蛮力法的设计思想。 2.实验原理和主要内容: 实验原理:蛮力法常直接基于问题的描述和所涉及的概念解决问题。 实验内容:以下题目任选其一 1).为蛮力字符串匹配写一段可视化程序。 2).写一个程序,实现凸包问题的蛮力算法。 3).最著名的算式谜题是由大名鼎鼎的英国谜人给出的: S END +MORE MONEY . 这 里有两个前提假设:第一,字母和十进制数字之间一一对应,也就是每个字母只代表一个数字,而且不同的字母代表不同的数字;第二,数字0不出现在任何数的最左边。求解一个字母算术意味着找到每个字母代表的是哪个数字。请注意,解可能并不是唯一的,不同人的解可能并不相同。 3.实验结果及分析: (将程序和实验结果粘贴,程序能够注释清楚更好。) 本科实验报告专用纸(附页) 该算法程序代码如下:

#include "" #include "" int main(int argc, char* argv[]) { int x[100],y[100]; int a,b,c,i,j,k,l,m,n=0,p,t1[100],num; int xsat[100],ysat[100]; printf("请输入点的个数:\n"); scanf("%d",&num); getchar(); clock_t start,end; start=clock(); printf("请输入各点坐标:\n"); for(l=0;l

算法设计与分析第2版 王红梅 胡明 习题答案

习题1 1. 图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Le on har d Eul er,1707 —1783)提出并解决了该问题。七桥问题就是这样描述的:一个人就是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经 过一次,图1、7就是这条河以及河上的两个岛 与七座桥的草图。请将该问题的数据模型抽象 出来,并判断此问题就是否有解。 七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点 1, 一次步行 2, 经过七座桥,且每次只经历过一次 3, 回到起点 该问题无解:能一笔画的图形只有两类:一类就是所有的点都就是偶点。另一类就是只有二个奇点的图形。 2、在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不就是除法而就是减法。请用伪代码描述这个版本的欧几里德算法 1、r=m-n 2、循环直到r=0?2、1 m =n 2、2 n=r 2、3 r=m-n ?3 输出m 3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码与C ++描述。 //采用分治法 //对数组先进行快速排序 //在依次比较相邻的差 #inc lud e <iostream> usin g n ames pac e std; in t pa rtion s(int b[],int l ow,int hi gh) { int pr votkey=b[lo w]; b [0]=b[lo w]; 图1、7 七桥问题

while (low<high) { while(low=prvotkey) --high; b[low]=b[high]; while (low

计算机算法设计与分析课程设计.

成绩评定表 学生姓名吴旭东班级学号1309010236 专业信息与计算 科学课程设计题目 分治法解决棋盘覆 盖问题;回溯法解 决数字拆分问题 评 语 组长签字: 成绩 日期20 年月日

课程设计任务书 学院理学院专业信息与计算科学 学生姓名吴旭东班级学号1309010236 课程设计题目分治法解决棋盘覆盖问题;回溯法解决数字拆分问题实践教学要求与任务: 要求: 1.巩固和加深对基本算法的理解和运用,提高综合运用课程知识进行算法设计与分析的能力。 2.培养学生自学参考书籍,查阅手册、和文献资料的能力。 3.通过实际课程设计,掌握利用分治法或动态规划算法,回溯法或分支限界法等方法的算法的基本思想,并能运用这些方法设计算法并编写程序解决实际问题。 4.了解与课程有关的知识,能正确解释和分析实验结果。 任务: 按照算法设计方法和原理,设计算法,编写程序并分析结果,完成如下内容: 1.运用分治算法求解排序问题。 2. 运用回溯算法求解N后问题。 工作计划与进度安排: 第12周:查阅资料。掌握算法设计思想,进行算法设计。 第13周:算法实现,调试程序并进行结果分析。 撰写课程设计报告,验收与答辩。 指导教师: 201 年月日专业负责人: 201 年月日 学院教学副院长: 201 年月日

算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。算法 (Algorithm)是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。 分治法字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在一个2^k*2^k的棋盘上, 恰有一个放歌与其他方格不同,且称该棋盘为特殊棋盘。 回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法。数字拆分问题是指将一个整数划分为多个整数之和的问题。利用回溯法可以很好地解决数字拆分问题。将数字拆分然后回溯,从未解决问题。 关键词:分治法,回溯法,棋盘覆盖,数字拆分

算法设计与分析第2版王红梅胡明习题答案

算法设计与分析(第2版)-王红梅-胡明-习题 答案 习题1 1. 图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783) 提出并解决了该问题。七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次, 图 1.7是这条河以及河上的两个岛和七座桥的 草图。请将该问题的数据模型抽象出来,并判 断此问题是否有解。 七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点 1, 一次步行 2, 经过七座桥,且每次只经历过一次 3, 回到起点 该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。 2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法 1.r=m-n 2.循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3 输出m 3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码和C ++描述。 //采用分治法 //对数组先进行快速排序 //在依次比较相邻的差 图1.7 七桥问题

#include using namespace std; int partions(int b[],int low,int high) { int prvotkey=b[low]; b[0]=b[low]; while (low=prvotkey) --high; b[low]=b[high]; while (low

计算机算法设计与分析期末考试复习题

1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4、最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 5. 回溯法解TSP问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 7、衡量一个算法好坏的标准是(C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求解的是(D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 9. 实现循环赛日程表利用的算法是( A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 10、实现最长公共子序列利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法11.下面不是分支界限法搜索方式的是( D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先 12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 13. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。 A、重叠子问题 B、最优子结构性质 C、贪心选择性质 D、定义最优解14.广度优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 15.背包问题的贪心算法所需的计算时间为( B )。

计算机算法设计与分析习题及答案

计算机算法设计与分析习 题及答案 Prepared on 24 November 2020

《计算机算法设计与分析》习题及答案 一.选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是(A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树 5.下列算法中通常以自底向上的方式求解最优解的是(B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 6、衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 7、以下不可以使用分治法求解的是( D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 8. 实现循环赛日程表利用的算法是(A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 9.下面不是分支界限法搜索方式的是(D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先

10.下列算法中通常以深度优先方式系统搜索问题解的是(D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 11.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 12.哈夫曼编码的贪心算法所需的计算时间为(B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 13.分支限界法解最大团问题时,活结点表的组织形式是(B )。 A、最小堆 B、最大堆 C、栈 D、数组 14.最长公共子序列算法利用的算法是(B)。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 15.实现棋盘覆盖算法利用的算法是(A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 16.下面是贪心算法的基本要素的是(C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 17.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C.计算限界函数的时间 D. 确定解空间的时间 18.下面哪种函数是回溯法中为避免无效搜索采取的策略(B ) A.递归函数 B.剪枝函数 C。随机数函数 D.搜索函数 19. (D)是贪心算法与动态规划算法的共同点。

算法设计与分析C++语言描述(陈慧南版)课后答案

第一章 15P 1-3. 最大公约数为1。快1414倍。 主要考虑循环次数,程序1-2的while 循环体做了10次,程序1-3的while 循环体做了14141次(14142-2循环) 若考虑其他语句,则没有这么多,可能就601倍。 第二章 32P 2-8.(1)画线语句的执行次数为 log n ????。(log )n O 。划线语句的执行次数应该理解为一格整体。 (2)画线语句的执行次数为 111 (1)(2) 16 j n i i j k n n n ===++= ∑∑∑。3()n O 。 (3 )画线语句的执行次数为 。O 。 (4)当n 为奇数时画线语句的执行次数为 (1)(3) 4 n n ++, 当n 为偶数时画线语句的执行次数为2 (2)4 n +。2()n O 。 2-10.(1)当1n ≥时,225825n n n -+≤,所以,可选5c =,01n =。 对于0n n ≥,22 ()5825f n n n n =-+≤,所以,22 582()n n n -+=O 。 (2)当8n ≥时,2222 582524n n n n n -+≥-+≥,所以,可选4c =,08n =。对于0n n ≥, 22()5824f n n n n =-+≥,所以,22582()n n n -+=Ω。 (3)由(1)、(2)可知,取14c =,25c =,08n =,当0n n ≥时,有22212582c n n n c n ≤-+≤,所以 22582()n n n -+=Θ。 2-11. (1) 当3n ≥时,3 log log n n n <<,所以()20log 21f n n n n =+<,3 ()log 2g n n n n =+>。可选21 2 c = ,03n =。对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。注意:是f (n )和g (n )的关系。 (2)当4n ≥时,2 log log n n n <<,所以2 2 ()/log f n n n n =<,2 2 ()log g n n n n =≥。可选1c =,04n =。对于0n n ≥,2 ()()f n n cg n <≤,即()(())f n g n =O 。 (3)因为log log(log )()(log ) n n f n n n ==,()/log log 2n g n n n n ==。当4n ≥时,log(log )()n f n n n =≥,

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

《算法分析与设计》期末复习题 一、选择题 1.应用Johnson法则的流水作业调度采用的算法是(D) A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法 塔问题如下图所示。现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi塔问题的移动规则。由此设计出解Hanoi塔问题的递归算法正确的为:(B) " ; | A. void hanoi(int n, int A, int C, int B) 《 { if (n > 0) { hanoi(n-1,A,C, B); move(n,a,b); hanoi(n-1, C, B, A); B. void hanoi(int n, int A, int B, int C) { if (n > 0) { hanoi(n-1, A, C, B); ] move(n,a,b); hanoi(n-1, C, B, A); } C. void hanoi(int n, int C, int B, int A) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); } }

3. 动态规划算法的基本要素为(C ) A. 最优子结构性质与贪心选择性质 B .重叠子问题性质与贪心选择性质 C .最优子结构性质与重叠子问题性质 D. 预排序与递归调用 4. 算法分析中,记号O 表示(B ), 记号Ω表示(A ), 记号Θ表示(D )。 … A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 E.非紧下界 5. 以下关于渐进记号的性质是正确的有:(A ) A.f (n)(g(n)),g(n)(h(n))f (n)(h(n))=Θ=Θ?=Θ B. f (n)O(g(n)),g(n)O(h(n))h(n)O(f (n))==?= C. O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D. f (n)O(g(n))g(n)O(f (n))=?= D. void hanoi(int n, int C, int A, int B) { if (n > 0) { | hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }

算法设计与分析(第2版)王红梅胡明习题答案

习题1 1. 图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现 在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次, 图是这条河以及河上的两个岛和七座桥的草 图。请将该问题的数据模型抽象出来,并判断此问题是否有解。 七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点 1, 一次步行 2, 经过七座桥,且每次只经历过一次 3, 回到起点 该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。 2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。请用伪代码描述这个版本的欧几里德算法 =m-n 2.循环直到r=0 m=n n=r r=m-n 3输出m 3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代码和C++描述。 编写程序,求n 至少为多大时,n 个“1”组成的整数能被2013整除。 #include using namespace std; int main() { double value=0; 图 七桥问题

for(int n=1;n<=10000 ;++n) { value=value*10+1; if(value%2013==0) { cout<<"n至少为:"< using namespace std; int main () { double a,b; double arctan(double x);圣经上说:神6天创造天地万有,第7日安歇。为什么是6天呢任何一个自然数的因数中都有1和它本身,所有小于它本身的因数称为这个数的真因数,如果一个自然数的真因数之和等于它本身,这个自然数称为完美数。例如,6=1+2+3,因此6是完美数。神6天创造世界,暗示着该创造是完美的。设计算法,判断给定的自然数是否是完美数 #include using namespace std; int main() { int value, k=1; cin>>value; for (int i = 2;i!=value;++i) { while (value % i == 0 ) { k+=i;有4个人打算过桥,这个桥每次最多只能有两个人同时通过。他们都在桥的某一端,并且是在晚上,过桥需要一只手电筒,而他们只有一只手电筒。这就意味着两个人过桥后必须有一个人将手电筒带回来。每个人走路的速度是不同的:甲过桥要用1分钟,乙过桥要用2分钟,丙过桥要用5分钟,丁过桥要用10分钟,显然,两个人走路的速度等于其中较慢那个人的速度,问题是他们全部过桥最少要用多长时间 由于甲过桥时间最短,那么每次传递手电的工作应有甲完成 甲每次分别带着乙丙丁过桥 例如: 第一趟:甲,乙过桥且甲回来

算法设计与分析(第2版)王红梅胡明习题

习题1 (Leonhard Euler ,1707 —1783) 1. 图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉提出并解 决了该问题。七桥问题是这样描述的:一个人是否能在 一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗 的海南岸)城中全部的七座桥后回到起点,且每座桥只 经过一次,图1.7是这条河以及河上的两个岛和七座桥的 草图。请将该问题的数据模型抽象出来,并判断此问题 是否有解。 七桥问题属于一笔画问题。输入:一个起点输出:相同的点 1,一次步行 2,经过七座桥,且每次只经历过一次 3,回到起点 该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶 点。另一类是只有二个奇点的图形。 2 ?在欧几里德提出的欧几里德算法中(即最初的欧几里德 算法)用的不是除法而是减 法。请用伪代码描述这个版本的欧几里德算法 1. r= m-n 2. 循环直到r=0 2.1 m=n 2.2 n=r 2.3 r=m-n 3输出m 3 ?设计算法求数组中相差最小的两个元素(称为最接近数) 的差。要求分别给出伪代码和C++描述。 //采用分治法 //对数组先进行快速排序 //在依次比较相邻的差 #in clude using n amespace std; int parti on s(i nt b[],i nt low,i nt high) {

int prvotkey=b[low]; b[0]=b[low]; while (low=prvotkey) --high; b[low]=b[high]; while (low

算法设计与分析课后习题

第一章 1. 算法分析题 算法分析题1-1 求下列函数的渐进表达式 (1). 3n^2 + 10n < 3n^2 + 10n^2 = 13n^2 = O(n^2) (2). n^2 / 10 + 2^n 当n>5是,n^2 < 2 ^n 所以,当n >= 1时,n^2/10 < 2 ^n 故: n^2/10 + 2^n < 2 ^n + 2^n = 2*2^n = O(2^n) (3). 21 + 1/n < 21 + 1 = 22 = O(1) (4). log(n^3)=3log(n)=O(log(n)) (5). 10log(3^n) = (10log3)n = O(n) 算法分析题1-6 (1)因为:f(n)=log(n^2) = 2log(n); g(n) = log(n) + 5 所以:f(n)=Θ(log(n)+5) =Θ(g(n)) (2)因为:log(n) < √n; f(n) = 2log(n); g(n)=√n 所以:f(n) = O(g(n)) (3)因为:log(n) < n; f(n) = n; g(n) = log(n^2) = 2log(n) 所以;f(n) = Ω(g(n)) (4)因为:f(n) = nlogn +n; g(n) = logn 所以:f(n) =Ω(g(n)) (5)因为: f(n) = 10; g(n) = log(10) 所以:f(n) =Θ(g(n)) (6)因为: f(n)=log^2(n); g(n) = log(n) 所以: f(n) ==Ω(g(n)) (7)因为: f(n) = 2^n < 100*2^n; g(n)=100n^2; 2^n > n ^2 所以: f(n) = Ω(g(n)) (8)因为:f(n) = 2^n; g(n) = 3 ^n; 2 ^n < 3 ^n 所以: f(n) = O(g(n)) 习题1-9 证明:如果一个算法在平均情况下的计算时间复杂性为Θ(f(n)),该算法在最坏情况下所需的计算时间为Ω(f(n)). 分析与解答: 因此,Tmax(N) = Ω(Tavg(N)) = Ω(Θ(f(n)))=Ω(f(n)). 第二章 算法分析题

计算机算法设计与分析小论文

计算机算法设计与分析小论文 摘要: 算法是一个系列解决问题的清晰指令,即在有限时间内能够对一定规范的输入,能够得到所需要的输出。如果一个算法本身是有缺陷的!那么他往往不是这个问题的最佳解决方法,可见一个算法的优劣是通过一定的准则来规定的。通过这学期的对《计算机算法分析设计》这门课程的学习让我们充分的了解到了计算机算法的多样性和复杂性,让我们更加细心和耐心的去对待这门课程。例如甲某要去某个地方旅游,他有很多种方案到旅游地,但是不见的每种方案都是合理最优的!这时就是需要考虑透过一定的算法来得到自己的最优路线。所以可见算法就是以最少的成本、最快的速度、最好的质量开发出合适各种各样应用需求的软件,必须遵循软件工程的原则,设计出高效率的程序。一个高效的程序不仅需要编程技巧,更需要合理的数据组织和清晰高效的算法。目前我们将进行常见的算法分析设计策略介绍: 1.递归算法 1.1递归算法介绍: 直接或间接的调用自身的算法称为递归算法。或者说就是用自己来定义自己,不断调用自己的某一种状态。 1.2递归算法满足的条件 (1)递归满足2个条件: 1)有反复执行的过程(调用自身) 2)有跳出反复执行过程的条件(递归出口) 1.3递归例子 递归例子:阶乘问题 n! = n * (n-1) * (n-2) * ...* 1(n>0) //阶乘 intresult(int i) { int sum = 0; if (0 == i) return (1); else sum = i * result(i-1); return sum; }

可见一个递归算法都有一个比较特殊的特点,那就是要先处理一些比较特殊的情况再处理递归关系。如上例中如果是0!的话!那么他的阶乘就是1,所以先处理0!这个特殊情况,然后再调用其他的递归关系得到自己想要的阶乘。比如当我们想要求出4!的结果那么我们就需要调用result(3)的结果而result(3)又要调用result(2)的结果!就这样直到得出答案为止。 在我们日常,递归算法的出现可以帮助我们解决很多问题,正因为它的:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。 2.分治算法 2.1分治算法介绍: 一个分治算法把问题实例划分成若干子实例(多数情况是分成两个),并分别递归地解决每个子实例,然后把这些子实例的解组合起来,得到原问题实例的解。 2.2 分治算法的特性 1)规模小,则很容易解决 2)大问题可以分为若干规模小的相同问题 3)利用子问题的解可以合并成该问题的解 2.3分治算法的遇到问题 为了阐明这个方法,考虑这样一问题:在一个整数组A[1...n]中,同时寻找最大值和最小值。下面我们来看一下用分治策略:将数组分割成两半,A[1...n/2]和A[(n/2)+1...n],在每一半中找到最大值和最小值,并返回这两个最小值中的最小值及这两个最大值中的最大值。 过程 Min-Max ⅰ输入 n个整数元素的数组A[1...n]n为2的幂 ⅱ输出 (x,y), A中的最大元素和最小元素

相关文档
最新文档