算法设计与分析第1章2015

合集下载

算法分析与设计 第1章习题答案 1-1,1-2,1-3,1-6

算法分析与设计 第1章习题答案 1-1,1-2,1-3,1-6

第一章习题(1-1,1-2,1-3,1-6)1-1 求下列函数的渐进表达式3n2+10n = O(n2)n2/10+2n = O(2n)21+1/n = O(1)logn3 = O(logn)10log3n = O(n)知识点:如果存在正的常数C和自然数N0,使得:当N>=N0时有f(N)<=Cg(N),则称f(N)当N充分大时上有界,且g(N)是它的一个上界,记为f(N)=O(g(N)).这时,可以说f(N)的阶不高于g(N)的阶。

1-2 论O(1)和O(2)的区别O(1)和O(2)差别仅在于其中的常数因子,根据渐进上界记号O的定义可知,O(1)=O(2)。

1-3 从低到高排列以下表达式(按渐进阶排列以下表达式)结果:2 logn n2/320n 4n23n n! 分析:当n>=1时,有logn< n2/3当n>=7时,有3n < n!补充:当n>=4时,有logn> n1/31-6 对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或f(n)=Ω(g(n))或f(n)=Θ(g(n))。

知识点:f(n)的阶不高于g(n)的阶:f(n)=O(g(n));f(n)的阶不低于g(n)的阶:f(n)=Ω(g(n));f(n)与g(n) 同阶:f(n)=Θ(g(n)) (1)f(n)= logn2 ; g(n)= logn+5f(n)与g(n)同阶,故f(n)=Θ(g(n)) (2) f(n)= logn2 ; g(n)= n1/2当n>=8时,f(n)<=g(n),故f(n)=O(g(n))分析:此类题目不易直接看出阶的高低,可用几个数字代入观察结果。

如依次用n=1, 21, 22, 23, 26, 28, 210 (3) f(n)= n ; g(n)= log2nf(n)=Ω(g(n))(4) f(n)= nlogn+n; g(n)= lognf(n)=Ω(g(n))(5) f(n)= 10 ; g(n)= log10f(n)=Θ(g(n))(6) f(n)= log2n ; g(n)= lognf(n)=Ω(g(n))(7) f(n)= 2n ; g(n)= 100 n2f(n)=Ω(g(n))(8) f(n)= 2n ; g(n)= 3nf(n)=O(g(n))。

算法设计和分析习题答案解析1_6章

算法设计和分析习题答案解析1_6章

习题11. 图论诞生于七桥问题。

出生于瑞士的伟大数学家欧拉(Leonhard Euler ,1707—1783)提出并解决了该问题。

七桥问题是这样描述的:一个人是否能在一次步行中穿越哥尼斯堡(现在叫加里宁格勒,在波罗的海南岸)城中全部的七座桥后回到起点,且每座桥只经过一次,图1.7是这条河以及河上的两个岛和七座桥的草图。

请将该问题的数据模型抽象出来,并判断此问题是否有解。

七桥问题属于一笔画问题。

输入:一个起点输出:相同的点1, 一次步行2, 经过七座桥,且每次只经历过一次3, 回到起点该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。

另一类是只有二个奇点的图形。

2.在欧几里德提出的欧几里德算法中(即最初的欧几里德算法)用的不是除法而是减法。

请用伪代码描述这个版本的欧几里德算法1.r=m-n2.循环直到r=02.1 m=n2.2 n=r2.3 r=m-n3 输出m3.设计算法求数组中相差最小的两个元素(称为最接近数)的差。

要求分别给出伪代码和C++描述。

//采用分治法//对数组先进行快速排序//在依次比较相邻的差#include <iostream>using namespace std;int partions(int b[],int low,int high) {图1.7 七桥问题int prvotkey=b[low];b[0]=b[low];while (low<high){while (low<high&&b[high]>=prvotkey)--high;b[low]=b[high];while (low<high&&b[low]<=prvotkey)++low;b[high]=b[low];}b[low]=b[0];return low;}void qsort(int l[],int low,int high){int prvotloc;if(low<high){prvotloc=partions(l,low,high); //将第一次排序的结果作为枢轴 qsort(l,low,prvotloc-1); //递归调用排序由low 到prvotloc-1qsort(l,prvotloc+1,high); //递归调用排序由 prvotloc+1到 high}}void quicksort(int l[],int n){qsort(l,1,n); //第一个作为枢轴,从第一个排到第n个}int main(){int a[11]={0,2,32,43,23,45,36,57,14,27,39};int value=0;//将最小差的值赋值给valuefor (int b=1;b<11;b++)cout<<a[b]<<' ';cout<<endl;quicksort(a,11);for(int i=0;i!=9;++i){if( (a[i+1]-a[i])<=(a[i+2]-a[i+1]) )value=a[i+1]-a[i];elsevalue=a[i+2]-a[i+1];}cout<<value<<endl;return 0;}4.设数组a[n]中的元素均不相等,设计算法找出a[n]中一个既不是最大也不是最小的元素,并说明最坏情况下的比较次数。

算法分析与设计概论

算法分析与设计概论

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! 个排列,采用穷举法逐一计算每一条路线的费 用,从中找出费用最小的路线,便可求出问题的解。

计算机算法设计与分析第1章算法概述

计算机算法设计与分析第1章算法概述
课程安排

理论课:1~10周,40学时 周二(5-6)、周五(1-2)
上机: 18学时



期末考试: 闭卷笔试,第 11周
上课点名三次不到者取消考试资格; 迟到或作业缺交,一次扣10分(平时成绩)。
1
教学目的和要求
本课程是计算机类专业的专业基础课程; 通过课程学习和上机实践,对计算机常用算 法有一个较全面的了解,掌握通用算法的一 般设计方法; 学会对算法的时间、空间复杂度分析,掌握 提高算法效率的方法和途径。
24
三、算法复杂性分析

本课程主要对算法的时间复杂性进行分析。
关于算法的复杂性,有两个问题要弄清楚:
(1)用怎样的一个量(指标)来表达一个算法的
复杂性;

(2)对于一个算法,怎样具体计算它的复杂性。
25
1、算法的三种时间复杂性

算法的最坏、最好和平均时间复杂性 (1)最坏情况下的时间复杂性 Tmax(n) = max{ T(I) | size(I)=n } (2)最好情况下的时间复杂性
8
图1.1 算法的概念图
(一)算法的性质

1、算法具有某些特性,如下几条:
(1)输入:有零个或多个外部提供的量作为算
法的输入。

(2)输出:算法产生至少一个量作为输出。这 些输出是和输入有某种特定关系的量。
9
(一)算法的性质

(3)确定性:组成算法的每条指令是清晰,无
歧义的。

(4)有限性(有穷性):算法中每条指令的执

29
2、算法的时间复杂性计算
int search(int A[ ], int m, int c) { int i=1; while( A[i]<c && i<m ) i=i+1; if (A[i]==c) return i; else return 0; }

算法设计与分析-王-第1章-算法设计基础

算法设计与分析-王-第1章-算法设计基础

2)有没有已经解决了的类似问题可供借鉴?
1.4 算法设计的一般过程
在模型建立好了以后,应该依据所选定的模型对问 题重新陈述,并考虑下列问题: (1)模型是否清楚地表达了与问题有关的所有重要
的信息?
(2)模型中是否存在与要求的结果相关的数学量? (3)模型是否正确反映了输入、输出的关系? (4)对这个模型处理起来困难吗?
程序设计研究的四个层次:
算法→方法学→语言→工具
理由2:提高分析问题的能力
算法的形式化→思维的逻辑性、条理性
1.2 算法及其重要特性
一、算法以及算法与程序的区别
例:欧几里德算法——辗转相除法求两个自然数 m 和 n 的最大公约数
m n
欧几里德算法
r
1.2 算法及其重要特性
欧几里德算法
① 输入m 和nห้องสมุดไป่ตู้如果m<n,则m、n互换;
对不合法的输入能作出相适应的反映并进行处理。 (2) 健壮性(robustness): 算法对非法输入的抵抗能力, 即对于错误的输入,算法应能识别并做出处理,而不是 产生错误动作或陷入瘫痪。 (3)可读性:算法容易理解和实现,它有助于人们对算 法的理解、调试和修改。 (4) 时间效率高:运行时间短。 (5) 空间效率高:占用的存储空间尽量少。
算法设计与分析
Design and Analysis of Computer Algorithms
高曙
教材:

算法设计与分析(第二版),清华大学出版社,王红梅, 胡明 编著
参考书目:

Introduction to Algorithms, Third Edition, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest,机械工 业出版社,2012

算法设计与分析(第2版) 郑宗汉 第1章-1

算法设计与分析(第2版) 郑宗汉 第1章-1

8
Байду номын сангаас
学习要求
深刻理解每一类算法的思想及其实现
能熟练运用所学知识解决实际问题
培养提高计算思维能力
9
考核方式
Homework and Reading: 20%
Final Exam (Written Test): 80%
10
第1章 算法的基本概念
1.1 引言
1.1.1 算法的定义和特性
c %3 0
(1.1.3)
16
1.1.2 算法的设计和复杂性分析
百鸡问题的穷举法
输入:所购买的3种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[],m[],s[]
1. void chicken_question(int n, int &k, int g[], int m[], int s[]) 2. { 3. int a,b,c; 分析发现:只能买到n/5 4. k = 0; 只公鸡,n/3只母鸡,将 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. } 14. } 15. } 16. } 17. }

《算法设计与分析》(全)

巢湖学院计算机科学与技术系
1.1、算法与程序
程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如操作系统,是一个在无限循环中执行的程序, 因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个 问题由操作系统中的一个子程序通过特定的算法来实 现。该子程序得到输出结果后便终止。
渐近分析记号的若干性质
(1)传递性: ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= O(g(n)), g(n)= O (h(n)) f(n)= O (h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= o(g(n)), g(n)= o(h(n)) f(n)= o(h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); (2)反身性: ➢ f(n)= (f(n));f(n)= O(f(n));f(n)= (f(n)). (3)对称性: ➢ f(n)= (g(n)) g(n)= (f(n)) . (4)互对称性: ➢ f(n)= O(g(n)) g(n)= (f(n)) ; ➢ f(n)= o(g(n)) g(n)= (f(n)) ;
巢湖学院计算机科学与技术系
渐近分析记号的若干性质
规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: ➢ 对于任意f1(n) O(f(n)) ,存在正常数c1和自然数n1,使得对
所有n n1,有f1(n) c1f(n) 。 ➢ 类似地,对于任意g1(n) O(g(n)) ,存在正常数c2和自然数
巢湖学院计算机科学与技术系
第1章 算法引论

《算法分析与设计》(李春葆版)课后选择题答案与解析

《算法及其分析》课后选择题答案及详解第1 章——概论1.下列关于算法的说法中正确的有()。

Ⅰ.求解某一类问题的算法是唯一的Ⅱ.算法必须在有限步操作之后停止Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊Ⅳ.算法执行后一定产生确定的结果A.1个B.2个C.3个D.4个2.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是()。

A.T(n)=T(n-1)+1,T(1)=1B.T(n)=2nC.T(n)= T(n/2)+1,T(1)=1D.T(n)=3nlog2n答案解析:1.答:由于算法具有有穷性、确定性和输出性,因而Ⅱ、Ⅲ、Ⅳ正确,而解决某一类问题的算法不一定是唯一的。

答案为C。

2.答:选项A的时间复杂度为O(n)。

选项B的时间复杂度为O(n)。

选项C 的时间复杂度为O(log2n)。

选项D的时间复杂度为O(nlog2n)。

答案为C。

第3 章─分治法1.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。

这要求原问题和子问题()。

A.问题规模相同,问题性质相同B.问题规模相同,问题性质不同C.问题规模不同,问题性质相同D.问题规模不同,问题性质不同2.在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面()答案解释最合理。

A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。

但不同方法,算法复杂度上界可能不同3.对于下列二分查找算法,以下正确的是()。

A.intbinarySearch(inta[],intn,int x){intlow=0,high=n-1;while(low<=high){intmid=(low+high)/2;if(x==a[mid])returnmid;if(x>a[mid])low=mid;elsehigh=mid;}return –1;}B.intbinarySearch(inta[],intn,int x) { intlow=0,high=n-1;while(low+1!=high){intmid=(low+high)/2;if(x>=a[mid])low=mid;elsehigh=mid;}if(x==a[low])returnlow;elsereturn –1;}C.intbinarySearch(inta[],intn,intx) { intlow=0,high=n-1;while(low<high-1){intmid=(low+high)/2;if(x<a[mid])high=mid;elselow=mid;}if(x==a[low])returnlow;elsereturn –1;}D.intbinarySearch(inta[],intn,int x) {if(n>0&&x>=a[0]){intlow= 0,high=n-1;while(low<high){intmid=(low+high+1)/2;if(x<a[mid])high=mid-1;elselow=mid;}if(x==a[low])returnlow;}return –1;}答案解析:1.答:C。

计算机算法设计与分析(第4版) 王晓东习题解答

第一章作业1.证明下列Ο、Ω和Θ的性质1)f=Ο(g)当且仅当g=Ω(f)证明:充分性。

若f=Ο(g),则必然存在常数c1>0和n0,使得∀n≥n0,有f≤c1*g(n)。

由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。

必要性。

同理,若g=Ω(f),则必然存在c2>0和n0,使得∀n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。

2)若f=Θ(g)则g=Θ(f)证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得∀n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。

由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。

3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。

证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得∀n≥n1,有F(n) ≤ c1 (f(n)+g(n))= c1 f(n) + c1g(n)≤ c1*max{f,g}+ c1*max{f,g}=2 c1*max{f,g}所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g))对于Ω和Θ同理证明可以成立。

4)log(n!)= Θ(nlogn)证明:∙由于log(n!)=∑=n i i 1log ≤∑=ni n 1log =nlogn ,所以可得log(n!)= Ο(nlogn)。

∙由于对所有的偶数n 有,log(n!)= ∑=n i i 1log ≥∑=n n i i 2/log ≥∑=nn i n 2/2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。

当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得∀n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。

算法分析与设计习题集整理

算法分析与设计习题集整理算法分析与设计习题集整理第⼀章算法引论⼀、填空题:1、算法运⾏所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。

2、多项式10()m m A n a n a n a =+++ 的上界为O(n m)。

3、算法的基本特征:输⼊、输出、确定性、有限性、可⾏性。

4、如何从两个⽅⾯评价⼀个算法的优劣:时间复杂度、空间复杂度。

5、计算下⾯算法的时间复杂度记为: O(n 3) 。

for(i=1;i<=n;i++)for(j=1;j<=n;j++) {c[i][j]=0; for(k=1;k<=n;k++) c[i][j]= c[i][j]+a[i][k]*b[k][j]; }6、描述算法常⽤的⽅法:⾃然语⾔、伪代码、程序设计语⾔、流程图、盒图、PAD 图。

7、算法设计的基本要求:正确性和可读性。

8、计算下⾯算法的时间复杂度记为: O(n 2) 。

for (i =1;i{ y=y+1; for (j =0;j <=2n ;j++ ) x ++; }9、计算机求解问题的步骤:问题分析、数学模型建⽴、算法设计与选择、算法表⽰、算法分析、算法实现、程序调试、结果整理⽂档编制。

10、算法是指解决问题的⽅法或过程。

⼆、简答题:1、按照时间复杂度从低到⾼排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3), O( n!)应该排在哪⼀位?答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n),O( n!)2、什么是算法?算法的特征有哪些?答:1)算法:指在解决问题时,按照某种机械步骤⼀定可以得到问题结果的处理过程。

通俗讲,算法:就是解决问题的⽅法或过程。

2)特征:1)算法有零个或多个输⼊;2)算法有⼀个或多个输出; 3)确定性;4)有穷性3、给出算法的定义?何谓算法的复杂性?计算下例在最坏情况下的时间复杂性?for(j=1;j<=n;j++) (1)for(i=1;i<=n;i++) (2) {c[i][j]=0; (3) for(k=1;k<=n;k++) (4) c[i][j]= c[i][j]+a[i][k]*b[k][j]; } (5)答:1)定义:指在解决问题时,按照某种机械步骤⼀定可以得到问题结果的处理过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4. if i < n return i
T(n) :算法的运行时间 问题规模n的函数
输入分布:最坏情况、 最好情况、平均情况
Tmax(n), Tmin(n), Tavg(n)
算法运行时间
假设每条语句的执行 时间均为单位时间。
=
全部语句的执行时间之和
算法运行中主要影响运行 时间的语句是基本操作, 即占有最多比例的语句。
算法设计
丘奇-图灵论点:凡是可计算的函数都是一般递归函数 (或图灵机可计算函数) • 凡是可以从某些初始符号开始,而在有 限步骤内计算的函数都是递归函数。 • 计算机只能计算一般递归函数。 • 算法设计就是根据某个算法设计策略写 出递归函数或递归算法。
算法的描述方法
• 可以用自然语言、伪代码(pseudocode)或计 算机程序语言来描述算法,必须精确地描 述计算过程。
算法设计与分析
Algorithm Design And Analysis
东北大学 信息学院 计算机应用技术研究所 郭楠
2015版
教学目标及内容
• 教学内容
– 王晓东,《计算机算法设计与分析》,1~6章
• 教学目标
– 通过对典型算法的分类介绍,掌握算法设计的主要策 略以及对算法性能正确分析的能力。 策略 算法设计
– 用有限的指令和有限的存储空间可算尽一切可算之物 – 凡是可计算的过程都可用图灵机实现 – 机器能思考吗?
程序 内部状态
纸带
Here is an implementation of a Turing machine
控制器
一台图灵机是一个七元组M = (Q, Σ, Γ, Δ, q0, B, F)
– – – – Q是内部状态的有穷集合; Σ是输入符号集,其中不包含特殊的空白符; Γ是允许使用的纸带符号的有穷集合; Δ是转移函数(即程序),根据当前状态及当前输入 符号确定下一状态及读写头的动作,包括对输入符 号的运算以及读写头的移动(左移L或右移R);
问题 计算的过程就是 执行算法的过程 输出
问题实例 输入
算法
计算模型
图灵机(Turing Machine)
• Alan M. Turing (1912-1954) • 1936年,一种在理论计算机科学中广泛采用的抽 象计算机。它是通用数字计算机的理论原型。 • 可制造出一种十分简单但计算能力极强的计算机 装置。
– 伪代码:自然语言和计算机程序语言的混合体。
算法的正确性
• 若一个算法对于每个合理的输入实例均能终止并 给出正确的结果,则称该算法是正确的。 • 一个不正确的算法是指对某些合理的输入实例不 终止,或者虽然终止但给出的结果不是所期望得 到的答案。
An algorithm is said to be correct if, for every input instance, it halts with the correct output. An incorrect algorithm might not halt at all on some input instances, or it might halt with an incorrect answer.
平均情况性能
• The average-case efficiency
算法设计与分析
算法分析
实例 性能
what are algorithms?
• Informally, an algorithm is any well-defined computational procedure that takes some value, or set of values, as input and produces some value, or set of values, as output. • We can also view an algorithm as a tool for solving a well-defined computational problem.
初始 状态 读入 第1个数值 读入 第2个数值
当前状态 0 0 1 1 10 10 11 11
输入符号 0 1 1 0 1 0 0 1
下一状态 0 1 1 10 10 11 0
输出符号 0 1 1 1 1 0 0
读写头移动 右移 右移 右移 右移 右移 左移 错误 停机
读入完毕
程序Δ 0,0 → 0,0R 0,1 → 1,1R 1,1 → 1,1R 1,0 → 10,1R 10,1 → 10,1R 10,0 → 11,0L 11,0 → E 11,1 → 0,0S
– 时间复杂性:需要时间资源的量 – 空间复杂性:需要空间资源的量
Different algorithms devised to solve the same problem often differ dramatically in their efficiency.
算法复杂性分析
• 算法复杂性C采用一种与算法外部因素无关的测 量方法,只依赖于问题规模N、输入I以及算法A 本身的函数。分别用T和S来表示时间复杂性和空 间复杂性。
← 全部语句的执行次数之和 (问题规模n的运行时间函数) ← 基本操作的执行次数 ← (渐近)阶
为了简化算法分析过程, 并易于对不同算法的运行 时间进行对比,只考虑问 题规模充分大时的情况。
← 算法的时间复杂性
最坏情况性能
• The worst-case efficiency
– 最坏情况的输入对应最多的基本操作执行次数 – Tmax(n) = max{T(n)} – 意义:界定运行时间的上界,即对于任何输入, 运行时间不会超过Tmax(n) – 实践表明可操作性最好且最有实际价值的是最 坏情况下的时间复杂性。
如何证明 一个算法 是正确的?
算法正确性证明
• 找反例:能够使算法运行失败的输入实例。 • 数学归纳法:对于任意输入实例
– 证明:(i)算法的第1步是正确的;(ii)假设算法 的第n步是正确的,那么算法的第n+1步也是正 确的。
证明:Insertion Sort算法是正确的。
算法分析
• 算法复杂性(Complexity):算法运行所需要 的计算机资源的量。
T = T(N, I, A) 通常,A隐含在复杂性函数名当中,因此可简化为: T = T(N, I) 只考虑某类有代表性的输入实例,因此可进一步简化为: 最好情况下Tmin(n),最坏情况下Tmax(n),平均情况下Tavg(n) 如果算法的时间复杂性不依赖输入实例,则简化为T(n)
such instructions like arithmetic, data movement, and control takes a constant amount of time. 该算法的 问题规模 运行时间? 算法:顺序查找 输入:数组A[0...n-1],数值K 输出:第一个与K相同的元素的下标,否则输出-1 t c11=1 1. i = 0
程序和算法
• 程序是算法用某种程序设计语言的具体实现。 • 程序可以不满足算法的有限性。
– 例如,操作系统是一个在无限循环中执行的程序,因 而不是一个算法。
(数据结构) 用料
(算法) 做法
(语言工具 和环境) 工具

(程序设计 方法) 厨艺
问题求解过程
判定性问题 构造性问题 计数问题 最优化问题
一个问题是不是 可计算的?是 “易”计算的还 是“难”计算的?
什么是计算?
计算模型
对于同一个问题 的不同算法,如 何知道哪个算法 更有效?
如何说明 一个算法 是有效的?
计算模型
• 计算模型(抽象计算机、数学模型)
–如果应用某个计算模型能够建立一个算法来求解这个问 题(即算法可停机),那么这个问题就是可计算的。 –问题的计算复杂性可以通过解决该问题所需计算量的多 少来衡量。
最好情况性能
• The best-case efficiency
– 最好情况的输入对应最少的基本操作执行次数 – Tmin(n) = min{T(n)} – 意义:虽然期望得到最好情况的输入是没有意 义的,但是对于一些算法,一个好的Tmin(n)可 以扩展到一些有用的次好输入类型。另外,如 果一个算法的Tmin(n)不令人满意,那么我们可 以立刻放弃它。
: Q Q L, R
q0 Q – q0是初始状态, {B} – B是空白符, – F是终止状态, F Q
• 设一个图灵机M = (Q, Σ, Γ, Δ, q0, B, F)
– 状态集合Q={0,1,10,11},输入符号集Σ={1},允许使用 的纸带符号集Γ={0,1},空白符B=0,初始状态q0=0,程 序Δ是一个以1的个数表示数值的加法运算。 – 如果纸带上的数据0000001110110000代表3+2,那么输 出是什么? 0000001111100000
t c2 2
t c3 3
2. while i < n and A[i] ≠ K do 3. i=i+1 基本操作 该算法的运行时间 T(n)依赖输入实例: 最坏情况Tmax(n) =? 最好情况Tmin(n) =? 平均情况Tavg(n) =?
c =1t5 t4 4或 + 或c5=1 5. else return -1
问题规模
理解问题 确定计算模型、 数据结构及 算法设计策略
输入 约束条件
输出 目标函数
设计算法
证明正确性 分析算法
问题建模
• 确定问题的数学模型
– 问题类型:计数问题、判定性问题、构造性问 题、最优化问题 – 输入:给定问题实例、规模 – 输出:定义解空间,给出问题的解 – 约束和目标:定义函数 – 问题的计算复杂度:不依赖特定算法
算法
• 算法是指解决问题的方法或过程,是若干指令的 有穷序列。solution to a problem
相关文档
最新文档