《算法分析与设计》期末考试总结复习习题纲(完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
欢迎阅读
《算法分析与设计》期末复习题
一、 选择题
1. 算法必须具备输入、输出和( D )等4个特性。
A .可行性和安全性
B .确定性和易读性
C .有穷性和安全性
D .有穷性和确定性
2. 算法分析中,记号O 表示( B ),记号Ω表示( A )
A.渐进下界
B.渐进上界
C.非紧上界
D.紧渐进界
3. A C
4. ,
用O A C 5. A C 6. A C 7. 在有A C 8. A C 9. A C 10. 下列算法中通常以自底向上的方式求解最优解的是( B )。
A .备忘录法
B .动态规划法
C .贪心法
D .回溯法
11. 下列算法中不能解决0/1背包问题的是( A )。
A .贪心法
B .动态规划
C .回溯法
D .分支限界法
12. 下列哪个问题可以用贪心算法求解( D )。
A .LCS 问题
B .批处理作业问题
C .0-1背包问题
D .哈夫曼编码问题
13. 用回溯法求解最优装载问题时,若待选物品为m 种,则该问题的解空间树的结点个数为
()。
A.m! B.2m+1
C.2m+1-1 D.2m
14.二分搜索算法是利用(?A??)实现的算法。
A.分治策略?? B.动态规划法??
C.贪心法??? D.回溯法
15.下列不是动态规划算法基本步骤的是(?B??)。P44
A.找出最优解的性质? B.构造最优解?
C.算出最优解(应该是最优值)? D.定义最优解
16.下面问题( B )不能使用贪心法解决。
A.单源最短路径问题 B.N皇后问题
C
17.
A.
C.
18.
A
C
19.
A
C
20.
A
C
21.
A
B
D
22.
A.
B
C
D
23.
A.递归地定义最优值
B.分析最优解的性质,并刻画其结构特征
C.根据计算最优值时得到的信息,构造最优解 (可以省去的) D.以自底向上的方式计算出最优值
24.分治法所能解决的问题应具有的关键特征是( C )。P16
A.该问题的规模缩小到一定的程度就可以容易地解决
B.该问题可以分解为若干个规模较小的相同问题
C.利用该问题分解出的子问题的解可以合并为该问题的解
D.该问题所分解出的各个子问题是相互独立的
25.下列关于回溯法的描述不正确的是( D )。P114
A.回溯法也称为试探法
B .回溯法有“通用解题法”之称
C .回溯法是一种能避免不必要搜索的穷举式搜索法
D .用回溯法对解空间作深度优先搜索时只能用递归方法实现
26. 常见的两种分支限界法为( D )。P161
A. 广度优先分支限界法与深度优先分支限界法;
B. 队列式(FIFO )分支限界法与堆栈式分支限界法;
C. 排列树法与子集树法;
D. 队列式(FIFO )分支限界法与优先队列式分支限界法;
二、 填空题
1.
222. 3. 4. 5. 6. 7. 8. 9. 10. 1. 例递归式为: 边界条件 递归方程
递归算法:
int factorial (int n)
{ if (n==0) return 1; 递归出口
return n * factorial (n-1); 递归调用
}
例2:用递归技术求解Hanoi 塔问题,Hanoi 塔的递归算法。P15
其中Hanoi (int n, int a, int c, int b)表示将塔座A 上的n 个盘子移至塔座C ,以塔座B 为辅助。Move(a,c)表示将塔座a 上编号为n 的圆盘移至塔座c 上。
void hanoi (int n, int a, int c, int b)
00)!1(1!>=⎩⎨⎧-=n n n n n
{
if (n > 0)
{
hanoi(n-1, a, b, c);
move(a,c);
hanoi(n-1, b, c, a);
}
}
2.用分治法求解快速排序问题。
快速排序算法 P25 、作业、课件第2章(2)42页-50页
{
}
{
// 将> x的元素交换到右边区域
while (true) {
while (a[++i] while (a[- -j] >x); if (i >= j) break; Swap(a[i], a[j]); } a[p] = a[j]; a[j] = x; return j; } 3.用贪心算法求解最优装载问题。 最优装载问题 P95 课件第4章(2)第3-8页 template { } 4. 例1 { Typew *w; //物品重量数组 Typep *p; //物品价值数组 Typew cw; //当前重量 Typep cp; //当前价值 Typep bestp; //当前最优价值 }; void Knap { if(i>n) { bestp=cp; return; }