- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第一章 绪论2.24
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 算法的重要性举例(续) 问题:百元买百笔。钢笔3元一支,圆珠笔2元一支,铅笔5角一支。给出解决方案。 方案3: for( i = 0; i = 20; i++) for( j = 0; j = 34-i; j++) if(3*i+2*j+(100-i-j)*0.5==100) printf(i:%d j:%d k:%d,i,j,(100-i-j)); if语句执行525次,与方案1相比,相差1500倍。 * 提高算法的效率 首先要提醒大家,不要一味地追求算法的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高算法的效率。 看两组操作:(1) a=a+b; b=a-b; a=a-b; (2) t=a; a=b; b=t; 两组操作的功能都是:交换变量a、b中的数据。虽然第一组操作节省了一个存储空间,但失去了可读性,是不可取的。 * 下面给出一些原则上的建议: 1.保证正确性、可靠性、健壮性、可读性; 1)当心那些视觉上不易分辨的操作符发生书写错误。 2)算法中的变量(指针、数组)在当成右值使用(被引用)前,一定要有确切的含义,或是被赋值或是经模块接口传递信息。 3)算法中要当心变量发生上溢或下溢,数组的下标越界。 4)写算法时要考虑可能出现错误的情况,提示执行错误处理算法。 5)编写算法时区别问题的循环条件和停止条件,不要误用。 6)注意算法中循环体,或条件体的内容,不要误把循环体内的操作写互循环体外或者出现相反的错误。 * 2.提高效率。 1)以提高算法的全局效率为主,提高局部效率为辅。 2)在优化算法的效率时,应当先找出限制效率的瓶颈。 3)多数情况下,时间效率和空间效率可能不对立,此时应当分析哪个更重要,作出适当的折衷。 4)可以考虑先选取合适的数据结构,再优化算法。 5)递归过程的实现决定了递归算法的效率往往很低,费时和费内存空间。在解决问题时,如果能使用递推法解决的,应考虑用递推法,其效率更高些。 6)注意多用数学方法,可以大大提高算法效率。如:乘、除运算的效率比加、减法运算低。 * 理解什么是算法;算法特性; 理解问题求解的步骤及算法在其中的重要地位; 理解算法的计算复杂性概念; 掌握算法复杂度分析的一般方法和数学表示; 学会算法设计基本技巧; 学会对算法进行分析。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * 其中: 同一个算法在不同的语言、编译程序和硬件的条件下,执行时间是不同的 评价算法的优劣应当排除这三者的影响 比如:算法A在硬件A上执行时间为1秒,算法B在硬件B上执行时间为2秒,并不能因此就认为算法A的效率更高(事后统计法-利用计算机的时钟(不可取)) 因此只需要考虑算法本身和问题的规模(事前分析估算法) * 一个程序在计算机中运行时间的多少与诸多因素有关,其中主要有: 1.问题的规模。 2.编译程序功能的强弱以及所产生的机器代码质量的优劣。 3.机器执行一条指令的时间长短。 4.程序中那些关键语句的执行次数。 重点 几乎所有算法的时间效率都与问题的规模有关 对算法运行时间贡献最大的语句 * 算法效率 特定算法运行工作量的大小只依赖于问题的规模(通常用整数n表示),或者说是问题规模的函数。 算法主要由程序的控制结构(顺序,分支,循环)和原操作(必须的操作)构成,算法的时间主要取决于两者。 算法度量:选取一种对于研究问题来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间度量。(其中程序的主要执行时间在:循环上。) 这种方法是否成功取决于识别关键操作的能力,这些关键操作对时间复杂性的影响最大。 * 以语句执行的次数的多少作为算法的时间量度的分析方法称为频度统计法。 一条语句的频度是指该语句被执行的次数,而整个算法的频度是指算法中所有语句的频度之和。 * * 关于符号O的定义 当n→∞时,有f(n)/g(n)=常数≠0,则称函数f(n)与g(n)同阶,或者说,f(n)与g(n)同一数量级,记作f(n)=O(g(n)),称该式子为算法的时间复杂度,或称该算法的时间复杂度为O(g(n))。其中,n为问题的规模(大小)的量度。 当问题的
文档评论(0)