算法分析与设计复习题.docx

上传人:b****8 文档编号:10033970 上传时间:2023-02-08 格式:DOCX 页数:17 大小:96.50KB
下载 相关 举报
算法分析与设计复习题.docx_第1页
第1页 / 共17页
算法分析与设计复习题.docx_第2页
第2页 / 共17页
算法分析与设计复习题.docx_第3页
第3页 / 共17页
算法分析与设计复习题.docx_第4页
第4页 / 共17页
算法分析与设计复习题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

算法分析与设计复习题.docx

《算法分析与设计复习题.docx》由会员分享,可在线阅读,更多相关《算法分析与设计复习题.docx(17页珍藏版)》请在冰豆网上搜索。

算法分析与设计复习题.docx

算法分析与设计复习题

填空题

2、程序是算法     用某种程序设计语言的具体实现。

3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。

5、拉斯维加斯算法找到的解一定是正确解。

6、算法是指解决问题的一种方法或一个过程。

7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。

10、数值概率算法常用于数值问题的求解。

11、计算一个算法时间复杂度通常可以计算循环次数、基本操作的频率或计算步。

12、利用概率的性质计算近似值的随机算法是__数值概率算法,运行时以一定的概率得到正确解的随机算法是__蒙特卡罗算法_____________________。

14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划,需要排序的是回溯法,分支限界法。

15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:

约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是0/1背包问题,只使用约束条件进行裁剪的是N皇后问题。

16、贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

19.贪心算法的基本要素是贪心选择性质和最优子结构性质。

22.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。

25、舍伍德算法总能求得问题的一个解。

28.动态规划算法的两个基本要素是最优子结构性质和重叠子问题性质。

30.回溯法是一种既带有系统性又带有跳跃性的搜索算法。

31.分支限界法主要有队列式(FIFO)分支限界法和优先队列式分支限界法。

33.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数。

34.任何可用计算机求解的问题所需的时间都与其规模有关。

35.快速排序算法的性能取决于划分的对称性。

所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。

29.所谓最优子结构性质是指问题的最优解包含了其子问题的最优解。

30.回溯法是指具有限界函数的深度优先生成法。

31.用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。

在任何时刻,算法只保存从根结点到当前扩展结点的路径。

如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n)))。

32.回溯法的算法框架按照问题的解空间一般分为子集树算法框架与排列树算法框架。

33.用回溯法解0/1背包问题时,该问题的解空间结构为子集树结构。

34.用回溯法解批处理作业调度问题时,该问题的解空间结构为排列树结构。

35.旅行售货员问题的解空间树是排列树。

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:

_确定性_,_有穷性_,_可行性_,_0个或多个输入__,_一个或多个输出_。

2.某一问题可用动态规划算法求解的显著特征是__该问题具有最优子结构性质。

0-1背包问题的回溯算法所需的计算时间为___o(n*2n)___,用动态规划算法所需的计算时间为__o(min{nc,2n})__。

3.在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。

3个基本计算模型是随机存取机RAM、随机存取存储程序机RASP、图灵机。

4.“最优化原理”用数学化的语言来描述:

假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1

5.算法的时间复杂性指算法中元运算的执行次数。

6.其中,g(n)表示将规模为n的问题分解为子问题以及组合相应的子问题的解所需的时间。

7.分治算法的基本步骤包括分解,递归,组合。

8.回溯算法的基本思想是在问题的状态空间树上作带剪枝的DFS搜索(或:

DFS+剪枝。

9.动态规划和分治法在分解子问题方面的不同点是前者分解出的子问题有重叠的,而后者分解出的子问题是相互独立(不重叠)的。

10.随机算法的一个基本特征是对于同一组输入,不同的运行可能得到不同的结果。

11.对于下面的确定性快速排序算法,只要在步骤3前加入随机化步骤v=random(low,high);交换A[low]和A[v]的值,就可得到一个随机化快速排序算法,该随机化步骤的功能是随机选主元。

1.用O、

表示函数f与g之间阶的关系,指出下列函数中阶最低和最高的函数:

(1) f(n)=100g(n)=

(2)f(n)=6n+n

g(n)=3n

(3)f(n)=n/logn-1g(n)=

(4)f(n)=

g(n)=

(5)f(n)=

g(n)=

(1)f(n)=O(g(n))

(2)f(n)=

(g(n))

(3)f(n)=

(g(n))

(4)f(n)=O(g(n))

(5)f(n)=

(g(n))

阶最低的函数是:

100

阶最高的函数是:

下面是一个递归算法,其中,过程pro1和pro2的运算时间分别是1和。

给出该算法的时间复杂性T(n)满足的递归方程,并求解该递归方程,估计T(n)的阶(用表示)。

算法EX1

输入:

正整数n,n=2k。

输出:

ex1(n)

endEX1

过程ex1(n)

ifn=1then

pro1(n)

else

pro2(n)

ex1(n/2)

endif

return

endex1

2.该递归算法的时间复杂性T(n)满足下列递归方程:

将n=

a=1,c=2,g(n)=

d=1代入该类递归方程解的一般形式得:

T(n)=1+

=1+k

-

=1+k

-

=

+

+1

所以,T(n)=

+

+1=

一个旅行者要驾车从A地到B地,A、B两地间距离为s。

A、B两地之间有n个加油站,已知第i个加油站离起点A的距离为公里,0=,车加满油后可行驶m公里,出发之前汽车油箱为空。

应如何加油使得从A地到B地沿途加油次数最少?

给出用贪心法求解该最优化问题的贪心选择策略,写出求该最优化问题的最优值和最优解的贪心算法,并分析算法的时间复杂性。

三、算法填空

6.排列问题

Template

voidperm(Typelist[],intk,intm)

{//产生[list[k:

m]的所有排列

if(k==m)

{//只剩下一个元素

for(inti=0;i<=m;i++)cout<

cout<

}

else//还有多个元素待排列,递归产生排列

for(inti=k;i<=m;i++)

{

swap(list[k],list[i]);

perm(list,k+1;m);

swap(list[k],list[i]);

}

}

四、问答题

1.分治法的基本思想时将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。

递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。

3.分治法与动态规划法的相同点是:

将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

两者的不同点是:

适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。

而用分治法求解的问题,经分解得到的子问题往往是互相独立的。

4.分支限界法与回溯法的相同点是:

都是一种在问题的解空间树T中搜索问题解的算法。

不同点:

(1)求解目标不同;

(2)搜索方式不同;

(3)对扩展结点的扩展方式不同;

(4)存储空间的要求不同。

6.分治法所能解决的问题一般具有的几个特征是:

(1)该问题的规模缩小到一定的程度就可以容易地解决;

(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;

(3)利用该问题分解出的子问题的解可以合并为该问题的解;

(4)原问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

7.用分支限界法设计算法的步骤是:

(1)针对所给问题,定义问题的解空间(对解进行编码);分

(2)确定易于搜索的解空间结构(按树或图组织解);

(3)以广度优先或以最小耗费(最大收益)优先的方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

8.常见的两种分支限界法的算法框架

(1)队列式(FIFO)分支限界法:

按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。

(2)优先队列式分支限界法:

按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

9.回溯法中常见的两类典型的解空间树是子集树和排列树。

当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树。

这类子集树通常有2n个叶结点,遍历子集树需O(2n)计算时间。

当所给的问题是确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。

这类排列树通常有n!

个叶结点。

遍历排列树需要O(n!

)计算时间。

10.分支限界法的搜索策略是:

在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展结点。

为了有效地选择下一扩展结点,加速搜索的进程,在每一个活结点处,计算一个函数值(限界),并根据函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间上有最优解的分支推进,以便尽快地找出一个最优解。

(1)用计算机求解问题的步骤:

1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制

(2)算法定义:

算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程

(3)算法的三要素

1、操作2、控制结构3、数据结构

算法具有以下5个属性:

  有穷性:

一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。

  确定性:

算法中每一条指令必须有确切的含义。

不存在二义性。

只有一个入口和一个出口

  可行性:

一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。

  输入:

一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。

输出:

一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。

算法设计的质量指标:

  正确性:

算法应满足具体问题的需求;

  可读性:

算法应该好读,以有利于读者对程序的理解;

  健壮性:

算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。

  效率与存储量需求:

效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。

一般这两者与问题的规模有关。

经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法

五、算法题

3、矩阵乘法:

C11=A11B11+A12B21C12=A11B12+A12B22

C21=A21B11+A22B21C22=A21B12+A22B22

成为8个n/2阶矩阵乘积,4个n/2阶矩阵加法。

如果以数的乘法作为基本运算,则可得到分块矩阵乘法的递归方程

8(O

(1))n=2

T(n)=

8T(n/2)n>2

代入递归方程得T(n)=n3

使用了7个n/2阶矩阵乘积,18个n/2阶矩阵加法,其算法复杂度为O(n2.81)

2.81=log27

算法

procedureSTRASSEN(n,A,B,C);

begin

ifn=2thenMATRIX-MULTIPLY(A,B,C)

elsebegin

将矩阵A和B依

(1)式分块;

STRASSEN(n/2,A11,B12-B22,M1);

STRASSEN(n/2,A11+A12,B22,M2);

STRASSEN(n/2,A21+A22,B11,M3);

STRASSEN(n/2,A22,B21-B11,M4);

STRASSEN(n/2,A11+A22,B11+B22,M5);

STRASSEN(n/2,A12-A22,B21+B22,M6);

STRASSEN(n/2,A11-A21,B11+B12,M7);;end;end;

3、快速排序:

例7快速排序

对输入的数组a[p:

r]按以下三个步骤进行:

分解(Divide),以a[p]为基准元素将a[p:

r]划分为三部分:

a[p:

q-1],a[q],a[q+1:

r],使得a[p:

q-1]中的元素小于a[q],a[q+1:

r]中的元素大于a[q].

递归求解(Conquer),通过递归调用快速排序算法分别对a[p:

q-1],a[q+1:

r]排序。

合并(merge),由于已排好序,合并不需作什么.

快速排序递归算法:

Quicksort(a,p,r)

{if(p

{q=partition(a,p,r);

Quicksort(a,p,q-1);

Quicksort(a,p,q-1);

}

}

快速排序算法分析

Partition(a,p,r)计算时间为O(r-p+1),即f(n)=n

最好情况,每次q=(p+r)/2

O

(1)n=1

T(n)=2T(n/2)+nn>1

解方程得:

T(n)=n+nlog2n=O(nlog2n)

最坏情况,每次q=p或q=r

O

(1)n=1

T(n)=T(n-1)+nn>1

解方程得:

T(n)=O(n2)

 

第三章

(六)、掌握贪心策略基本思想及基本性质,并能证明贪心选择性质

1、贪心策略基本思想:

和动态规划类似,贪心法用于多阶段的决策过程,每个阶段都有可供选择的多种决策,各个阶段的决策构成一个决策序列.贪心法的目标是选取一个最优的决策序列.

2、基本性质:

贪心法选择决策的原则是局部最优,而不是全局最优。

如果一个问题的整体最优解可以通过一系列局部最优选择来实现,称该问题具有贪心选择性质.贪心选择性质是贪心法可行的一个基本要素.它是保证贪心法的求解结果为最优解的条件.

最优子结构性质

3、证明:

(七)、掌握贪心策略实例:

最小生成树、背包问题、作业调度问题

1、背包问题:

给定n个重量为(w1,w2,…,wn),价值为(v1,v2,…vn)的物品和一个容量为C的背包,要求选择部分物品装进背包,使得背包内物品价值总和最大.

1)问题的解(x1,x2,…xn)0≤xi≤1

2)约束条件∑xiwi≤C

3)目标函数∑xivi达到最大

解题思路:

1)尽可能多选择价值大的物品.

2)尽可能多选择重量轻的物品.

3)尽可能多选择价值/重量比大的物品.

贪心法的一般过程

1)根据题意选取一种度量标准或贪心策略.

2)按度量标准对n个输入排序.

3)按序做出贪心选择.

4)检查该选择是否与前面的选择构成可行解.

5)如果可行,则将该选择加入解中,否则不加入.

6)继续做下一步选择.

Greedy-knapsack()

{将物品按v/w从大到小排序

for(i=1;i<=n;i++)x[i]=0;

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

if(w[i]

{x[i]=1;c=c-w[i]}

else{x[i]=cu/w[i];break;}

outputx[1]…x[n]

}

第四章

(八)掌握动态规划的基本思想及解题步骤

1、动态规划的基本思想:

动态规划是和过程最优化概念紧密联系的.在过程进行中,在客观条件允许范围内选择最好的措施控制过程的发展,以期最好的完成任务.动态规划用于多阶段的决策过程,每个阶段都有可供选择的多种决策,各个阶段的决策构成一个决策序列.动态规划的目标是选取一个最优的决策序列

形式:

如:

1)问题的解:

边的序列,每一步决策选择一条边

{,,,,}

2)约束条件:

两个顶点之间有边存在

3)可行解:

满足约束条件的解

4)目标函数:

解中边的权值和达到最小

5)最优解:

使目标函数取极值的可行解

(九)、掌握动态规划实例:

投资分配问题、货币分配问题、0-1背包问题

1、投资分配问题:

总资源数为a,工程个数为n。

给每个工程投资不同,所获得的利润也不同。

现给定各个工程的资源利润表和资源总数,问:

如何分配资源,才能获得最大利润。

记Fn(a)为给n个工程投资资源数为a时可获得的最大利润,则有:

Fn(a)=max{G1(x1)+G2(x2)+…Gn(xn)}

x1+x2+…xn=a

如果给第n项工程投资x,给前n-1项工程投资a-x,则Fn(a)=max{Fn-1(a-x)+Gn(x)}

X∈(0,1,…,a)

记Fk(z)为给k个工程投资总资源数为z时可以获得的最大利润,则有递推公式:

Fk(z)=max{Fk-1(z-x)+Gk(x)}Z∈(0,1,…,a)

X∈(0,1,…,z)

F1(z)=G1(z)

利用这一递推公式,我们可以得出该问题的算法。

投资问题算法

Investing(m,n,g[i][j])

{for(j=0;j<=m;j=j+1){f[1][j]=g[1][j];d[1][j]=j}

for(i=2;i<=n;i=i+1)

for(j=0;j<=m;j=j+1)

{f[i][j]=0;

for(k=0;k<=j;k=k+1)

{s=f[i-1][j-k]+g[i][k]

if(s>f[i][j]){f[i][j]=s;d[i][j]=k}

}

}

构造最优解

}

m总投资数额。

n工程总项数。

g[I][J]存放资源利润表,I为工程号,J为投资数额

构造最优解

{s=m

x[n]=d[n][m]

for(k=n-1;k>0;k=k-1)

{s=s-x[k+1];x[k]=d[k][s];}

for(k=1;k<=n;k=k+1)outputx[k]

outputf[n][m]

}

d[I][J]给前I项工程投资额为J,获最大利润时第I项的投资额

20/1背包问题:

给定n个重量为(w1,w2,…,wn),价值为(v1,v2,…vn)的物品和一个容量为C的背包,要求选择部分物品装进背包,使得背包内物品价值总和最大.

1)问题的解(x1,x2,…xn)xi=0,1

2)约束条件∑xiwi<=C

3)目标函数∑xivi达到最大

0/1背包问题的特征

第一步决策第n种物品是否装入背包.剩余问题是给定n-1个重量为(w1,w2,…,wn-1),价值为(v1,v2,…vn-1)的物品和一个容量为C-wn*xn的背包的0/1背包问题.

递归地定义最优值,导出递推公式.

V(n,c)=max{V(n-1,C),V(n-1,C-wn)+vn}

0i=0

V(i,j)=V(i-1,j)j

max{V(i-1,j),V(i-1,j-wi)+vi}j>=wi

 

0/1背包问题的算法

Knapsack()

{for(i=1;i<=n;i++)v[i][0]=0

for(j=1;j<=C;j++)v[0][j]=0

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

for(j=1;j<=C;j++)

if(j

elsev[i][j]=max{v[i-1][j],v[i-1][j-w[i]]+v[i]}

outputv[n][c]

}

构造最优解

{j=C;

for(i=n;i>=1;i--)

{if(v[i][j]>v[i-1][j]){x[i]=1;j=j-w[i]}

elsex[i]=0;

outputx[i];

}

}

第五、六章

(十)、掌握回溯法和分支限界法的基本思想和搜索策略

1、回溯法:

从开始结点(根结点)出发,以深度优先方式搜索整个解空间。

这个开始结点成为活结点,如果当前扩展节点处不能纵深方向移动,则当前扩展结点成为死结点。

此时往回移动至最近的一个活结点处,并使这个活结点成为当前扩展结点,否则向纵深方向移至一个新结点,并成为新的活结点。

直到找到所要求的解或空间中已无活结点时为止。

(回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。

但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,)

2、回溯法搜索策略:

以深度优先方式

3、分支限界法:

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

4、分置限界法搜索策略:

以广度优先或以最小耗费(最大效益)优先的方式

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1