算法设计及分析第一章算法概述

合集下载

算法分析与设计总结

算法分析与设计总结

第一章算法概述1.算法:解决问题的一种方法或过程;由若干条指令组成的有穷指令。

2.算法的性质:1)输入:有零个或多个输入2)输出:有至少一个输出3)确定性:每条指令是清晰的、无歧义的4)有限性:每条指令的执行次数和时间都是有限的3.算法与程序的区别➢程序是算法用某种程序设计语言的具体实现➢程序可以不满足算法的有限性4.算法复杂性分析1)算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性2)三种时间复杂性:最坏情况、最好情况、平均情况3)可操作性最好且最有实际价值的是最坏情况下的时间复杂性第二章递归与分支策略1.递归概念:直接或间接调用自身的算法2.递归函数:用函数自身给出定义的函数3.递归要素:边界条件、递归方程4.递归的应用✧汉诺塔问题void Hanuo(int n,int a,int b,int c){if(n==1) return;Hanuo(n-1,a,c,b);move(a,b)Hanuo(n-1,c,b,a);}✧全排列问题void Perm(Type list[],int k,int m){ //产生list[k,m]的所有排列if(k == m){for(int i = 0;I <= m;i++) cout<<list[i];cout<<endl;}else{for(int i = j; i<=m;i++){Swap(list[k],list[i]);Perm(list,k+1;m);Swap(list[k],list[i])}}}5.分治法的基本思想:将一个规模较大的问题分成若干个规模较小的子问题,这些子问题互相独立且与原问题相同。

6.分治法的使用条件:✓问题的规模缩小到一定程度可以容易地解决✓问题可以分解为若干个规模较小的相同问题✓利用原问题分解出的子问题的解可以合并为原问题的解✓各个子问题是相互独立的7.分治法的时间复杂度8.分治法的应用二分搜索1)时间复杂度 O(logn)2)参考算法快速排序1)快排的运行时间与划分是否对称有关2)时间复杂度O(nlogn)合并排序1)基本思想:将待排元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最总将排序好的子集合合并成所要求的排序好的集合。

《算法设计与分析》第01章

《算法设计与分析》第01章

第38页
安师大数学计算机科学学院
2014年6月28日星期六
1.4.3 归纳证明
定理1-1 对于n≥0,程序1-5是正确的。 证明:(归纳法证明) 当n是1位数时,程序显然是正确的。 假定函数PrintDigit对所有位数小于k(k>1)的正 整数都能正确运行,当 n 的位数为 k 位时,此时有 n≥10 ,算法必定先执行语句 cout<<n%10; 然后执 行语句if(n>10) PrintDigit(n/10);。
第31页
安师大数学计算机科学学院
2014年6月28日星期六
可以用所谓的递归树(recursive tree)来描述程 序1-4的函数Fib执行时的调用关系。
图1-2 计算Fib(4)的递归树
第32页
安师大数学计算机科学学院
2014年6月28日星期六
递归数据结构 使用递归方式定义的数据结构称为递归数据结构 (recursive data structure)。
第10页
Begin
Rm%n
Y
r=0? N
Swap(m.n)
End
安师大数学计算机科学学院
2014年6月28日星期六
假设 m=21 和 n=45,求21和45的最大公因子
第一步:r=m%n=21%45=21; 第二步:r 不等于0,转入第三步; 第三步:互换,m=n=45, n=r=21,返回第一步。 第一步:r=m%n=45%21=3; 第二步:r 不等于0,转入第三步; 第三步:互换,m=n=21 , n=r=3,返回第一步。 第一步:r=m%n=21%3=0; 第二步:r 等于0,算法结束,3即为21和45的最大公因子。
2014年6月28日星期六

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

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

算法测试
B 291Dprogram testingE
– ( ; – 2984&29F<*-/#
5D7 1?Ftest caseEF>, 29 < F 293;F@29: %0.'!
C +$DdebugE
– (A6=; –
) ;F
9)+*[,1'-FD!V6: 9)+*= #(!)
– =O!S UN#Q [ " 66Q 59
B59[MI!)59X6 Q596
!3[489+*
!3[ >G(
!3X
算法的执行时间绝大部分花在循环 和递归上
• B61( ,*=
#!7 @H
• 42 7&1
– -3%9 !#."; ,
– )
< +:!#;42>$7 &1>* +:7 &1
• ')(/
– % 0=')8(/ 6(/
1.3.3 算法复杂度
时间复杂度( time complexity )
• • #
课程介绍
n )*
– #/) –
!.3(- 31:
n )*$,
6&"%9 – 57"%20(+ – 57"9'
n4
— 8
主要内容
1. 算法的基本概念和常见符号 2. 算法设计的常用技术
• 递归法、蛮力法、分治法、减治法 • 贪心法、动态规划、回溯法、分支限界法 • 概率算法、近似算法、计算复杂性理论 3. 算法的评价:复杂度分析
引言
1.1 算法概述

算法设计与分析

算法设计与分析

算法设计与分析第 1 章绪论算法理论研究的是算法的设计技术和算法的分析技术,前者是指面对一个问题,如何设计一个有效的算法,后者则是对已设计的算法,如何评价或者判断其优劣。

二者是相互依存的,设计出的算法需要检验和评价,对算法的分析反过来又将改进算法的设计。

1.1 算法的基本概念算法的概念在计算机科学领域几乎无处不在,在各种计算机软件系统的实现中,算法设计往往处于核心地位。

例如,操作系统是现代计算机系统中不可缺少的系统软件,操作系统的各个任务都是一个单独的问题,每个问题由操作系统中的一个子程序根据特定的算法来实现。

用什么方法来设计算法,如何判定一个算法的优劣,所设计的算法需要占用多少时间资源和空间资源,在实现一个软件系统时,都是必须予以解决的重要问题。

1.1.1 为什么要学习算法用计算机求解任何问题都离不开程序设计,而程序设计的核心是算法设计。

普通来说,对程序设计的研究可以分为四个层次:算法、方法学、语言和工具,其中算法研究位于最高层次。

算法对程序设计的指导可以延续几年甚至几十年,它不依赖于方法学、语言和工具的发展与变化。

例如,用于数据存储和检索的 Hah 算法产生于 20 世纪 50 年代,用于排序的快速排序算法发明于 20 世纪 60 年代,但他们至今仍被人们广为使用,可是程序设计方法已经从结构化发展到面向对象,程序设计语言也变化了几代,至于编程工具很难维持三年不变。

所以,对于从事计算机专业的人士来说,学习算法是非常必要的。

学习算法还能够提高人们分析问题的能力。

算法可以看做是解决问题的一类特殊方法——它不是问题的答案,而是经过精确定义的①、用来获得答案的求解过程。

因此,无论是否涉及计算机,特定的算法设计技术都可以看做是问题求解的有效策略。

著名的计算机科学家科努思(Donald ·Knuth)是这样论述这个问题的:“受过良好训练的计算机科学家知道如何处理算法,如何构造算法、操作算法、理解算法以及分析算法,这些知识远不只是为了编写良好的计算机程序而准备的。

算法设计与分析(第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章_概述2

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

log log n = log(log n); for a>0,b>0,c>0 和n

logbn=O(na)
log b n log b n lim a log n lim 0 a n ( 2 ) n n
21
算法渐近复杂性分析中常用函 数

(6)阶乘函数
1 n0 n! n(n 1)! n 0

堆排序算法是最优算法。
25
总结


了解算法在计算机科学中的地位 掌握算法的概念和特征 掌握算法分析的数学工具和方法
掌握算法计算复杂性的评价标准, 了解算 法分析中常见的复杂性函数并能够进行 比较分析 掌握算法渐近复杂性的数学表述
26


f(n)上有界,g(n)是上界 f(n)的阶不高于g(n)的阶
函数 集合

(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0 有:0 cg(n) f(n) }
f(n)下有界,g(n)是下界
6
渐近分析的记号(3)
(3)紧渐近界记号 (g(n)) = { f(n) | 存在正常数c1,c2和n0使得 对所有n n0有:c1g(n) f(n) c2g(n) }
(5)非紧下界记号 (g(n)) = { f(n) | 对于任何正常数c>0,存在正整数 n0 >0使得对所有n n0有:0 cg(n) < f(n) } 等价于 f(n) / g(n) ,as n。 f(n) (g(n)) g(n) o (f(n))
算法设计与分析
第1章 算法概述(2)
学习要点


算法在计算机科学中的地位 算法的概念 算法分析 算法的计算复杂性概念 算法渐近复杂性的数学表述

算法设计与分析知识点

算法设计与分析知识点

第一章算法概述1、算法的五个性质:有穷性、确定性、能行性、输入、输出。

2、算法的复杂性取决于:(1)求解问题的规模(N) , (2)具体的输入数据(I),( 3)算法本身的设计(A),C=F(N,I,A。

3、算法的时间复杂度的上界,下界,同阶,低阶的表示。

4、常用算法的设计技术:分治法、动态规划法、贪心法、回溯法和分支界限法。

5、常用的几种数据结构:线性表、树、图。

第二章递归与分治1、递归算法的思想:将对较大规模的对象的操作归结为对较小规模的对象实施同样的操作。

递归的时间复杂性可归结为递归方程:1 11= 1T(n) <aT(n—b) + D(n) n> 1其中,a是子问题的个数,b是递减的步长,~表示递减方式,D(n)是合成子问题的开销。

递归元的递减方式~有两种:1、减法,即n -b,的形式。

2、除法,即n / b,的形式。

2、D(n)为常数c:这时,T(n) = 0(n P)。

D(n)为线形函数cn:r O(n) 当a. < b(NT(n) = < Ofnlog^n) "n = blljI O(I1P)二"A bl吋其中.p = log b a oD(n)为幕函数n x:r O(n x) 当a< D(b)II JT{ii) = O(ni1og b n) 'ia = D(b)ll].O(nr)D(b)lHJI:中,p= log b ao考虑下列递归方程:T(1) = 1⑴ T( n) = 4T(n/2) +n⑵ T(n) = 4T(n/2)+n2⑶ T(n) = 4T(n/2)+n3解:方程中均为a = 4,b = 2,其齐次解为n2。

对⑴,T a > b (D(n) = n) /• T(n) = 0(n);对⑵,•/ a = b2 (D(n) = n2) T(n) = O(n2iog n);对⑶,•/ a < b3(D(n) = n3) - T(n) = 0(n3);证明一个算法的正确性需要证明两点:1、算法的部分正确性。

计算机算法设计与分析(第5版)第1章

计算机算法设计与分析(第5版)第1章
• 其中I是问题的规模为n的实例,p(I)是实 例I出现的概率。
算法渐近复杂性
• T(n) , as n ; • (T(n) - t(n) )/ T(n) 0 ,as n; • t(n)是T(n)的渐近性态,为算法的渐近复杂性。 • 在数学上, t(n)是T(n)的渐近表达式,是T(n)略去低阶
问题求解(Problem Solving)
理解问题 精确解或近似解
选择数据结构 算法设计策略
设计算法 证明正确性
分析算法 设计程序
算法复杂性分析
• 算法复杂性 = 算法所需要的计算机资源 • 算法的时间复杂性T(n); • 算法的空间复杂性S(n)。 • 其中n是问题的规模(输入大小)。
算法的时间复杂性
项留下的主项。它比T(n) 简单。
渐近分析的记号
• 在下面的讨论中,对所有n,f(n) 0,g(n) 0。 • (1)渐近上界记号O • O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
0 f(n) cg(n) } • (2)渐近下界记号 • (g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
• (1)最坏情况下的时间复杂性 • Tmax(n) = max{ T(I) | size(I)=n } • (2)最好情况下的时间复杂性 • Tmin(n) = min{ T(I) | size(I)=n } • (3)平均情况下的时间复杂性
• Tavg(n) = p(I )T (I ) size(I )n

for x > -1,
x ln(1 x) x 1 x

for any a > 0,
Hale Waihona Puke log b nlim

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

计算机算法设计与分析--第1章 算法概述
12
③确认算法。算法确认的目的是使人们确信这一算 法能够正确无误地工作,即该算法具有可计算性。 正确的算法用计算机算法语言描述,构成计算机程 序,计算机程序在计算机上运行,得到算法运算的 结果; ④ 分析算法。算法分析是对一个算法需要多少计算 时间和存储空间作定量的分析。分析算法可以预测 这一算法适合在什么样的环境中有效地运行,对解 决同一问题的不同算法的有效性作出比较; ⑤ 验证算法。用计算机语言描述的算法是否可计算、 有效合理,须对程序进行测试,测试程序的工作由 调试和作时空分布图组成。
16
算法描述
1. 从第一个元素开始,该元素可以认为已 经被排序 2. 取出下一个元素,在已经排序的元 素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素, 将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素 小于或者等于新元素的位置 5. 将新元素插入到该位置中 6. 重复步骤2
15
1.3 算法示例—插入排序算法
算法的思想:扑克牌游戏
a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1
= = = = = = =
5,2,4,6,1,3 5,2,4,6,1,3 2,5,4,6,1,3 2,4,5,6,1,3 2,4,5,6,1,3 1,2,4,5,6,3 1,2,3,4,5,6
8
算法≠程序
算法描述:自然语言,流程图,程序设计
语言,伪代码 用各种算法描述方法所描述的同一算法, 该算法的功用是一样的,允许在算法的描述 和实现方法上有所不同。
本书中采用类C++伪代码语言描述算法
9
人们的生产活动和日常生活离不开算法, 都在自觉不自觉地使用算法,例如人们到 商店购买物品,会首先确定购买哪些物品, 准备好所需的钱,然后确定到哪些商场选 购、怎样去商场、行走的路线,若物品的 质量好如何处理,对物品不满意又怎样处 理,购买物品后做什么等。以上购物的算 法是用自然语言描述的,也可以用其他描 述方法描述该算法。

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

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

是否存在更好的算法?
下界 最优
途径
理论/数学上的分析 经验/计算机上的执行情况
24
学习要点
算法在计算机科学中的地位 算法的概念 算法分析 算法的计算复杂性概念 算法渐近复杂性的数学表述
25
算法分析
不是所有能计算的都有价值,不是所有有价值的 都能被计算.
----------阿尔伯特.爱因斯坦(1879-1955)
14
算法
算法是问题的程序化解决方案 算法设计技术是用算法解题的一般性方 法,用于解决不同计算领域的多种问题.
问题的陈述远比它的解法重要;得解只要有数学的 或实验的技巧就行。提出新的疑问、新的可能,从新的 角度看老问题,需要创造性的想象力并且标志着科学的 真正进步。 ――A.爱因斯坦
15
问题的求解过程
28
算法复杂性分析
目的 预测算法对不同输入所需资源量 复杂性测度 时间,空间, I/O 等, 是输入大小的函数 用途 为求解一个问题选择最佳算法、最佳设备 需要的数学基础 离散数学,组合数学,概率论,代数等 需要的数学能力 建立算法复杂性的数学模型 数学模型化简
29
学习要点
算法在计算机科学中的地位 算法的概念 算法分析 算法的计算复杂性概念 算法渐近复杂性的数学表述
计算复杂性理论
在给定的计算模型下研究问题的复杂性 复杂性问题的分类: P=NP? 抽象复杂性研究
算法设计和分析
可计算问题的算法的设计与分析 设计算法的理论、方法和技术 分析算法的理论、方法和技术
方法
计算机软件
系统软件 工具软件 应用软件
应用
6
3 算法与其它技术
应 用
计算环境 (.net, grid, web service) 编程设计环境

计算机算法设计与分析(第3版)王晓东 第1章

计算机算法设计与分析(第3版)王晓东 第1章
??i?????111211nnni??i???1121nnni221?21?21?121?1?1?27432765432126547654321maxnoccccncccccccncccncnncnncnncncncncnt????????????????????????????????????????????????对于输入数据ainii01
• 程序可以不满足算法的性质(4)。
• 例如操作系统,是一个在无限循环中执行的程序,因
而不是一个算法。 • 操作系统的各种任务可看成是单独的问题,每一个问 题由操作系统中的一个子程序通过特定的算法来实现。 该子程序得到输出结果后便终止。
问题求解(Problem Solving)
理解问题 精确解或近似解 选择数据结构 算法设计策略 设计算法 证明正确性 分析算法 设计程序
>0使得对所有n n0有:0 cg(n) < f(n) }
• 等价于 f(n) / g(n) ,as n。 • f(n) (g(n)) g(n) o (f(n))
• (5)紧渐近界记号
• (g(n)) = { f(n) | 存在正常数c1,c2和n0使得对所有n n0
• (3.1) return语句: • return expression;
x lim 1 e x n n
n
• (5)对数函数 • log n = log2n;

• • • •
lg n = log10n;
ln n = logen; logkn = (log n)kl; log log n = log(log n); for a>0,b>0,c>0
• (3)平均情况下的时间复杂性 • Tavg(n) =

(算法分析设计)第一章:算法概述

(算法分析设计)第一章:算法概述
对于给定的N、I和A,如何导出时间复杂度T=T(N ,I)和空间复杂度S=S(N,I)?
T(N,I)表示算法在一台抽象的计算机上运行需 要的时间。设此抽象计算机的元运算有k种,分别 记为O1,O2,…,OK。每执行一次这些运算所需要的 时间分别为t1,t2,..,tk.设算法用到元运算Oi的次数为 ei(是N和I的函数),则 k
算法实现
设计出复杂性尽 可能低的算法
算法复杂性分析
算法复杂性分析的依赖因素
要解问题的规模——用N表示 算法的输入——用I表示 算法自身——用A表示
C=F(N,I,A)
——C:算法复杂性
时间复杂性函数的具体化?
一个算法的时间复杂度(time complexity)是指算 法运行所需的时间。
培养独立科研能力
初步了解科研工作中解决问题的一般规程。 培养分析问题解决问题的能力。
培养团队合作能力
通过团队完成作业来培养大家的团队合作能力。
为什么要学习算法?
算法不仅是计算机科学的一个分支,它更是计 算机科学的核心,而且,可以毫不夸张地说, 它和绝大多数的科学、商业和技术都是相关 的。——David Harel《算法:计算的灵魂》
n 以上三种情况的复杂性从不同角度来反映算法的效率,各有 其局限性和用处,但操作性最好且最具有实用价值的是最坏 情况下的时间复杂性。
n 如果无特别说明,T(N)=Tmax(N)
算法的效率分析:实例1
问题:已知不重复且已经按从小到大排好的m个整数的数组
A[m],对于给定的整数c,要求寻找一个下标i,使得A[i]=c,
随机算法 数值概率算法 舍伍德算法 拉斯维加斯算法 蒙特卡罗算法
两个基本概念
算法 算法复杂性
算法与程序

算法设计与分析第一章算法概述

算法设计与分析第一章算法概述
1)结构化方法——“自顶向下, 逐步求精” 结构化方法总的指导思想是自顶向下、逐步求精。它的基本原则是功能的分解与模块化
所谓“自顶向下” 是将现实世界的问题经抽象转化为逻辑空间或求解空间的问题。是将复杂且大的 问题划分为较小问题,找出问题的关键和重点,然后抽象、概括地描述问题。
所谓“逐步求精” 是将复杂问题经抽象化处理变为相对比较简单的问题。经若干步精化处理,最后 细化到用“三种基本结构”及基本操作去描述算法。
算法设计与分析第一章算法 概述
引入篇
第一章 算法概述
1.1 用计算机求解问题
问题求解(problem solving)是个大课题,它涉及归约、推断、决策、规划、常识推理、定 理证明和相关过程的核心概念
我们学习算法设计的重点就是把人类找到的求解问题的方法、步骤,以过程化、形式化、机 械化的形式表示出来,以便让计算机执行。(当然人工智能软件系统也离不开“算法设计”这个 最基本的软件设计环节。)就把我们学习的目标定为“用计算机求解问题”。
1.1.1 用计算机求解问题的步骤
现实中,在解决一个问题时,根据不同的经验,不同的环境会采用不同的方法,用计算机解 决现实中的问题,同样也有很多不同的方法,但解决问题的基本步骤是相同的。 下面给出用计算机求解问题的一般步骤。
1. 问题分析
准确、完整地理解和描述问题是解决问题的第一步。要做到这一点,必须注意以下一些问题: 在未经加工的原始表达中,所用的术语是否都明白其准确定义?题目提供了哪些信息?这些信息 有什么用?题目要求得到什么结果?题目中作了哪些假定?是否有潜在的信息?判定求解结果所 需要的中间结果有哪些?等等。针对每个具体的问题,必须认真审查问题描述,理解问题的真实 要求。
可行性 算法中描述的操作都可以通过已经实现的基本操作运算有限次实现。

算法设计与分析耿国华第一章

算法设计与分析耿国华第一章

(2i 1) n
i 1
n
2
(2i 1) (2i 1) 2n 1 (n 1)
i 1 i 1
2
2n 1 n 2
故命题成立。
Chapter
1
1.5 算法复杂性分析方法
1.5.1 复杂度函数
1.5.2 最好、最坏和平均情况
1.5.3 渐进分析 1.5.4 阶的证明方法
Chapter
1
1.3 算法分析准则
分析准则
(4)高效率和低存能量 评价算法性能另一个要考虑的因素就是算法的运行效率,也 就是要估计一下按算法编制的程序在计算机上执行所耗费的时 间和所占用空间。 评价算法运行效率的主要技术指标是:算法运行的时间复杂 度和空间复杂度。
Chapter
1
1.4 算法分析基础
Chapter
1
1.1 引言----算法特性
• 算法特性
(1)有限性:
一个算法必须保证执行有限步之后结束
(2)确定性(无二义)
算法的每一步骤必须有确切的定义
(3)可行性
算法原则上能精确地运行。在现有条件情况下,是可以
实现的 。
Chapter
1
1.1 引言----算法特性• 算法特性(4)输入
一个算法有0个或多个输入,以刻画运算对象的初始情况
Chapter
1
1.1 引言----算法描述方式
• 算法的描述方式
(1)自然语言
所谓的“自然语言”指的是日常生活中使用的语言,如汉语、 英 语。用自然语言进行描述通俗易懂,容易掌握,但是不 严谨、容易有二义性。
(2)框图(流程图)
它是用各种几何图形、流程线及文字说明来描述计算过程的 框图。直观地表示算法的整个结构,着重处理流程,便于检查 修改。但是它无法表达数据流程。

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

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

T avg ( n )

p ( I )T ( I )
size ( I ) n
p p p p 1 2 3 n n 1 p n n n n

2013-5-24
p n

i1
n
i n 1 p
算法设计与分析
p( n 1) 2
2013-5-24
算法设计与分析
16
与机器无关的时间效率
(1)Tmax(n) = max{ T(I) | size(I)=n }=O(n) (2)Tmin(n) = min{ T(I) | size(I)=n }=O(1) (3)在平均情况下,假设: (a) 搜索成功的概率为p ( 0 p 1 ); (b) 在数组的每个位置i ( 0 i < n )搜索成功的概率相同,均为 p/n。
2013-5-24 算法设计与分析 18
2. 复杂性的渐近分析
• 比较两种不同的复杂性
– 3×n + 2和3×n 论当n→∞时,算法的时间复杂性,即复杂性 的渐近性态
2013-5-24
算法设计与分析
19
1) 渐近性态
• 设T(n)为算法A的时间复杂性函数,则它是n的单 ~ 调递增函数,如果存在一个函数 T( n ) 使得当 n→∞,有:
• 描述算法可以有多种方式:自然语言、数 学语言、流程图、表格方式、 图示形式、 程序设计语言等。 在此将采用C++与自然 语言相结合的方式来描述算法。
• 算法设计方法主要有:分治策略、动态规 划、贪心法、回溯法、分支限界、概率算 法等。
2013-5-24 算法设计与分析 13
1.2 算法的复杂性分析
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们学习算法设计的重点就是把人类找到的求 解问题的方法、步骤,以过程化、形式化、机械化 的形式表示出来,以便让计算机执行。(当然人工 智能软件系统也离不开“算法设计”这个最基本的 软件设计环节。)就把我们学习的目标定为“用计 算机求解问题”。
1.1.1 用计算机求解问题的步骤
现实中,在解决一个问题时,根据不同的经验,不同的 环境会采用不同的方法,用计算机解决现实中的问题,同样 也有很多不同的方法,但解决问题的基本步骤是相同的。 下面给出用计算机求解问题的一般步骤。
可行性 算法中描述的操作都可以通过已经实现的
基本操作运算有限次实现。 算法有零个或多个的输入
有些输入量需要在算法执行过程中输入, 而有的算法表面上可以没有输入,实际上已被嵌 入算法之中。
算法有一个或多个的输出 它是一组与输入有确定关系的量值,是算
法进行信息加工后得到的结果。
1.1.3 算法设计及基本方法
对于复杂的问题,确定算法后可以通过图形准确表示 算法。算法的表示方式很多如:算法流程图、盒图、PAD图 和伪码(类似于程序设计语言)等。
6、算法实现
根据选用的程序设计语言,要解决下列一些问题:有 哪些变量,它们是什么类型?需要多少数组,规模有多大? 用什么结构来组织数据?需要哪些子算法?等等。
算法的实现方式,对运算速度和所需内存容量都有很大 影响。
8、结果整理文档编制
编制文档的目的是让人了解你编写的算法。首先要把 代码编写清楚。代码本身就是文档。同时还要采用注释的方 式,另外还包括算法的流程图,自顶向下各研制阶段的有关 记录,算法的正确性证明(或论述),算法测试结果,对输 入/输出的要求及格式的详细描述等。
1.1.2 算法及其要素和特性
1、算法的定义
能满足某个条件时结束。又称重复或迭代结构。
注意: 模块间的调用也是一种控制结构,特别 地模块
自身的直接或间接调用—递归结构,是一种功能很 强的控制结构。
3)数据结构
算法操作的对象是数据,数据间的逻辑关 系、数据的存储方式及处理方式就是数据的数据 结构。它与算法设计是紧密相关的。
注意: 算法是把人类找到的求解问题的法, 用以上要素过程化、形式化、机械化地表示出来。
* 在这些步骤中,算法设计是解决问题的核心。
4、算法分析
算法分析的目的,首先为了对算法的某些特定输入, 估算该算法所需的内存空间和运行时间;其次是为了建立衡 量算法优劣的标准,用以比较同一类问题的不同算法。通常 将时间和空间的增长率作为衡量的标准。另参见1.1.4算 法及其设计的评价
5、算法表示
2.算法的要素
算法由操作、控制结构、数据结构三要素组 成。
1)操作 算术运算:加、减、乘、除 关系比较:大于、小于、等于、不等于 逻辑运算:与、或、非 数据传送:输入、输出, 赋值
2)控制结构 —— 各操作之间的执行次序。 顺序结构:各操作依次执行 选择结构:由条件是否成立来选择 执行 循环结构:有些操作要重复执行,直到功
2、数学模型建立
用计算机解决实际问题必须有合适的数学模型,因为 在现实问题面前,计算机是无能为力。
对一个实际问题建立数学模型,可以考虑这样两个基 本问题:最适合于此问题的数学模型是什么?是否有已经解 决了的类似问题可借鉴?
如果上述第二个问题的答复是肯定的,那么通过类似的 问题的分析、比较和联想,可加速问题的解决。
目录
前言 第一篇 引入篇
第一章 算法概述 第二章 算法分析基础
第二篇 基础篇 第三章 算法基本工具和优化技巧
第三篇 核心篇 第四章 基本的算法策略 第五章 图的搜索算法
第四篇 应用篇 第六章 算法设计实践
引入篇
第一章 算法概述
1.1 用计算机求解问题
问题求解(problem solving)是个大课题,它涉 及归约、推断、决策、规划、常识推理、定理证明 和相关过程的核心概念
1. 问题分析
准确、完整地理解和描述问题是解决问题的第一步。 要做到这一点,必须注意以下一些问题:在未经加工的原始 表达中,所用的术语是否都明白其准确定义?题目提供了哪 些信息?这些信息有什么用?题目要求得到什么结果?题目 中作了哪些假定?是否有潜在的信息?判定求解结果所需要 的中间结果有哪些?等等。针对每个具体的问题,必须认真 审查问题描述,理解问题的真实要求。
算法是指在解决问题时,按照某种机械步骤一定可以 得到问题结果的处理过程。当面临某个问题时,需要找到用 计算机解决这个问题的方法和步骤,算法就是对解决这个问 题的方法和步骤的描述,是指令的有限序列。
机械步骤是指,算法中有待执行的运算和操 作,必须是相当基本的。换言之,它们都是能够 精确地运行的算法,执行者甚至不需要掌握算法 的含义,即可根据该算法的每一步骤要求,进行 操作并最终得出正确的结果。
4. 算法的地位
算法是计算机学科中最具有方法论性质的核 心概念,也被誉为计算机学科的灵魂。
5. 算法的基本特征
有穷性 一个算法在执行有穷步之后必须结束。也就是说一
个算法它所包含的计算步骤是有限的而且每个步骤都能 在有限时间内完成。 确定性
对于每种情况下所应执行的操作,在算法中都有确 切的规定,使算法的执行者或阅读者都能明确其含义及 如何执行。并且在任何条件下,算法都只有一条执行路 径。
3、算法设计与选择
算法设计是指设计求解某一特定类型问题的一系列步 骤,并且这些步骤是可以通过计算机的基本操作来实现的。
算法设计要同时结合数据结构的设计,简单说数据结 构的设计就是选取存储方式。算法的设计与模型的选择更是 密切相关的,但同一模型仍然可以有不同的算法,而且它们 的有效性可能有相当大的差距。
7、程序测试
算法测试的实质是对算法应完成任务的实验证实,同 时确定算法的使用范围。测试方法一般有两种:白盒测试对 算法的各个分支进行测试;黑盒测试检验对给定的输入是否 有指定输出。
如何选择算法测试中的输入,还没有一般答案。通常采 用的方法是,对输入数据做有代表性的采样,使之对被测试 算法的各个语句、分支和路径尽可能都被检查到。对输入集 中的边界点也要进行测试。经测试验证是否正确的算法,在 较大程度上是可以相信它的正确性。
相关文档
最新文档