第1章算法设计基本方法.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第1章算法设计基本方法

算法设计基本方法(1);算法设计基本方法(2);归纳法;算法设计基本方法(3);递推;例:计算;考察第n步的误差;取;考察反推一步的误差:;算法设计基本方法(4); 例:斐波那契(Fibonacci)序列: F0 = F1 = 1 Fi = Fi-1 + Fi-2 (i1) 算法 求斐波那契数 int F(n) { //返回第n个斐波那契数// int n; if (n= 1) return(1); else return F(n-1) + F(n-2); } 算法效率:对F(n-1) 、F(n-2)存在大量的重复计算 改 进:保存中间结果;例 :欧几里得算法 已知两个非负整数a和b,且a>b≥0,求这两个数的最大公因数。 辗转相除法:若b=0,则a和b的最大公因数等于a;若b>0,则a和b的最大公因数等于b和用b除a的余数的最大公因数。 算法 求最大公因数 GCD(int a,int b) // 约定ab // { if (b==0) return(a); else return (GCD(b,a % b)); } 例: GCD(22,8) = GCD(8,6) = GCD(6,2) = GCD(2,0) = 2;;递归;算法设计基本方法(5);例 二分检索 二分检索:每次选取中间元素的下标;例:设A(1:9)=(-15,-6,0,7,9,23,54,82,101) 在A中检索x=101,-14,82。执行轨迹见下表1;递推减半技术;算法设计基本方法(6);算法分析;算法分析;时间复杂度(1);时间复杂度(2);平均性态分析:;如何进行算法分析? 对算法进行全面分析,可分两个阶段进行: 事前分析:求算法的一个时间/空间限界函数,即通过对算 法的“理论”分析,得出关于算法时间和空间特性 的特征函数(Ο、Ω)——与计算机物理软硬 件没有直接关系。 事后测试:将算法编制成程序后实际放到计算机上运行, 收集其执行时间和空间占用等统计资料,进行 分析判断——直接与物理实现有关。;1)事前分析 目的:试图得出关于算法特性的一种形式描 述(限界函数),以“理论上”衡量算法的“好坏”。 如何给出反映算法特性的描述? 统计算法中各种运算的执行情况,包括: 引用了哪些运算 每种运算被执行的次数 该种运算执行一次所花费的时间等。 算法的执行时间=∑fi*ti;工作量 工作量:算法中语句或运算的执行次数。 例: x=x+y for (i=0;in;i++) for (i=0;in;i++) x = x + y for (j=0;jn;j++) x = x +y (a) (b) (c) 分析: (a): x=x+y执行了1次 (b): x=x+y执行了n次 (c): x=x+y执行了n2次 ; 限界函数的表示 就计算时间而言,事前分析阶段求得算法在工作量 上的算法规模n的函数称为限界函数,记为: g(n) 限界函数以算法中主要运算单元为基本运算统计运算次数的数量级 ★ g(n)的一般形式:关于n的简单函数式 g(n)用以限界,因此只采用所得到计算次数的最高次项表示:随着n(规模)的增大,多项式函数式的最高次项的变化能够最显著的反映整个多

文档评论(0)

shaoye348 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档