算法设计课件 概论、第一章、第二章
合集下载
算法分析与设计概论
9
How to Study Algorithm?
“Sometimes we have experiences, and sometimes not. Therefore, the better way is to learn more."
10
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行 每条指令的时间也有限。
1) 第一种解法:
输入:所购买的三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[ ],m[ ],s[ ] 1. void chicken_question(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int a,b,c; 4. k = 0; 5. for (a=0;a<=n;a++) 6. for (b=0;b<=n;b++) 7. for (c=0;c<=n;c++) { 8. if ((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. }}}
矩阵。
数组 T:表示售货员的路线,依次存放旅行路线中的城 市编号。
售货员的每一条路线,对应于城市编号的一个排列。
n 个城市共有 n! 个排列,采用穷举法逐一计算每一条路线的费 用,从中找出费用最小的路线,便可求出问题的解。
算法设计与分析-第2章-算法分析基础PPT课件
2k
1 5(
n 2k 1
)2
L 2×5´( 2n)2
5n2
T (n)
7n
k 1 5
i0
n 2i
2
7n
5n2 (2
2
1
k 1
)
10 n2 3n 10 n2 O (n2 )
• 例: Merge-sort排序算法的复杂性递归方程为
T(n)=(1)
if n=1
T(n)=2T(n/2)+(n) if n>1
T(n) = ?
.
27
2.5 递归算法的分析
三、递推关系式的求解-- 扩展递归技术
步骤: 循环地展开递推关系式, 把递推关系式转化为求和表达式, 然后可使用求和技术解之。
能解决输入规模为多大的问题?
设在新机器上用 t 秒时间能解决输入规模为 N 的问题,则
由于此时
f (N)
N,2 新机器的运行速度/每语句为: t新
t0 , 64
代入关系式
f (N ) *t新 t ,得
N2
*
t0 64
t
n2
* t0
解,得
N 8n
思考:以上说明了什么问题?
.
14
2.2 算法的渐进分析
.
28
2.5 递归算法的分析
求以下递推式的时间复杂性
7
T (n)
2T (n
2)
5n2
解:设 n=2k
T (n) 2T (n 2) 5n2
n1 n>1
2(2T (n 4)( n 4)2 ) 5(n 2)2 ) 5n2
2k T (1)
间就一个常因子范围内而言是相同的。
算法算法概述详解PPT课件
34
34
第34页/共47页
渐近符号
Ω的定义:如果存在正的常数C和自然数N0,使得当NN0 时有f(N)Cg(N),则称函数f(N)当N充分大时下有界,且g(N) 是它的一个下界,记为f(N)=Ω(g(N))。即f(N)的阶不低于g(N) 的阶。
θ的定义:定义f(N)=θ(g(N)) 当且仅当f(N)=O(g(N))且
12
12
第12页/共47页
算法与程序的区别
程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如,操作系统是一个在无限循环中执行的程序,因而 不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个问题 由操作系统中的一个子程序通过特定的算法来实现。该子 程序得到输出结果后便终止。
• 在数学上, t(N)是T(N)的渐近表达式,是T(N)略去低阶 项留下的主项。T例(N如), N2 N log N 1 , t(N) N 2
• t(N)比T(N) 简单。
第32页/共47页
渐近符号
算法复杂性在渐近意义下的阶:
渐近意义下的记号:O、Ω、θ、o 设f(N)和g(N)是定义在正数集上的正函数。 O的定义:如果存在正的常数C和自然数N0,使得当NN0时有 f(N)Cg(N),则称函数f(N)当N充分大时有上界,且g(N)是它的一 个上界,记为f(N)=O(g(N))。即f(N)的阶不高于g(N)的阶。
10
第10页/共47页
11
11
第11页/共47页
算法及其重要性质
算法:是指解决问题的一种方法或一个过程。 算法是由若干条指令组成的有穷序列,满足性质: (1)输入:有0个或多个由外部提供的量作为算法的输入。 (2)输出:算法产生至少一个量作为输出。(1个或多个) (3)确定性:组成算法的每条指令是清晰,无歧义的。 (4)有限性:算法中每条指令的执行次数是有限的,执行每 条指令的时间也是有限的。
算法设计与分析课堂PPT
105 秒
11
算法算设法计设与计分与析分>析算法>教概学述安排
算法设计与分析
2、对给定的算法如何分析它的运行效率(复杂 性)
在给定的计算模型下,研究算法或问题的 复杂性:上界、下界、平均以及问题固有 复杂性
12
算法算设法计设与计分与析分>析算法>教概学述安排
课程目标
使学生掌握计算机算法的通用设计方法 ,学会分析算法的空间和时间复杂性。对一 定的实际问题,能够设计求解算法并分析算法 的效率。
5
算算法法设设计计与与分分析析>算>教法学概安述排
例如:第17周上交报告的安排如下,16周周日早上发现 什么报告都没有写,如何安排时间以确保每门课的报告
都能如期完成?若不能全部按期完成,也能尽量使迟交
报告的数目减到最小?
学科
算法设 计与分
析
数据库 原理
计算机 体系结
构
微机原 理
生物认 证技术
高级程 序设计 原理
算法设计与分析>算法概述
2.算法设计过程(程序设计过程)
1.问题的陈述 理解问题,并用科学规范的语言把所求解问题进行准
确的描述,包括所有已知条件和输出要求.
2.建立数学模型 通过对问题分析,找出其中所有操作对象以及对象之
间的关系,并用数学语言加以描述. 对非数值型解法来说, 数学模型通常是链表,树,图,集合等数据结构.
基本内容:
第一章 算法概述 第二章 递归与分治 第三章 动态规划 第四章 贪心算法 第五章 回朔法 第六章 分支限界法 第七章 随机化算法
预备知识: 离散数学、数据结构、程序设计语言C、C++
15
算法算设法计设与计分与析分>析算法>教概学述安排
算法与程序设计课件
2.Inputbox()函数应用
例2:编程求半径为r=6的圆的面积
r=val (inputbox(“r=”,”输入半 ) 径”) s=3.14*r*r print “圆的面积s=”;s
提问:例2与例1相比,好在哪?
四、顺序结构应用
1.已知长方体的长、宽、高,编开始程求 长方体的全面积和体积。 输入长a
该函数返回值的是字符串类型
三、输入函数
2.Inputbox()函数应用
例1:编程求半径为r=6的圆的面积
r=6 s=3.14*r*r print “圆的面积s=”;s
提问:如果圆的半径为8,15,30分别计算圆的面积, 上述程序段如何修改? 提问:如果计算任意半径圆的面积,上述程序如何修改?
三、输入函数
→先计算,后输出计算值; 结果为 8 结果为 x=8
二、Print语句
4.输出项的间隔符:
输出内容可以是一个或多个。如果是多个输出内容,
则各输出内容之间可以用逗号或分号分隔
(1)分号:则后面一个输出内容紧跟前一个输出(紧凑格) Print "早安"; "中国" 结果为 早安中国
(2)逗号,则按照分区(14个字符位置)格式输出(分区格)
Y=x3*100+x2*10+x1
计算个位数x3 Y=x3*100+x2*10+x1 输出x的反向数y
结束四、顺序结构应用Fra bibliotek2.从键盘上输入一个三位数,然后将它 反向输出。如输入456,输出应为654。
X=val(inputbox(“x=”,“输入”)) X1=x\100 X2=(x-x1*100)\10 X3=x-x1*100-x2*10 Y=x3*100+x2*10+x1 Print “三位数”;x;“的反向数为”;y
例2:编程求半径为r=6的圆的面积
r=val (inputbox(“r=”,”输入半 ) 径”) s=3.14*r*r print “圆的面积s=”;s
提问:例2与例1相比,好在哪?
四、顺序结构应用
1.已知长方体的长、宽、高,编开始程求 长方体的全面积和体积。 输入长a
该函数返回值的是字符串类型
三、输入函数
2.Inputbox()函数应用
例1:编程求半径为r=6的圆的面积
r=6 s=3.14*r*r print “圆的面积s=”;s
提问:如果圆的半径为8,15,30分别计算圆的面积, 上述程序段如何修改? 提问:如果计算任意半径圆的面积,上述程序如何修改?
三、输入函数
→先计算,后输出计算值; 结果为 8 结果为 x=8
二、Print语句
4.输出项的间隔符:
输出内容可以是一个或多个。如果是多个输出内容,
则各输出内容之间可以用逗号或分号分隔
(1)分号:则后面一个输出内容紧跟前一个输出(紧凑格) Print "早安"; "中国" 结果为 早安中国
(2)逗号,则按照分区(14个字符位置)格式输出(分区格)
Y=x3*100+x2*10+x1
计算个位数x3 Y=x3*100+x2*10+x1 输出x的反向数y
结束四、顺序结构应用Fra bibliotek2.从键盘上输入一个三位数,然后将它 反向输出。如输入456,输出应为654。
X=val(inputbox(“x=”,“输入”)) X1=x\100 X2=(x-x1*100)\10 X3=x-x1*100-x2*10 Y=x3*100+x2*10+x1 Print “三位数”;x;“的反向数为”;y
算法设计与分析PPT课件
数组
输出
1 0,0,2 1 2 3
2
1,1,2 0,0,2
123
,2,2
3 1,1,2 1 2 3 1 2 3
0,0,2
2
2,1,2 0,0,2 1 3 2
,2,2
3 2,1,2 1 3 2 1 3 2
0,0,2
2
2,1,2 0,0,2
123
1 1,0,2 2 1 3
层次 栈状态 (i, k, m)
个函数是双递归函数。 Ackerman函数A(n,m)定义如下:
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
Ackerman函数无法找到非递归的定义。
28
Ackerman函数
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
P n ( x ) ( ( ( a n x ( a n 1 ) ( a n 2 ) x a n 3 ) ) x a 1 ) x a 0
T(n)n
Horner(int a[n+1],real x) { int p= a[n];
for (i=1;i<=n;i++) p=p*x+a[n-i]; return p; }
算法复杂性是算法运行所需要的计算机资源的量, 需要时间资源的量称为时间复杂性,需要的空间资源的 量称为空间复杂性。这个量应该只依赖于算法要解的问 题的规模、算法的输入和算法本身的函数。如果分别用 n、I和A表示算法要解问题的规模、算法的输入和算法 本身,而且用C表示复杂性,那么,应该有C=F(n,I,A)。 一般把时间复杂性和空间复杂性分开,并分别用T和S来 表示,则有: T=T(n,I)和S=S(n,I) 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本课程学习方法
参考资料 1. 《国际大学生程序设计竞赛辅导教程》 郭嵩
山、崔昊、吴汉荣、陈明睿编著 北京大学出 版社 2000.12 2. 《国际大学生程序设计竞赛例题解(一)》 数论、计算几何、搜索算法专集,郭嵩山、李 志业、金涛、梁锋编著 电子工业出版社 2006.5
本课程学习方法
3.《国际大学生程序设计竞赛例题解(二)》广 东省大学生程序设计竞赛试题(2003-2005), 郭 嵩山、黎俊瑜、林祺颖著 电子工业出版社 2006.5
<算法设计与分析>课程学习方法
说明: 1. 04-08级大三上学期,09-10级大二下; 2. 04-07级校ICPC集训队员免考(04级8人,
05级7人,06级3人,07级4人)
<算法设计与应用>课程学习方法
3.作业扩展内容:中大OJ 、国内OJ,每周一赛题目,HUST虚拟OJ 上练习题;
的分析和改进.
本课程学习方法
教材 [1] 刘汝佳、黄亮,《算法艺术与信息学竞赛》(第1版),北京:
清华大学出版社,2004,ISBN 7-302-07800-9 [2] Thomas H.Cormen;Charles E.Leiserson;Ronald
L.Rivest;Clifford Stein. Introduction to Algorithms, 2th Ed. The MIT Press, 2001, ISBN 978-0-262-33293-3 影印版:《算法导论》(第二版),北京:高等教育出版社, 2007,ISBN 978-7-040-11050-0 中译版:潘金贵等译,《算法导论》(第2版),北京:机械 工业出版社,2006,ISBN 7-111-18777-6
算法设计与应用(机试)情况及分析:CS
题数:10 9 8 7 6 5 4 3 2 1 0 总 04级 2 0 2 4 19 19 30 24 53 8 11 175 05级 0 0 2 3 2 2 8 15 35 21 11 99 06级 0 0 0 5 3 9 16 33 16 14 11 105 07级 0 0 1 5 10 24 53 31 28 14 12 178 08级 7 6 4 6 4 6 9 14 14 14 16 100 09级 0 0 1 8 7 7 28 60 19 4 0 134 10级 0 2 3 9 9 17 32 40 3 4 2 123
<算法设计与分析>课程学习方法
算法设计与应用(机试)情况及分析:SS大三上学期
题数: 10 9 8 7 6 5 4 3 2 1 0 总 07级 0 0 0 4 3 4 3 21 41 52 57 185 09级 2 2 3 6 5 14 26 18 9 5 1 91 10级 0 0 1 2 2 6 13 25 27 19 4 99 11级 0 1 2 1 7 20 35 85 7 2 0 160
7.《国际大学生程序设计竞赛例题解(七)》中 山大学ICPC集训队内部选拔赛试题(20052006), 郭嵩山、刘祖立、刘曦、涂德健著 电 子工业出版社 2010.7
本课程学习方法
8 . 《国际大学生程序设计竞赛例题解(八)》广东省 信息学奥林匹克竞赛试题(2007-2009), 郭嵩山、陈宇 恒、张钊毅、周贤豪著 电子工业出版社 2011.10 9.郭嵩山、陈才斌、赵浩泉、江泽斌:国际大学生程序 设计竞赛中山大学内部选拔真题解(一)(20072008),人民邮电出版社,2012年11月 10.郭嵩山、陈元训、蔡奕林、梁晓聪:国际大学生程 序设计竞赛中山大学内部选拔真题解(二)(20092010),人民邮电出版社,2013年1月
<算法设计与分析>课程学习方法
1. 课堂精讲,课外多练,参考题解,精做(解题)报 告,提高程序设计能力,提高程序调试能力,提高 算法分析和优化能力;
2. 基本作业: SICILY上完成指定题目,完成典型题目 的解题报告;
3. 考试:ACM方式,网上自动测评,诚信是IT人立足之本!
<算法设计与分析>课程学习方法
本课程学习方法
大餐后的甜品(学完本课程后选读,面试须读) 11.由几个年轻的微软软件工程师著:编程之
美Hale Waihona Puke 微软技术面试心得 电子工业出版社 2008 . 3
4.主要OJ:http://soj.me => Poj : http:// Zou : HUST OJ: http://
本课程学习方法
hoj : / Usaco: /usacogate Ural : http://acm.timus.ru Uva : http://acm.uva.es/p/
本课程学习方法
5.解题报告格式:
① 原题中文大意; ② 算法思想及解题用到的主要数据结构; ③ 详细解题思路; ④ 逐步求精算法描述(含过程及变量说明); ⑤ 程序注释清单(重要过程的说明); ⑥ 测试数据(5-10组有梯度的测试数据,要考虑边界条件); ⑦ 对时间复杂度,空间复杂度方面的分析、估算及程序优化
5.《国际大学生程序设计竞赛例题解(五)》广 东省大学生程序设计竞赛试题(2006-2007), 郭 嵩山、张子臻、王磊、汤振东著 电子工业出 版社 2008.11
本课程学习方法
6. 《国际大学生程序设计竞赛例题解(六)》 广东省大学生程序设计竞赛试题(2008-2009), 郭嵩山、翁雨键、梁志荣、吴毅著 电子工业 出版社 2010.5
4. .《国际大学生程序设计竞赛例题解(三)》 图论、动态规划算法、综合题专集, 郭嵩山、 关沛勇、蔡文志、梁锋编著 电子工业出版社 2007.7
本课程学习方法
4. 《国际大学生程序设计竞赛例题解(四)》 广东省信息学奥林匹克竞赛试题(2003-2006), 郭嵩山、张惠东、林祺颖、莫瑜著 电子工业 出版社 2008.2