算法设计与分析.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《算法设计与分析.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析.ppt(99页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法设计与分析2013.4,王多强 华中科技大学计算机学院 ,写在讲课前,一、什么是算法 算法就是计算的方法。 数学 数:1,2,3,4, 学:偶数、质数、微积分之数的学问 算法 算:加、减、乘、除 法:何时、何处用何计算之算的方法,写在讲课前(续),举个例子:排序 问题描述:将一组数按从小到大的顺序整理有序 基本思想:小的数往前排,大的数往后排 怎么排?算法 冒泡排序 选择排序 归并排序 快速排序 堆排序 Shell排序 ,每种算法都是一组特定的规则,规定了一种处理数据的运算方法,问题:既然每种方法都可以实现排序之目的,何必费心研究这么多排序算法? 其一:就像玩智力游戏,人们乐衷于寻找不同的
2、方法解决各种各样的问题。 其二:研究的需要,算法和算法间是有区别的,我们有必要去研究,去分析。 性质不同:稳定、不稳定 性能不同:速度、空间 适用场合不同 其三,应用的需求,问题有千百万种,没有万能的算法适合所有的应用。需要我们找出算法的设计规律,并设计出解决问题的新算法 怎么选择:根据性能、结合需求、综合选择 如何了解每种算法的性能?算法的分析,二、算法分析 了解算法的性能: 算法速度:快还是慢?如何衡量?怎么比较? 空间使用量(计算机算法*):大还是小?如何衡量?怎么比较? 其它方面的性质等。,实例分析: 排序算法的理论分析:(略) 编程序测试 1.冒泡排序真的很慢吗? 数据集元素个数:1
3、0、20、1000、10000 2.快速和归并排序都是O(nlogn)的时间复杂度, 到底谁更快一点呢?原因是什么? 3.冒泡排序会不会比快速排序快? 来自于实测的结论:可能。,三、为什么要学习算法 1. 编程序的需要 任何程序都需要算法。 the core of computer science 程序 = 数据结构 + 算法 2. 改造世界的需要 世界上还有很多很多的问题等待你解决,有无数的程序等待你去编。 3. 国家综合实力的体现(大) 从软实力的角度,算法是国家科技生产力的核心。是国家综合实力的体现。,四、头疼的事:算法太多了,学不过来 是的,千万的问题、万千的算法。都学过来是不可能的。
4、甚至专一门已经很了不起。 学习算法设计与分析的策略、技术和方法,把握解决问题的规律,为设计更复杂、更有效的算法奠定基础。 需要同学们不断学习,深入思考,创新设计。,五、算法的学习过程:痛苦并快乐着 1.枯燥的过程 繁 /将Ai放到临时变量item中 ji-1 /从后往前查找当前元素的插入位置 while itemA(j) do A(j+1)A(j); /比item大的元素往后移一位 jj-1; /继续往前查找 repeat A(j+1) item; /将item插入到正确的位置上 repeat end INSERTIONSORT,算法导论算法描述: INSERTIONSORT(A,n) A0-
5、 A0做监视哨 for i2 to n 从第二个元素开始循环 do itemAi 将Ai放到临时变量item中 ji-1 从后往前查找当前元素的插入位置 while itemAj do Aj+1Aj 比item大的元素往后移一位 jj-1; 继续往前查找 A(j+1) item; 将item插入到正确的位置上,基于上述算法,思考: 这个算法描述正确吗? 能行、确定、输入、输出、有穷? 正确性证明 运算得快吗? 时间复杂度分析 使用了多少内存? 空间复杂度分析 进一步我们需要回答: 它能够应用到那些领域? 要做深入进一步分析 利用不同语言实现需要那些技巧? 实现,4)分析:对算法的时、空特性做定
6、性、定量分析,以了解算法的性质。 5)测试:将算法变成程序,放到计算机上运行,观察运行情况 编程中的调试:排错过程。“调试只能指出有错误, 而不能指出它们不存在错误” Dijkstra的名言 运行中的测试:分析过程。作时空分布图,验证分析结论,进一步优化算法的设计。 本课程集中于学习算法的设计与分析。通过学习,掌握计算机算法设计和分析基本策略与方法,为设计更复杂、更有效的算法奠定基础,1. 分析算法的目的,算法选择的需要:对同一个问题可以设计不同的算法,不同算法的时间和空间特性是不同的 算法优化的需要:有没有可以改进的地方,以使算法工作得更好? 分析算法的目的在于:通过对算法的分析了解算法的性
7、能,1)可以在解决同一问题的不同算法之间比较性能的好坏,从而运行好的算法,改进差的算法,避免无益的人力和物力浪费。2)可以对算法的性质作深入了解,从而可以进一步优化算法,让其更好地工作。,1.2 分析算法基础,2. 重要的假设和约定,1)计算机模型的假设 计算机形式理论模型: 有限状态自动机、Turing机 通用的顺序计算机模型: 单CPU串行算法 有足够的“内存”,并能在固定的时间内存取 数据单元 RAMrandom-access machine 区分计算机的理论模型与实际的计算机,2)计算的约定,算法的执行时间是算法中所有运算执行时间的总和,可以表示为: 算法的执行时间= 其中, fi :
8、是运算i的执行次数,称为该运算的频率计数 仅与算法的控制流程有关,与实际使用的计算机硬 件和编制程序的语言无关。 ti :是运算i在实际的计算机上每执行一次所用的时间 与程序设计语言和计算机硬件有关。 如何确定算法使用了哪些运算,每种运算的fi和ti又是多少?,运算的分类,依照运算的时间特性,将运算分为时间囿界于常数的运算和时间非囿界于常数的运算。 囿界的含义:限于. 时间囿界于常数的运算: 基本算术运算,如整数、浮点数的加、减、乘、除 字符运算、赋值运算、过程调用等 特点:执行时间是固定量,与具体的操作数无关。 例: 1+1 = 2 vs 10000+10000 = 20000 100*10
9、0 = 10000 vs 10000*10000 = 100000000 CALL INSERTIONSORT,更一般的情况,设有n种运算c1,c2,cn,它们的执行时间分别是t1,t2,tn。 令t0=max(t1,t2,tn),则每种运算执行一次的时间都可以用t0进行限界(上界)。 视t0为一个单位时间,则这些运算“理论”上都可视为仅花一个固定的单位时间t0即可完成的运算 称具有这种性质的运算为时间囿界于常数的运算。,运算的分类(续),时间非囿界于常数的运算: 字符串操作:与字符串中字符的数量成正比 例:字符串的比较运算(strcmp) 记录操作:与记录的属性数、属性类型等有关 特点:运算
10、时间与操作数相关,每次执行的时间是一个不定的量。,怎么分析时间非囿界于常数的运算? 这类运算通常是由更基本的运算组成的。而这些基本运算是时间囿界于常数的运算。 如:字符串的比较运算是由一组字符比较运算组成的。 非囿界于常数的运算的一次执行时间是其包含的所有基本运算的执行时间之和: 如:字符串比较时间tstring = Length(String)* tchar 故:分析时间非囿界于常数的运算时,只需将其分解成若干时间囿界于常数的运算即可。,3)工作数据集的选择,算法的执行情况与输入数据的特征有关,体现在: 算法的执行时间与输入数据的规模相关,一般 规模越大,执行时间越长。 在不同的数据配置上,
11、同一算法有不同的执行 情况,可分为最好、最坏和平均等情况讨论。 编制不同的数据配置,分析算法的最好、最坏、平均工作情况是算法分析的一项重要工作。 如插入排序有最好O(n)、最坏O(n2)的工作情况。,注:编制测试数据对算法分析与程序调试都是关键的,但目的不同。 算法分析数据集:反映算法的典型执行情况(最好、最坏、平均); 调试程序数据集:排错。力求走到程序的每个分支,验证各种情况下程序执行正确与否。,3.如何进行算法分析?,对算法的全面分析将分两个阶段进行:事前分析和事后测试(理论分析和程序测试)。 事前分析:求算法时间/空间复杂度的限界函数。 限界函数通常是关于问题规模n的特征函数,被表示成
12、、或的形式。如归并排序的O(nlogn)。 特征函数是通过分析算法的控制逻辑得来的,是对算法所用运算执行次数的统计结果。与使用的程序设计语言和计算机硬件无关。,事后测试:将算法编制成程序,放到实际的计算机上运行,收集程序的执行时间和空间占用情况等统计数据,然后进行分析判断。 事后测试与物理实现直接有关。 算法分析主要集中于与物理实现无关的事前分析阶段获取算法的理论时间/空间复杂度。,1)事前分析,目标:获取算法的时间(空间)复杂度函数,从理论上分析算法性能的好坏。 可以分为时间、空间两个方面: 时间分析: 了解算法中使用了哪些运算(主要是具有单位执行时间的基本运算)。 分析程序的控制流程,从而
13、确定各类运算的执行次数。 将对运算执行次数的统计分析结果表示成关于问题规模n的特征函数。 算法性能有最好、平均、最坏等情况,与数据配置有关。分析典型的数据配置,了解算法在各种情况下的执行情况。,空间分析: 分析算法中各类变量的定义情况和使用情况 将空间占用量表示成为问题规模n的特征函数。 空间占用有最大、平均、最少等情况,与数据配置有关。分析典型的数据配置,了解算法在各种情况下的空间占用情况。,如何进行时间分析?,(一)统计算法中各类运算的执行次数 频率计数 统计对象:运算 1)基本运算:指那些时间囿界于常数的运算 2)复合运算:具有固定执行时间的程序块,如一条语句、一个过程或函数等,它们的一
14、次执行时间也可视为常量、单位时间。 频率计数:运算的执行次数是从算法的控制流程得来的。 顺序结构中的运算:执行次数计为1 嵌套结构中的运算:执行次数等于被循环执行的次数 控制流程分析的关键:确定算法中使用的嵌套结构,包括循环语句、嵌套调用等。,例:执行次数的统计 xx+y for i 1 to n do for i 1 to n do x x + y for j 1 to n do repeat x x +y repeat repeat (a) (b) (c) 分析: (a): xx+y执行了1次 (b): xx+y执行了n次 (c): xx+y执行了n2次,for i 1 to n do f
15、or j i to n do x x +y repeat repeat (d),(二)将频率计数表示成问题规模n的函数: 如: an2+ bn+c 算法的执行时间是算法中各类运算执行时间之和,将正比于各类运算的频率计数之和。 事前分析的频率计数结果与所使用的机器及其他环境因素无关(如程序设计语言、编译器),只与算法本身的控制流程有关。,例:插入分类 procedure INSERTIONSORT(A,n) /将A(1:n)中的元素按非降次序分类,n1/ 执行次数 单位执行时间 A(0)-/设置初始边界值 1 t1 for j2 to n do /A(1:j-1)已分类/ n-1 t2 item
16、A(j); n-1 t3 ij-1 n-1 t4 while itemA(i) do /0ij/ 最多i次,最少1次 t5 A(i+1)A(i); 最多i-1次,最少0次 t6 ii-1; 最多i-1次,最少0次 t4 repeat A(i+1) item; n-1次 t7 repeat end INSERTIONSORT,令 t0=max(t1,t2,t3,t4,t5,t6,t7),则,最坏情况(逆序),最好情况(正序),进一步的分析: 主要针对算法最主要的部分进行分析,抓住主要矛盾即可,如插入排序中,可以仅集中于对for/while双重嵌套循环的分析,而忽略顺序或执行次数较低的部分。 (三
17、)函数表达式的数量级(阶) 函数表达式中的最高次项的次数,称为函数表达式的数量级,是衡量频率计数的“大小”的一种测度。,数量级从本质上反映了算法复杂度的高低 数量级越小,算法的复杂度越低,同等规模下算法执行时间越短。反之, 数量级越大,算法的复杂度越高,同等规模下算法执行时间越长。 例:假如求解同一个问题的三个算法分别具有n, n2 , n3 数量级。 若n=10,则可能的执行时间将分别是10,100,1000 个单位时间与环境因素无关。 实例:工资的级别 (定性的表示),(四)限界函数 一般用频率计数函数表达式中的最高次项表示算法复杂性分析的最终结果 限界函数,且忽略掉其系数,记为: g(n
18、)。g(n)通常是关于n的形式简单的函数式,如:logn,nlogn,n2等。 不同算法的g(n)有不同的具体形式。 g(n)通常是对算法中最复杂的计算部分分析而来的。 g(n)忽略了函数表达式中次数较低的“次要”项,体现了算法复杂性的最本质特征。 g(n)通常取单项的形式。 空间特性分析(与时间特性的分析类似,略),2)事后测试,把算法编制成程序,在实际的计算机硬件平台上运行程序,统计执行中实际耗费的时间与空间,与事前分析的结论进行比较,验证先前的分析结论是否正确,并优化所设计的算法。 分析手段:作时、空性能分布图,4. 计算时间的渐近表示、的定义,算法时间/空间复杂度的限界函数常用的有三个
19、:上界函数、下界函数、“均值”函数。定义如下: 记:算法的实际计算时间为f(n),计算时间的限界函数为g(n),其中, n是问题规模的某种测度。 f(n)是与机器及语言有关的量。 g(n)是事前分析的结果,是一个形式简单的函数,与频率计数有关、而与机器及语言无关。,1)O、记号,定义1. 1(上界函数)如果存在两个正常数c和n0,对于所有 的nn0,有|f(n)| c|g(n)|,则记作f(n) = (g(n)。 含义: 如果算法用n值不变的同一类数据(规模相等,性质相同)在某台机器上运行,所用的时间总小于|g(n)|的一个常数倍。 函数f 至多是函数g 的c倍,除非nn0。即是说,当n 充分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内