第1章 算法概述

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c ⋅ g(n)
Running Time
f (n)
n0
Input Size
•算法运行时间的上限 算法运行时间的上限 •上界的阶越低,则评估就越精确,结果就越有价 上界的阶越低,则评估就越精确, 上界的阶越低 T(n)= 值。例:T(n) =3n2 ,T(n)=O(n2),而n2= 取前者。 O(n3), 取前者。
重要的问题类型
1. 查找问题 2. 排序问题 3. 图问题 4. 组合问题 5. 几何问题
1.3 算法分析
算法分析( Analysis): ):对算法所需要的 算法分析(Algorithm Analysis):对算法所需要的 两种计算机资源—— ——时间和空间进行估算 两种计算机资源——时间和空间进行估算 时间复杂性(Time Complexity) 时间复杂性( Complexity) 空间复杂性( Complexity) 空间复杂性(Space Complexity) 算法分析的目的: 算法分析的目的: 设计算法—— ——设计出复杂性尽可能低的算法 设计算法——设计出复杂性尽可能低的算法 选择算法—— ——在多种算法中选择其中复杂性最低者 选择算法——在多种算法中选择其中复杂性最低者
算法复杂性分析 • 算法复杂性 = 算法所需要的计算机资源 • 算法的时间复杂性T(n); • 算法的空间复杂性S(n)。 是问题的规模(输入大小)。 • 其中n是问题的规模(输入大小)。
算法的时间复杂性
• (1)最坏情况(Worst case)下的时间复杂性 最坏情况( 最坏情况 •
源自文库
Tmax(n) = max{ T(I) | size(I)=n }
• 流程图
– – – – 优点:流程直观 缺点:缺少严密性、灵活性 使用方法:描述简单算法 注意事项:注意抽象层次
开始 输入m和n r=m % n r=0 N m=n;n=r 输出n 结束 Y
欧几里德算法:
• 程序设计语言
– – – – 优点:能由计算机执行 缺点:抽象性差,对语言要求高 使用方法:算法需要验证 注意事项:将算法写成子函数
用科学规范的语言,对所求解的问题做准确的描述. 用科学规范的语言,对所求解的问题做准确的描述.
2)建立数学模型
通过对问题的分析, 通过对问题的分析,找出其中的所有操作对象及操作对象之间 的关系并用数学语言加以描述. 的关系并用数学语言加以描述.
3)算法设计
根据数学模型设计问题的计算机求解算法. 根据数学模型设计问题的计算机求解算法.
举例:
例1 :f(n) = 2n + 3 = O(n) 当n≥3时,2n+3≤3n,所以,可选 = 3,n0 = 3。对于 时 ,所以,可选c , 。对于n≥n0,f(n) , = 2n + 3≤3n,所以,f(n) = O(n),即2n + 3∈O(n)。这意味着, ,所以, , ∈ 。这意味着, 不会超过3n, 当n≥3时, 2n + 3 不会超过 ,2n + 3 = O(n)。 时 。 例2: f(n) = 10n2 + 4n + 2 = O(n2) 对于n≥2时, 有10n2 + 4n + 2≤10n2 + 5n,并且当 对于 时 , 并且当n≥5时, 时 5n≤n2,因此,可选 = 11, n0 = 5;对于 因此,可选c ;对于n≥n0,f(n) = 10n2 + , 4n + 2≤11n2,所以 所以f(n) = O(n2)。 。 例3: f(n) = n!= O(nn) 对于n≥1,有n(n − 1)(n − 2) … 1≤nn,因此,可选c = 1,n0 = 对于 , 因此,可选 , 1。对于 所以, 。对于n≥n0,f(n) = n!≤nn,所以,f(n) = O(nn)。 , ! 。
程序(Program) 程序(Program)
• 程序是算法用某种程序设计语言的具体实现。 • 程序可以不满足算法的性质(4)有限性 有限性。 有限性 • 例如操作系统,是一个在无限循环中执行的程序,因 而不是一个算法。 • 操作系统的各种任务可看成是单独的问题,每一个问 题由操作系统中的一个子程序通过特定的算法来实现。 该子程序得到输出结果后便终止。
算法渐近复杂性
设T(n)为算法A的时间复杂性函数,则它是n的单增函数,如果存在 为算法A的时间复杂性函数, 的单增函数, 一个函数 Ť(n) 使得当n→ ∞,有 T(n)- Ť(n)) / T(n)→0 时的渐进性态或 渐进复杂性 。 称Ť(n) 是T(n)当 n→ ∞ 时的 或 在数学上, 有相同的最高阶项. 为略去T( 在数学上,T(n)与 Ť(n)有相同的最高阶项.可取 Ť(n)为略去T(n)的 低阶项后剩余的主项. 代替T( 低阶项后剩余的主项.当n充分大时我们用Ť(n)代替T(n)作为算法复 杂性的度量,从而简化分析. 杂性的度量,从而简化分析. 例如 T(n)=3n2+4nlogn+7, 则 Ť(n)可以是3n2. 3n
其中I是问题的规模(input size)为n的实例,p(I)是实 例I出现的概率。
• 例:顺序搜索算法 在具有n个元素的数组a[1...n]中找出值等于 的元素的位置。 中找出值等于k的元素的位置 在具有 个元素的数组 的数组 中找出值等于 的元素的位置。
template<class Type> int seqSearch(Type *a, int n, Type k) { for(int i=0;i<n;i++) if (a[i]==k) return i; return -1; }
若存在正常数c和自然数 若存在正常数 和自然数n0 使得当 和自然数 n≥ n 0 时 , 有 0 ≤ f ( n ) ≤ cg ( n ) ≥ 充分大时有上 则称函数 f(n )在n充分大时有上 在 充分大时有 界, 且g(n)是它的一个上界, 记为 f(n) =O(g (n) ) , 也称 f(n) 的 阶 不 高 于 g ( n ) 的 阶 。
若进一步假定算法中所有不同元运算的单位执行时间相同,则可不 若进一步假定算法中所有不同元运算的单位执行时间相同, 考虑Ť(n)所包含的系数或常数因子。 ( 所包含的系数或常数因子。 渐进分析适用于n充分大的情况,当问题的规模很小时, 渐进分析适用于n充分大的情况,当问题的规模很小时,或比较的两 算法同阶时,则不能做这种简化. 算法同阶时,则不能做这种简化.
1.2 算法的描述方法
算法的描述方法 • 自然语言 – 优点:容易理解 – 缺点:冗长、二义性 – 使用方法:粗线条描述算法思想 – 注意事项:避免写成自然段 欧几里德算法:①输入m和n; ②求m除以n的余数r; ③若r等于0,则n为最大公约数,算法结束; 否则执行第④步; ④将n的值放在m中,将r的值放在n中; ⑤重新执行第②步。
int CommonFactor(int m, int n) { int r = m % n; while (r!=0) { m = n; n = r; r = m % n; } return n; }
欧几里德算法:#include<iostream.h>
• 伪代码 介于自然语言和程序设计语言之间的方法, 它采用某一程序设计语言的基本语法,操 作指令可以结合自然语言来设计。
算法分析与设计
Design and Analysis of Computer Algorithm
教材: 教材:算法设计与分析 王红梅 编著 清华大学出版社出版
课程简介
算法分析与设计是计算机的核心课程之一, 算法分析与设计是计算机的核心课程之一,在众多的计 算机系统软件和应用软件中都要用到本课程的内容。 算机系统软件和应用软件中都要用到本课程的内容。它是操 作系统、编译原理等课程的先行课程, 作系统、编译原理等课程的先行课程,在计算机的理论体系 中占有极其重要的位置。 中占有极其重要的位置。 通过本课程的学习, 通过本课程的学习,使学生掌握算法分析与设计的基本 理论,使学生学会算法分析与设计的基本方法,掌握 掌握计算机科 理论,使学生学会算法分析与设计的基本方法 掌握计算机科 学及应用领域常见的有代表性的非数值算法及算法设计的若 干重要方法,并学会用这些算法解决实际问题。 干重要方法,并学会用这些算法解决实际问题。 本课程以算法设计策略为知识单元, 本课程以算法设计策略为知识单元,介绍算法设计方法 和分析技巧,这些策略包括递归技术、分治、动态规划、贪 和分析技巧,这些策略包括递归技术、分治、动态规划、 心算法、回溯法、分支限界法等策略,它们的内容相对独立。 心算法、回溯法、分支限界法等策略,它们的内容相对独立。 其先修课为高等数学、程序设计、数据结构。 其先修课为高等数学、程序设计、数据结构。
– 优点:表达能力强、抽象性强、容易理解
欧几里德算法:1. r = m % n;
2. 循环直到r = 0; 2.1 m = n; 2.2 n = r; 2.3 r = m % n; 3. 输出n;
问题的求解(Problem Solving): 问题的求解(Problem Solving):
1)问题的陈述
1.1 算法及其重要特性
• 软件(software):程序及其各种文档资料的总称 • 程序(algorithm)=算法+数据结构 • 算法(procedure):解的描述(程序的灵魂) • 数据结构(data structure):现实世界的数据模型 • 语言(language):实现的工具
算法(Algorithm) 算法(Algorithm)
算法是指解决问题的一种方法或一个过程。 • 算法是若干指令的有穷序列,满足性质: • (1)输入 输入:有外部提供的量作为算法的输入。 输入 • (2)输出 输出:算法产生至少一个量作为输出。 输出 • (3)确定性 确定性:组成算法的每条指令是清晰,无歧义的。 确定性 • (4)有限性 有限性:算法中每条指令的执行次数是有限的,执行每条指令 有限性 的时间也是有限的。 • (5)可行性:算法描述的操作可以通过已经实现的基本操作执行有 (5)可行性: 可行性 限次来实现。
p/n。
Tavg (n) =
size ( I ) = n
∑ p( I )T ( I )
p p p p = 1 ⋅ + 2 ⋅ + 3 ⋅ + L + n ⋅ + n ⋅ (1 − p ) n n n n
p n (1 − p ) = p(n + 1) + n(1 − p) = ∑i + n n i =1 2
本课程主要内容
第1章 算法概述 第 2章 第 3章 第 4章 第 5章 第 6章 递归与分治策略 动态规划 贪心算法 回朔法 分支限界法
第1章 算法概述
学习要点: 学习要点: • 理解算法的概念。 • 理解什么是程序,程序与算法的区别和内在联系。 • 掌握算法的计算复杂性概念。 • 掌握算法渐近复杂性的数学表述。
Meaning: for all data sets big 渐近复杂性分析的记号 enough (i.e., n>n0), the algorithm always executes in less than C|g(n)| 在下面的讨论中,对所有n,f(n) ≥ 0,g(n) ≥ 0。 (1)渐近上界记号O(Big-O) 渐近上界记号O 渐近上界记号 )
最好情况( • (2)最好情况(Best case)下的时间复杂性 最好情况 •
Tmin(n) = min{ T(I) | size(I)=n }
• (3)平均情况(Average case)下的时间复杂性 平均情况( 平均情况 •
Tavg(n) =
size ( I ) =n
∑ p( I )T ( I )
4)算法的正确性证明
证明算法对一切合法输入均能在有限次计算后产生正确输出. 证明算法对一切合法输入均能在有限次计算后产生正确输出.
5)算法的程序实现
将算法正确地编写成机器语言程序. 将算法正确地编写成机器语言程序.
6)算法分析
对执行该算法所消耗的计算机资源进行估算. 对执行该算法所消耗的计算机资源进行估算.
• (1)Tmax(n) = max{ T(I) | size(I)=n }=n • (2)Tmin(n) = min{ T(I) | size(I)=n }=1 • (3)在平均情况下,假设: • • (a) 搜索成功的概率为p ( 0 ≤ p ≤ 1 ); (b) 在数组的每个位置i ( 0 ≤ i < n )搜索成功的概率相同,均为
相关文档
最新文档