算法分析与设计考试题目
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请给出该方法的算法描述,并分析其复杂性。
2、已知
Ak
(a ) (k )
ij
ri *ri1
,k=1,2,3,4,5,6,r1=5,r2=10,r3=3,r4=12,r5=5,r6=50,r7=6,
求矩阵链积 A1×A2×A3×A4×A5×A6 的最佳求积顺序。(20 分) 3、对于下图使用 Dijkstra 算法求由顶点 a 到其他各个顶点的最短路径。并给出求各个顶点对之间 的最短路径的算法思想。(20 分)。
h.
40
40
35
30
10 150 140 35
146.85
(1,1, 0, 0,1,1,
2) 7
i.
40
30
50
35
30
150 125 60
167.5
(1, 0,1,1,1, 5 12
, 0)
j.
40
30
50
35
30
Fra Baidu bibliotek
150 145 60
157.5
(0,1,1,1,1, 1 12
,
0)
在 Q1 处获得该问题的最优解为 (1,1,1,1, 0, 0,1) ,背包效益为 170。即在背包中装入物品 F、B、G、
int mid; while (left<=right) {
mid=int((left+right)/2); if (v==A[mid]) return mid; else if (v>A[mid]) right=mid-1; else left=mid+1; } return -1; } (3)递归算法: 输入:递减数组 A[left:right],待搜索元素 v。【1 分】 输出:v 在 A 中的位置 pos,或者不在 A 中的消息(-1)。【1 分】 步骤:【3 分】 int BinarySearch(int A[],int left,int right,int v) { int mid; if (left<=right) { mid=int((left+right)/2); if (v==A[mid]) return mid;
第 5 页 共 12 页
else if (v>A[mid]) return BinarySearch(A,left,mid-1,v);
else return BinarySearch(A,mid+1,right,v);
}
else
return -1;
}
(4)搜索 18:首先与 27 比较,18<27,在后半部分搜索;再次与 18 比较,搜索到,返回 5。【1
山东科技大学 2007—2008 学年第一学期
《算法设计与分析》考试试卷
班级
姓名
学号________
算法设计与分析(1)
1、排序和查找是经常遇到的问题。按照要求完成以下各题:(20 分) 1) 对数组 A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。 2) 请描述递减数组进行二分搜索的基本思想,并给出非递归算法。 3) 给出上述算法的递归算法。 4) 使用上述算法对 1)所得到的结果搜索如下元素,并给出搜索过程:18,31,135。 2、对于下图使用 Dijkstra 算法求由顶点 a 到顶点 h 的最短路径。(20 分)。
ij
ri *ri1
,k=1,2,3,4,5,6,r1=5,r2=10,r3=3,r4=12,r5=5,r6=50,r7=6,
求矩阵链积 A1×A2×A3×A4×A5×A6 的最佳求积顺序。(要求:给出计算步骤)(20 分) 5、回答如下问题:(20 分)
1) 什么是算法?算法的特征有哪些?
2) 什么是 P 类问题?什么是 NP 类问题?请描述集合覆盖问题的近似算法的基本思想。
u Vi , v Vi1 。求由 s 到 t 的最小成本路径。(25 分)
1) 给出使用动态规划算法求解多段图问题的基本思想。 2) 使用上述方法求解如下多段图问题。
第 2 页 共 12 页
4、回答如下问题:(15 分) 1) 什么是算法?算法的特征有哪些? 2) 什么是 P 类问题?什么是 NP 类问题?请描述集合覆盖问题的近似算法的基本思想。 5、设 x1、x2、x3 是一个三角形的三条边,而且 x1+x2+x3=14。请问有多少种不同的三角形?给出解 答过程。(20 分)
第 3 页 共 12 页
算法设计与分析(3)
1、设数组 A 有 n 个元素,需要找出其中的最大最小值。(20 分) 1) 请给出一个解决方法,并分析其复杂性。 2) 把 n 个元素等分为两组 A1 和 A2,分别求这两组的最大值和最小值,然后分别将这两组的最
大值和最小值相比较,求出全部元素的最大值和最小值。如果 A1 和 A2 中的元素多于两个, 则再用上述方法各分为两个子集。直至子集中元素至多两个元素为止。这是什么方法的思想?
5 4 2 4 4 0
6 2010 1950 1770 1860 1500 0
6 2 2 4 4 5 0
因此,最佳乘积序列为(A1A2)((A3A4)(A5A6)),共执行乘法 2010 次。【结论 2 分】 五、(1)算法是解决某类问题的一系列运算的集合【2 分】。具有有穷行、可行性、确定性、0 个 或者多个输入、1 个或者多个输出【8 分】。 (2)用确定的图灵机可以在多项式实践内可解的判定问题称为 P 类问题【2 分】。用不确定的图灵 机在多项式实践内可解的判定问题称为 P 类问题。【2 分】
第 1 页 共 12 页
算法设计与分析(2)
1、排序和查找是常用的计算机算法。按照要求完成以下各题:(20 分)
1) 对数组 A={15,9,115,118,3,90,27,25,5},使用合并排序方法将其排成递减序。
2) 若改变二分搜索法为三分搜索法,即从一个递减序列 A 中寻找元素 Z,先与元素 A[ n ] 比较, 3
始节点到其他节点的最短路径,最终可以求得所有顶点对之间的最短路径。【2 分】
三、按照单位效益从大到小依次排列这 7 个物品为:FBGDECA。将它们的序号分别记为 1~7。
则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序 1 分】
第 6 页 共 12 页
x3 1
x2 1
4、15 谜问题:在一个 4×4 的方格的棋盘上,将数字 1 到 15 代表的 15 个棋子以任意的顺序置入
各方格中,空出一格。要求通过有限次的移动,把一个给定的初始状态变成目标状态。移动的规
则是:每次只能把空格周围的四格数字(棋子)中的任意一个移入空格,从而形成一个新的状态。
为了有效的移动,设计了估值函数 C1(x),表示在结点 x 的状态下,没有到达目标状态下的正确位
答过程。(20 分)
第 4 页 共 12 页
算法设计与分析(1)参考答案与评分标准
一、【20 分】 (1)第一步:15 29 135 18 32 1 27 25 5
第二步:29 135 18 32 27 25 15 1 5 第三步:135 32 29 18 27 25 15 5 1 第四步:135 32 29 27 25 18 15 5 1
置的棋子的个数。(20 分)请使用该估计函数,对图示的初始状态,给出使用分支限界方法转换到
目标状态的搜索树。初始状态
目标状态
12
4
5637
9 10 12 8
13 14 11 15
1234 5678 9 10 11 12 13 14 15
5、设 x1、x2、x3 是一个三角形的三条边,而且 x1+x2+x3=14。请问有多少种不同的三角形?给出解
3、假设有 7 个物品,它们的重量和价值如下表所示。若这些物品均不能被分割,且背包容量 M=
150,使用回溯方法求解此背包问题。请写出状态空间搜索树(20 分)。
物品 A B C D E F G
重量 35 30 60 50 40 10 25
价值 10 40 30 50 35 40 30
4、已知
Ak
(a ) (k )
二、【20 分】
用 V1 表示已经找到最短路径的顶点,V2 表示与 V1 中某个顶点相邻接且不在 V1 中的顶点;E1 表示
加入到最短路径中的边,E2 为与 V1 中的顶点相邻接且距离最短的路径。【1 分】
步骤 V1
V2
E1
E2
1. {a}
{b} {}
{ab}
2. {a,b}
{d} {ab}
{bd}
60
4
e. 40 40 50 35 30 150 130 175 60
(1,1, 0,1,1, 1 , 0) 3
f. 40 40 50 35 10 150 130 170.71
35
(1,1, 0,1,1, 0, 4) 7
g. 40 40 50 30 160
(1,1, 0,1, 0,1, 0)
分】
搜索 31:首先与 27 比较,31>27,在前半部分搜索;再次 32 比较,31<32,在后半部分搜索,
与 29 比较,31>29,此时只有一个元素,未找到,返回-1。【2 分】
搜索 135:首先与 27 比较,135>27,在前半部分搜索;再次 32 比较,135>32,在前半部分
搜索;与 135 比较,相同,返回 0。【2 分】
若
Z
A[
n]
n ,则在前面 [
]
个元素中寻找
Z;否则与
A[ 2n]
n 比较,总之使余下的序列为 [ ]
个
3
3
3
3
元素。给出该方法的伪代码描述。
3) 使用上述算法对(1)所得到的结果搜索如下元素,并给出搜索过程:118,31,25。 2、假设有 7 个物品,它们的重量和价值如下表所示。若这些物品均可以被分割,且背包容量 M= 150,如果使用贪心方法求解此背包问题,请回答:(20 分)。
x1 1 a
a
x1 0
j
x2 0
a
i
x4 1
a
x5 0
b
x6 0
c
x7 0
Q1
a
x4 0
x3 0
d
e
x4 1
x4 0
e
h
x5 1
x5 0
e
g
x6 0
f
【状态空间搜索树及其计算过程 17 分,每个节点 1 分】
a. 40 40 30 50 35 150 115 190.625 (1,1,1,1, 7 , 0, 0)
40
8
b. 40 40 30 50 30 150 115 177.5 (1,1,1,1, 0, 7 , 0)
60
12
c. 40 40 30 50 10 170
(1,1,1,1, 0, 0,1)
d. 40 40 30 35 30 150 105 167.5 (1,1,1, 0,1, 3 , 0)
【1 分】 【1 分】 【1 分】
(2)基本思想:首先将待搜索元素
v
与数组的中间元素
A
n 2
进行比较,如果
v
A
n 2
,则在
前半部分元素中搜索
v;若
v
A
n 2
,则搜索成功;否则在后半部分数组中搜索
v。【2
分】
非递归算法: 输入:递减数组 A[left:right],待搜索元素 v。【1 分】 输出:v 在 A 中的位置 pos,或者不在 A 中的消息(-1)。【1 分】 步骤:【3 分】 int BinarySearch(int A[],int left,int right,int v) {
3. {a,b,d}
{c,f} {ab,bd}
{dc,df}
4. {a,b,d,c}
{f} {ab,bd}
{df}
5. {a,b,c,d,f} {e} {ab,bd,dc,df}
{fe}
6. {a,b,c,d,e,f} {g} {ab,bd,dc,df,fe}
{eg}
7. {a,b,c,d,e,f,g} {h} {ab,bd,dc,df,fe,eg} {gh}
D、A 时达到最大效益,为 170,重量为 150。【结论 2 分】 四、使用动态规划算法进行求解。 求解矩阵为:【每个矩阵 18 分】
第 7 页 共 12 页
1
2
3
4
10
150
330
405
2
0
360
330
3
0
180
4
0
5
6
1
2
3
4
10
1
2
2
2
0
2
2
3
0
3
4
0
5
6
5 1655 2430 930 3000 0
1) 对各个物品进行排序时,依据的标准都有哪些? 2) 使用上述标准分别对 7 个物品进行排序,并给出利用各个顺序进行贪心求解时获得解。 3) 上述解中哪个是最优的?
物品 A B C D E F G
重量 35 30 60 50 40 10 25
价值 10 40 30 50 35 40 30
3、多段图问题:设 G=(V,E)是一个赋权有向图,其顶点集 V 被划分成 k>2 个不相交的子集 Vi: 1 i k ,其中,V1 和 Vk 分别只有一个顶点 s(称为源)和一个顶点 (t 称为汇),图中所有的边(u,v),
8. {a,b,c,d,e,f,g,h} {}
{ab,bd,de,df,fe,eg,gh} {} 【以上每步 2 分】
结果:从 a 到 h 的最短路径为 a b d f e g h ,权值为 18。【1 分】
求所有顶点对之间的最短路径可以使用 Dijkstra 算法,使其起始节点从 a 循环到 h,每次求起