算法设计与分析(一)算法基础.ppt
《算法设计与分析(一)算法基础.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析(一)算法基础.ppt(96页珍藏版)》请在三一办公上搜索。
1、算法设计与分析2011.9(ACM创新实验班 2010级),写在讲课前,一、什么是算法算法就是计算的方法。数学数:1,2,3,4,学:偶数、质数、微积分之数的学问 算法算:加、减、乘、除法:何时、何处用何计算之算的方法,写在讲课前(续),举个例子:排序问题描述:将一组数按从小到大的顺序整理有序基本思想:小的数往前排,大的数往后排怎么排?算法冒泡排序选择排序归并排序快速排序堆排序Shell排序,每种算法都是一组特定的规则,规定了一种处理数据的运算方法,写在讲课前(续),问题:既然每种方法都可以实现排序之目的,何必费心研究这么多排序算法?目的一:是不是人们的遐想?起码不是瞎想目的二:算法和算法间是
2、有区别的性质不同:稳定、不稳定性能不同:速度、空间适用场合不同 没有万全的算法适合所有的应用的。怎么选择:根据性能、结合需求、综合选择 如何了解每种算法的性能?算法的分析,人们乐衷于寻找不同的方法以在不同的应用要求下求解各种问题,写在讲课前(续),二、算法分析 了解算法的性能:算法速度:快还是慢?如何衡量?怎么比较?空间使用量(计算机算法*):大还是小?如何衡量?怎么比较?其它方面的性质等。,写在讲课前(续),实例分析:排序算法的理论分析:(略)编程序测试1.冒泡排序真的很慢吗?数据集元素个数:10、20、1000、100002.快速和归并排序都是O(nlogn)的时间复杂度,到底谁快呢?原因
3、是什么?3.冒泡排序会不会比快速排序快?来自于实测的结论:可能。,写在讲课前(续),三、为什么要学习算法1.编程序的需要 任何程序都需要算法。the core of computer science 程序=数据结构+算法2.改造世界的需要 世界上还有很多很多的问题等待你解决,有无数的程序等待你去编。3.国家综合实力的体现(大)从软实力的角度,算法是国家科技生产力的核心。是国家综合实力的体现。,写在讲课前(续),四、算法太多了,学不过来 是的,千万的问题、万千的算法。都学过来是不可能的。甚至专一门已经很了不起。课堂学习只能关注于算法设计与分析的基本策略与方法,为设计更复杂、更有效的算法奠定基础。
4、更多的知识需要同学们以后不断学习,甚至创造出新的算法。,写在讲课前(续),五、算法的学习过程:痛苦并快乐着1.枯燥的过程繁vs烦:学习一个算法如同做一道数学题,多了呢?ACM ICPC的训练过程,谁学谁知道2.智慧的积累方法的掌握、技术的升华3.理论的贡献算法成就或在于理论的贡献,而不仅仅是技术的提高。如何成就好算法:好思想+好技术,写在讲课前(续),六、好算法从理论的角度说,好算法应该有较低的时间复杂度(高速)和空间复杂度(低耗),但好的算法还要依靠好的实现,需要理论与技术、技巧的结合才能最终实现好的算法。从应用的角度说,能有效地解决问题的算法都是好算法不管黑猫白猫,抓住老鼠就是好猫;不管A
5、算法、B算法,能解决问题就是好算法(实用了点)。,概述,课程核心:介绍算法设计与分析的基本理论、方法和技术,奠定算法设计的基础。教学目的:在理论学习上,掌握算法分析与设计的基本理论和方法,培养设计新算法和分析算法复杂性的能力。在实践教学上,掌握算法实现的技术、技巧,学习算法的正确性验证、效率分析、优化技术,以及算法在实际问题中的分析与应用。培养独立研究和创新能力。,概述(续),课程内容:基本概念:算法的定义、性质、分析算法的基本方法等分治策略(Divide and conquer)贪心方法(Greedy method)动态规划(Dynamic Programming)图算法(Graph Alg
6、orithms)回溯与分枝限界专题综合实践,概述(续),本课程需要的基础 数据结构 程序设计语言(C/C+):结构化设计 数学基础 操作系统、编译,概述(续),授课形式:课堂教学:()课堂讨论:专题、解题报告上机实践:需要提交实验报告,概述(续),主要参考书计算机算法基础,余祥宣等编著,华中科技大学出版社Introduction to algorithms,Thomas H.Cormen,etc.,second edition,The MIT Press.Algorithm Design,Michael T.Goodrich算法设计与分析,王晓东,清华大学出版社,概述(续),其它参考书The
7、Art of Computer Programming,Donald E.Knuth.Volume 1-3,Second Edition.Data Structures,Algorithms,and Applications in C+(Part 3)Sartaj Sahni,China Machine Pressetc.,一、算法基础,参考资料:计算机算法基础 第二章 Introduction to algorithms Chapter 1、Chapter 3,1.1 算法的定义及特性,1.什么是算法?算法如数字、计算一样,是一个基本概念。算法是解一确定类问题的任意一种特殊的方法。在计算机科
8、学中,算法是使用计算机解一类问题的精确、有效方法的代名词;算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。,对算法概念的理解算法由运算组成 算术运算、逻辑运算、关系运算、赋值运算、过程调用算法有其特殊性 解决不同问题的算法是不相同的,有没有一个万能的算法?算法是有穷的计算过程 静态上:规则/运算/语句的数量有穷 动态上:计算过程/计算时间有限,我们已经接触过的算法:分类(排序)算法:将已知的n个元素按照关键值大小的非增/非降顺序重新排列。如:冒泡排序、插入排序、归并排序 查找算法:从已知的元素集合中找出满足要求的一个或一组元素。如:顺序查找、二分查找、第k小元素 如果从n个元素
9、里找最小元素该怎么做,如 果需要多次查找,我们又该怎么做?图算法:在已知的图中找出满足某些性质的结点或边。如:最短路径算法、最小成本生成树,思考:,我们学会了解决一个个具体问题的算法,那么在这些算法的设计中有没有一些共性的东西?有没有可以总结出来的规律、规则和方法?这些规律、规则和方法对于其它算法的设计有没有指导意义?能不能找到算法设计的一般策略、方法和技术?,算法:求解问题的一组规则检索问题 分治策略排序问题 贪心策略 路径问题 规则的设计 设计策略 动态规划 最优化问题 检索遍历问题 回溯 分枝限界.,发现,指导,形成算法,产生算法设计的指导思想和基本规律,较高的算法设计能力不仅在于简单使
10、用一些具体的算法,更在于对算法设计方法的掌握上。只有深入理解算法设计的策略、技术和方法,才能在面对新问题时创造出新的算法。算法学习要做到:深入理解算法设计的一般规律、技术和方法灵活运用现有的算法解决实际问题在改造客观世界的过程中,运用学到的知识创造新的算法,解决新的问题,2.算法的五个重要特性,确定性、能行性、输入、输出、有穷性,1)确定性:算法使用的每种运算必须要有确切的定义,不能有二义性。例:不符合确定性的运算5/0 将6或7与x相加,2)能行性 算法中有待实现的运算都是基本的运算,原理上每种运算都能由人用纸和笔在“有限”的时间内完成。例:整数的算术运算是“能行”的 实数的算术运算可能是“
11、不能行”的,如何认识算法的确定性和能行性?,确定性和能行性是算法设计过程可能存在的问题。一个实际的程序设计语言定义了该语言中可以使用的数据类型和能够参与的运算,编译器可以对程序中的非法运算检错。非确定、非能行的“臆造”运算是不能存在的,程序的正确性主要在于逻辑正确对正确的输入能给出正确的结果但理论上的算法正确性还是要有全面考虑的。,3)输入 每个算法有0个或多个输入。这些输入是在算法开始之前给出的量,取自于特定的对象集合定义域4)输出 一个算法产生一个或多个输出,这些输出是同输入有某种特定关系的量。,算法的状态转换,算法:一个定义好的计算,把特定的输入转换 成需要的输出。,算法的状态转换(续)
12、,状态:算法/程序中一组变量的当前值称为算 法/程序的当前状态。算法:状态转换器,把算法输入时的初始状态 转换为输出时的终止状态,5)有穷性 一个算法总是在执行了有穷步的运算之后终止。,计算过程:满足确定性、能行性、输入、输出,但不一定满足有穷性的一组规则。算法和计算过程的关系:计算过程:操作系统(不终止的运行过程)算法是“可以终止的计算过程”,时效性:实际问题往往都有时间要求。例:国际象棋(启发)数值天气预报 只有在要求的时间内解决问题才是有意义的。,基于算法的时效性,只有把在相当有穷步内终止的算法投入到计算机上运行才是实际可行的。何为“相当有穷”?通过算法分析,了解算法速度,给出算法计算时
13、间的一个精确的描述,以衡量算法的执行速度,选择合适的算法解决问题。注:算法分析还包括空间分析。,与算法学习相关的内容,五个方面:设计、表示、证明、分析、测试,1)设计:构思算法的处理规则,创造性的活动。2)表示:用某种方式把算法描述出来。“类语言”(SPARKS语言)、实际语言、流程图3)证明:证明算法的正确性。正 确 性:对合法输入能得出正确的答案。算法证明:证明算法是正确性,与语言无关 程序证明:证明程序是正确性,不仅思路正确,而且 书写也要正确。,与算法学习相关的内容(续),4)分析:对算法的时、空特性做定性、定量分析,以了解算法的性质。5)测试:将算法变成程序,放到计算机上运行,观察运
14、行情况 编程中的调试:排错过程。E.Dijkstra的名言:“调试只能指出有错误,而不能指出它们不存在错误”运行中的测试:分析过程。作时空分布图,验证分析结论,进一步优化算法设计。本课程集中于学习算法的设计与分析。通过学习,掌握计算机算法设计和分析基本策略与方法,为设计更复杂、更有效的算法奠定基础,1.2 分析算法基础,从一个例子开始讲起:插入分类插入分类算法描述:输入:n个元素存放在数组A中:A1An输出:数组A中的元素A1An按照从小到大的顺序排列设计思路:1.将第一个元素(A1)看作只有一个元素的有序子序列;2.置循环 i=2 to n,将Ai插入到由A1Ai-1元素组成的有序子序列中去
15、。思考问题:上述设计思路对吗?如何实现?,SPARKS语言算法描述:procedure INSERTIONSORT(A,n)A(0)-/A0做监视哨(什么叫监视哨?)for i2 to n do/从第二个元素开始循环 itemA(i);/将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
16、-A0做监视哨 for i2 to n 从第二个元素开始循环 do itemAi 将Ai放到临时变量item中 ji-1 从后往前查找当前元素的插入位置 while itemAj do Aj+1Aj 比item大的元素往后移一位 jj-1;继续往前查找 A(j+1)item;将item插入到正确的位置上,针对上述算法,进一步思考:这个算法的描述正确吗?能行、确定、输入、输出、有穷?正确性证明运算得快吗?时间复杂度分析使用了多少内存?空间复杂度分析进一步我们需要回答:它能够应用到那些领域?对算法的进一步分析 利用不同语言实现需要那些技巧?实现,1.分析算法的目的,算法选择的需要:对同一个问题可以
17、设计不同的算法,不同的算法对时间和空间需求是不同的,我们需要选择合适的算法 算法优化的需要:进一步改进算法,使其工作的更好 分析算法的目的在于:通过对算法的分析了解算法的性能,1)可以在解决同一问题的不同算法之间比较性能的好坏,从而运行好的算法,改进差的算法,避免无益的人力和物力浪费。2)可以对算法的性质作深入了解,从而可以进一步优化算法,让其更好地工作。,2.重要的假设和约定,1)计算机模型的假设计算机形式理论模型:有限状态自动机、Turing机通用的顺序计算机模型:单CPU串行算法有足够的“内存”,并能在固定的时间内存取 数据单元 RAMrandom-access machine 区分计算
18、机的理论模型与实际的计算机,2)计算的约定,算法的执行时间是算法中所有运算执行时间的总和,可以表示为:算法的执行时间=其中,fi:是运算i的执行次数,称为该运算的频率计数 仅与算法的控制流程有关,与实际使用的 计算机硬件和编制程序的语言无关。ti:是运算i在实际的计算机上每执行一次所用的时间 与程序设计语言和计算机硬件有关。如何确定算法使用了何种运算,每种运算的fi和ti又是多少?,运算的分类,依照运算的时间特性,将运算分为时间囿界于常数的运算和时间非囿界于常数的运算。囿界:限于.时间囿界于常数的运算:基本算术运算,如整数、浮点数的加、减、乘、除 字符运算、赋值运算、过程调用等 特点:执行时间
19、是固定量,与具体的操作数无关。例:1+1=2 vs 10000+10000=20000 100*100=10000 vs 10000*10000=100000000 CALL INSERTIONSORT,更一般的情况,设有n种运算c1,c2,cn,它们的执行时间分别是t1,t2,tn。令t0=max(t1,t2,tn),则每种运算执行一次的时间都可以用t0进行限界(上界)。视t0为一个单位时间,则这些运算“理论”上都可视为仅花一个固定的单位时间t0即可完成的运算 称具有这种性质的运算为时间囿界于常数的运算。,运算的分类(续),时间非囿界于常数的运算:字符串操作:与字符串中字符的数量成正比 例:
20、字符串的比较运算(strcmp)记录操作:与记录的属性数、属性类型等有关 特点:运算时间与操作数相关,每次执行的时间是一个不定的量。,怎么分析时间非囿界于常数的运算?这类运算通常是由更基本的运算组成的。而这些基本运算是时间囿界于常数的运算。如:字符串的比较运算是由一组字符比较运算组成的。非囿界于常数的运算的一次执行时间是其包含的所有基本运算的执行时间之和:如:字符串比较时间tstring tstring=Length(String)*tchar 故:分析非时间囿界于常数的运算时,将其分解成若干时间囿界于常数的运算即可。,3)工作数据集的选择,算法的执行情况与输入数据有关,体现在:算法的执行时间
21、与输入的数据规模相关,一般 规模越大,执行时间越长。在不同的数据配置上,同一算法有不同的执行 情况,可分为最好、最坏和平均等情况讨论。编制不同的数据配置,分析算法的最好、最坏、平均工作情况是算法分析的一项重要工作。如插入排序的最好(O(n))、最坏(O(n2)工作情况。,注:编制测试数据对算法分析与程序调试都是关键的,但目的不同。算法分析数据集:反映算法的典型执行情况(最好、最坏、平均)调试程序数据集:排错。力求走到程序设计的每个分支,验证各种情况下程序执行的正确性。,3.如何进行算法分析?,对算法的全面分析将分两个阶段进行:事前分析和事后测试(理论分析和程序测试)。事前分析:求算法时间/空间
22、复杂度的限界函数。限界函数通常是关于问题规模n的特征函数,被表示成、或的形式。如归并排序的O(nlogn)。特征函数是通过分析算法的控制逻辑得来的,是对算法所用运算执行次数的统计结果。与使用的程序设计语言和计算机硬件无关。,事后测试:将算法编制成程序,放到实际的计算机上运行,收集程序的执行时间和空间占用等统计资料,然后进行分析判断。事后测试与物理实现直接有关。算法分析主要集中于与物理实现无关的事前分析阶段获取算法的理论时间/空间复杂度。,1)事前分析,目标:获取算法的时间(空间)复杂度函数,在理论上分析算法性能的好坏。可以分为时间、空间两个方面:时间分析:了解算法中使用了那些运算(具有单位执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 基础
链接地址:https://www.31ppt.com/p-2935571.html