算法设计与分析ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12
算法设计与分析在 《计算机科学与技术》专业中的 地位 引言 1.1 为什么要学习算法? –理论角度:―算法不仅是计算机科学的一个分支,它 更是计算机科学的核心。而且,可以毫不夸张地说,它 和绝大多数的科学̀、商业和技术都是相关的。” _«算法: 计算的灵魂» ,David Harel –实践角度: –开发分析能力:
3课件(webcc)
课程介绍
上机:教学楼D506机房 迟交作业,酌情扣分 抄袭作弊,将导致记零分 期末总评成绩: 处理以及… ! 平时成绩40% + 期末(闭卷)成绩*60% 平时成绩:考勤、书面作业(含实验)
办公电话:26535255 Email:wanghm@szu.edu.cn 课程内容:介绍计算机非数值算法的主要设计
20 77146year
表1.1 算法1.3的执行时间随n的增长而增长的情况
注:表1.1假设算法1.3中while循环体执行一次需1μs。
对某类特定问题,穷举法只适用于规模较小的情况。
30
ACM 与算法设计
1、穷举法 如求素数 、百钱百鸡问题 2、分治法 如汉诺塔问题、折半查找算法、快速排序算法 3、贪心法 如:哈夫曼算法、最小生成树、最短路径算法
31
找硬币问题
ACM 与算法设计
4、回溯法 如全排列问题、迷宫、 N后问题 5、动态规划法 如货郎担问题、最短路径、资源分配问题 6、分支限界法 如货郎担问题、作业分配问题
32
1.1 引言— 算法的复杂性分析
(1)如何设计算法;…… (2)如何评价算法的效率…… 时间复杂性:算法的执行时间 空间复杂性:算法所需的存储空间 算法设计目标:时间复杂性、空间复杂性低
方法与分析技巧
4
课程介绍—几个例子
例1:百鸡问题:“鸡翁一,值钱五;鸡母一,
值 钱三;鸡雏三,值钱一。百钱买百鸡,问鸡 翁、母、雏各几何?”
穷举法
5
课程介绍—几个例子
例2:假设正整数n、s,s<n。设计算法对任
一给定n位数,删除其中的s位后,使得剩 下的位组成的新数最小。 例:n=6 s=3 783259 ---> 259 n=5 s=2 24351 ---> 231
6
贪心法
分治法
课程介绍—几个例子
例3:奥运会排球比赛: 预赛: A组:中国、古巴、日本、美国、波 兰、委内瑞拉、 B组:俄罗斯、塞尔维亚、巴西、意大 利、哈萨克斯坦、阿尔及利亚 1/4决赛、1/2决赛:古 vs 美、中 vs 巴
7
课程介绍—几个例子
例4:八后问题: 在8*8的棋盘上,每行放置 一个皇后,要求它们不能在同一列, 同一斜线上。 回溯法
13
计算机专业课程群建设
计算机科学理论课 程群 计算机硬件课程群 自然科学基础 课程群
软件基础课程群
14
计算机科学理论课程群
离散数学 数据结构 算法设计与分析Ⅰ
*模糊数学
*数理逻辑
*组合数学
*形式语言与自动机
*可计算性理论
*算法分析Ⅱ 计算复杂性理论
其中:*为研究生课程
计算机科学 理论基础
15
穷举法实来自百度文库—货郎担问题
n n! n n! n n! n n!
5
6
120μ s
720μ s
9
10
362ms
3.62s
13
14
1.72h
24h
17 11.27year
18 203year
7 8
5.04ms 40.3ms
11 12
39.9s 479.0s
15 16
15day 242day
19
3857year
20
设计算法
穷举法实例—百鸡问题
选择模型或设计模型
解:设鸡翁、鸡母、鸡雏分别为a,b,c只。 ① 测试集合: 0≤a≤n 0≤b≤n 0≤c≤n 判断条件:a+b+c = n 5*a+3*b+c/3 = n 且 c%3 = 0 •算法描述如下:
21
设计算法
穷举法实例—百鸡问题
输入:n 输出:满足问题的解数目k,公鸡、母鸡、小鸡的 只数g[ ]、m[ ]、s[ ] void childen_question(int n, int &k, int g[ ],int m[ ],int s[ ]);
(n/5+1)*(n/3+1)
•算法的复杂性分析
穷举法实例—货郎担问题
例1.2 货郎担问题:某售货员要到若干个城 市销售货物,已知各城市之间的距离,要 求售货员选择出发的城市及旅行线路使每 个城市仅经过一次,最后回到原出发城市, 而总路程最短。
26
穷举法实例—货郎担问题
解:假设n个城市,分别用1到n的数字编号, 问题归结为在有向网中(顶点表示城市,弧上 权重表示距离),寻找一条路径最短,n个城 市仅经过一次的回路(哈密尔顿回路)。 测试集合: 1,…,n的排列对应一条回路,如2356…n12 全部排列构成测试集合
主 要
33
1.2 算法的时间复杂性
算法的输入规模和运行时间的阶 算法的执行时间随问题规模的增大而增大,故 常用关于问题规模n的函数估算算法在大规模问 题时的运行时间。
34
运行时间T(n)的估算
运行时间T(n)的估算
假设初等操作计算模型:所有操作数都具有相同 的固定字长;所有操作的时间花费都是一个常数 时间间隔。 如:算术运算;比较和逻辑运算;赋值运算(含遍 历表和指针赋值)等。 例1.3 估算算法1.1的运行时间T1(n)。
5 6 7 8 9 10 11 12 } 25 {
//n/5+1+2(n/5+1)(n/3+1)
}
c = 100-a-b; //3(n/5+1) (n/3+1) if(!(c%3) && 5*a+3*b+c/3==n) { //10(n/5+1) (n/3+1) g[k]=a; m[k]=b; s[k]=c; k++; //4(n/5+1) (n/3+1) } 运行时间:循环次数,
8
课程介绍—本课程学习的算法
常用算法 穷举法 — 百鸡问题 递归和分治 — 二分查找、快速排序 贪心法 — 最小生成树、最短距离 回溯 — 迷宫、八后问题 动态规划 分支与限界
9
教学内容与进度
第1 章 算法引论 3 学时; 第2章常用的数学工具 3 学时; 第4章 递归与分治 5学时;实验1 第5章贪心算法 4 学时; 第6章动态规划 6 学时;实验2 第7章 回溯法 5 学时;实验3 第8章 分支限界法 5学时; 第12-13 章 NP完全问题及计算复杂性
35
void childen_question(int n,int &k,int g[],int m[], int s[]) { 赋值等运算(初等操作 ) 算法1.1 int a,b,c; k=0; //1 for(a=0; a<=n; a++) //1+2(n+1) for(b=0; b<=n; b++) // n+1+2 (n+1)2 for(c=0; c<=n; c++) // (n+1)2 +2(n+1)3 if(!(c%3)&&a+b+c==n && //14(n+1)3 5*a+3*b+c/3==n) { g[k]=a; m[k]=b; s[k]=c; k++; //4(n+1)3 } }
28
void salesman_problem(int n, float min, int t[],float c[][]); { 算法1.3 int p[n],i=1,m=n!; float cost; min = MAX_FLOAT_NUM; while(i<=m) { 产生n个城市的第i个排列于p; cost = 回路p的权重和; if(cost < min) { min = cost; p复制至t; } 运行时间:循环次数, i++; } n! 29 }
算法设计与分析
-----计算机非数值算法
2010计算机系王华民
1
先修课程
离散数学 数据结构 高级程序语言
2
参考资料
[1]计算机算法设计与分析(第3版) ,王晓东,电子工业出版
社 配套:“算法设计与实验题解”,王晓东 ,电子工业出版社 [2]算法设计与分析基础(Introduction to Design and Analysis of Algorithms) ,潘彦译([美] Anany Levitin) , 清华大学出版社 [3]算法设计技巧与分析(Algorithms Design Techniques and Analysis),吴伟昶等译([沙特 ]M.H.Alsuwaiyel), 电子工业出版社 [4]计算机算法基础(第2版),余祥宣、邹海明等,华中科技 大学出版社
27
穷举法实例—货郎担问题
判断条件:选择排列中路径和最小的回路。 假设用邻接矩阵c存储网,算法描述如下: 输入:城市数n,c[ ][ ] 输出:最短距离min,旅行路线t[ ] void salesman_problem(int n, float min, int t[ ],float c[ ][ ]);
22
void childen_question(int n,int &k,int g[],int m[],int s[]) 算法1.1 { int a,b,c; 设计算法 k=0; for(a=0; a<=n; a++) for(b=0; b<=n; b++) for(c=0; c<=n; c++) if(!(c%3)&&a+b+c==n && 5*a+3*b+c/3==n) { g[k]=a; m[k]=b; s[k]=c; k++; } 执行时间:循环次数, } (n+1)*(n+1)*(n+1) 23
18
1.1 引言
算法设计的例子—穷举法 穷举法:是从有限集合中,逐一列举集合 的所有元素,对每一个元素逐一判断和处 理,找出问题的解。
19
穷举法实例
问题的陈述
例1.1 百鸡问题:“鸡翁一,值钱五;鸡母一 值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡 翁、母、雏各几何?” 这里讨论更一般的n钱买n鸡问题.
•算法的复杂性分析
穷举法实例—百鸡问题
② 测试集合: 0≤a≤n/5 0≤b≤n/3 c = n-a-b 判断条件:5*a+3*b+c/3 = n 且 c%3 = 0 算法描述如下(算法1.2):
24
void childen_question(int n,int &k,int g[],int m[], int s[]) { 算法1.2 1 int a,b,c; 2 int n1=n/5, n2=n/3; k=0; //5 3 for(a=0; a<=n1; a++) //1+2(n/5+1) 4 for(b=0; b<=n2; b++)
常 用 算 法
3学时
10
教学内容
第12-13 章简单介绍了NP完全性理论和计算复杂性, 这是当前计算机算法领域的热门研究课题,具有很高 的理论价值。 – P类和NP类问题 – NP完全问题 – 计算模型 – 复杂性类型之间的关系
11
第一章 算法的基本概念
程序
= 算法 + 数据结构 算法设计与分析是计算机科学与技术的一个 核心内容….
算法设计与分析在 《计算机科学与技术》专业中的地位 为什么要学习算法? 多、快、好、省与少、慢、差、费 1.1 引言 –理论角度
–实践/工程角度:了解计算机领域中不同问题的一系列标准 算法;具备设计新算法和分析其效率的能力。
–开发分析能力: “算法是一种一般性的智能工具,一定有助 于我们对其他学科的理解,…为什么算法会有这种作用呢? 我们可以这样理解:人们常说,一个人只有把知识教给“计 算机”,才能“真正掌握它,也就是说,将知识表述为一种 算法,…比起简单地按照常规去理解事物,用算法将其形式 化会使我们获得更加深刻的理解。” _Donald Knuth,1974图 灵奖的获得者。
16
1.1 引言
算法定义
定义1.1:算法问题求解的有效策略.是解某 一特定问题的一组有穷规则的集合。 算法特征 有限性、确定性、输入、输出、能行性 实用算法对有限性要求运行时间是可接受的。
17
算法设计与分析的步骤
若一问题是可解的,则求解的全过程由以下阶段构成 (算法设计与分析的步骤): 1. 问题的陈述 2. 选择模型或设计模型>=选择模型或设计模型 3. 设计算法(选择)和确认>=设计算法(选择)和确认 4. 分析算法 >=分析算法 5. 程序实现 步骤的含义:一个好的算法是反复努力和重新修 正的结果 >= 设计算法是一个非常有创造性和非常值得付出的 过程.课程的目的就是想证明这个事实.