华南理工大学广州学院算法设计与分析期末考试复习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<a/100.0<<'\t'<<b/100.0<<'\t'<<c/100.0<<'\t'<<d/100.0<<endl; return; }
} } }
第四章 分治法
1. 分治法的基本思想(重要!自底向上,理解+ 应用):
✓ 将要求解的原问题划分成k个较小规模的子问题,对这k个子问题分别 求解。如果子问题的规模仍然不够小,则再将每个子问题划分为k个 规模更小的子问题,如此分解下去,直到问题规模足够小,很容易求 出其解为止,再将子问题的解合并为一个更大规模的问题的解,自底 向上逐步求出原问题的解。
第二小,依此类推…,O(n2);
Page 12
复习
2020/1百度文库18
第三章 蛮力法
➢ 其中:
✓ 冒泡排序:扫描整个序列,在扫描过程中两两 比较相邻记录,如果反序则交换,直到n-1趟扫
描后,即排好序, O(n2) ;
✓ TSP:把所有可能的回路都找出来,就可以得
到最短路径,O(n!);
✓ 7-11:把所有可能都计算一遍,就能得到正确 的解;
✓ 百钱买百鸡:把所有可能都计算一遍,就能得 到正确的解。
Page 13
复习
2020/1/18
第三章 蛮力法
3. 冒泡排序、选择排序、TSP问题的设计思想和伪代码(可 能出简答题)
4. 7-11问题、百钱买百鸡问题的代码实现(猜测是编程题)
Page 14
复习
2020/1/18
冒泡排序
• 设计思想
}
7-11问题(编程,代码要记牢)
设计蛮力算法找出四件物品的价格各是什么?
#include<iostream.h> void main() {
int a,b,c,d; for(a=1;a<=711;a++){
for(b=1;b<=711;b++){ for(c=1;c<=711;c++){ d=711-a-b-c; if(a*b*c*d==711){
路径长度
18 11 23 11 23 18
是否最短
否 是 否 是 否 否
注意到,在图中有3对不同的路径,对每对路径来说, 不同的只是路径的方向,因此,可以将这个数量减半,则可 能的解有(n-1)!/2个。这是一个非常大的数,随着n的增长, TSP问题的可能解也在迅速地增长。用蛮力法求解TSP问题, 其时间复杂性为O(n!),只能解决问题规模很小的实例。
选择排序
• 设计思想
TSP问题
• 设计思想
TSP问题:旅行家要旅行n个城市然后回到出 发城市,要求各个城市经历且仅经历一次,并要求 所走的路程最短。
用蛮力法解决TSP问题,可以找出所有可能的 旅行路线,从中选取路径长度最短的简单回路。
a 2b
58 c
73 d
1
序号
1 2 3 4 5 6
路径
a→b→c→d→a a→b→d→c→a a→c→b→d→a a→c→d→b→a a→d→b→c→a a→d→c→b→a
复习
复习
考试题型:
➢选择题(算法类型、时间复杂度,共15 题,30分) ➢简答题(设计思想,共2题,12分) ➢应用题(解题步骤、搜索空间树等,共4 题,48分) ➢编程题(上机实验题,作业题等,共1题, 10分)
第一章、第二章
➢ 算法的几种描述方法(重点掌握伪代码和 C++语言,会使用伪代码写算法);
优点:表达能力强,抽象性强,容易理解
理解大O符号的含义;时间复杂度
算法的五大特性:
① 输入:一个算法有零个或多个输入。 ② 输出:一个算法有一个或多个输出。 ③ 有穷性:一个算法必须总是在执行有穷步之后结束,且每
一步都在有穷时间内完成。算法的有穷性意味着不是所有 的计算机程序都是算法. ④ 确定性:算法中的每一条指令必须有确切的含义,对于相 同的输入只能得到相同的输出。 ⑤ 可行性:算法描述的操作可以通过已经实现的基本操作执 行有限次来实现(每步可执行)。
(编程,代码要记牢)
一个简单的例子——百元买百鸡问题
已知公鸡5元一只,母鸡3元一只,小鸡1元三只,用100元钱买100只鸡, 问公鸡、母鸡、小鸡各多少只?
void chicken(){ int x,y,z; for(x=0;x<=20;x++){ for(y=0;y<=33;y++){ z=100-x-y; if((z%3==0)&&(5*x+3*y+z/3==100)){ cout<<"公鸡:"<<x<<"母鸡:"<<y<<"小鸡:"<<z<<endl; } } }
⑵ 流程图
优点:流程直观 缺点:缺少严密性、灵活性 使用方法:描述简单算法 注意事项:注意抽象层次
⑶程序设计语言
优点:能由计算机执行 缺点:抽象性差,对语言要求高 使用方法:算法需要验证 注意事项:尽量将算法写成子函数
⑷ 伪代码——算法语言
伪代码(Pseudocode):介于自然语言和 程序设计语言之间的方法,它采用某一程序 设计语言的基本语法,操作指令可以结合自 然语言来设计。
➢ 理解大O符号的含义; ➢ 算法的几个重要特性:输入、输出、有穷
性、确定性、可行性。
Page 3
复习
2020/1/18
算法的几种描述方法 (重点掌握伪代码和C++语言,会使用伪代码写算法);
⑴自然语言
优点:容易理解 缺点:冗长、二义性 使用方法:粗线条描述算法思想 注意事项:避免写成自然段
Page 11
复习
2020/1/18
第三章 蛮力法
➢ 其中:
✓ BF:依次扫描,对比,O(n+m);
✓ KMP:依次扫描,对比(虽然这个“依次”已
经是按照一定的规律,效率较高),O(n+m),
注意:对于KMP算法,必须求出next数组; ✓ 选择排序:扫描整个序列,找到整个序列的最
小记录和序列中的第一个记录交换位置,再扫
Page 9
第1章 算法设计基础
2020/1/18
第三章 蛮力法
1. 蛮力法的基本思想(重要!):
✓ 蛮力法依赖的基本技术——扫描技术,即采 用一定的策略将待求解问题的所有元素依次 处理一次,从而找出问题的解;
✓ 关键——依次处理所有元素。
Page 10
复习
2020/1/18
第三章 蛮力法
2. 熟记哪些问题使用了蛮力法进行解决:顺 序查找、串匹配(KMP,BM,BF),选择排 序,冒泡排序,生成排列对象,生成子集, 0/1背包,任务分配,哈密顿回路,TSP, 最 近 对 问 题 , 凸 包 问 题 , 7-11 问 题 , 百 钱 买百鸡问题;并熟记这些问题的时间复杂 度;
相关文档
最新文档