网站大量收购独家精品文档,联系QQ:2885784924

程序设计中常用的计算思知维方式.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序设计中常用的计算思知维方式

程序设计中常用的计算思维方式 第1章 正确认识和处理整体与部分的关系 概述: “整体”与“部分”是一对虽然对立、但并非僵化不变的概念。在一定条件下,“部分”可以看作“整体” ,“整体”又可以看作是另一个“整体”的“部分” ,两者相互依存和影响。“整体”与“部分”又可以相互转化的。“整体”的问题可以分割成“部分”来处理,“部分”的问题也可以通过“整体”来解决。 1.1 整体实现的关键是准确地应用必要条件 A、选择有助于简化问题、变难为易的必要条件 这里面就是说我们要在坚持“简化问题、变难为易”的原则下,尽力寻找“精确”的必要条件,以缩小求解范围,提高出解速度。当碰到一道难题时,总是尝试从最简单的特殊情况入手,找出有助于简化问题、变难为易的必要条件,逐渐深入,最终分析归纳出一般规律。 B、合成必要条件,从整体结构上优化 在搜索和动态规划中,必要条件有期很好的应用价值。一般地,对于深度优先搜索和广度优先搜索,如何限制搜索范围、减少搜索量最有效的手段是“剪枝” 。然而由于问题的错综复杂,所以我们要找最高效的优化条件,来提高程序的效率。所以我们可以尝试从多个侧面分析寻找必要条件,把问题分解,根据各部分的本质联系,将各方面的必要条件综合起来使用。 C、必要条件与原有模型比较、更新算法 上面所说的两种优化程序的策略其实是都是在“缩小求解范围” ,改进在有算法的基础上进行的,属于局部优化。然而精确选择揭示问题本质的必要条件,与原有的模型比较, 小结:必要条件是逻辑推到的理论依据,也是思考过程的一种取向。解题时,若能寻找出精确的必要条件,一方面能帮助我们揭示问题的本质,设计出正确的算法;另一种方面又能“缩小求解范围” ,提高算法效率。因此,准确地应用必要条件是整体实现的关键。所以我们要在坚持“具体问题具体分析”的原则,不拘一格,灵活处理;在分析问题时,要勤于思考,善于发现。 1.2 整体思考的一个重要角度是“守恒” A、从具体问题中抽象出守恒量 守恒量需要通过联想和化归思维将其抽象出来,从问题本身的结构中抽象出守恒量。 B、根据问题的本质构造守恒量 有时候,如果能为每一个元素标一个权值,就可以揭示问题“守恒”规律。在总价值不变的前提下,或许能将整个问题转化成一个简单的、或者是经典的问题。比如构造成Fibonacci数列等。 C、在交互式问题中构造变化中的不变量 考虑可能出现的各种情况和最优策略,找变化中的不变量,运用“守恒”法寻找解题的突破口 小结:守恒是问题分析问题的一种思维方式一种整体意识和解题方法,通过联想和化归思维将其抽象出来。 1.3 提高整体实现效率的基本途径是“充分利用有效信息”和“压缩冗余信息” 计算过程中充分利用有效信息: 在记忆化搜索和动态规划中充分利用信息,特别指出在动态规划中改变状态的表示含义对优化问题是个很好的策略。还有在数值计算中充分利用信息。 B.通过“压缩法”消除冗余的图形和数据信息 在图论的问题中,通过采用“缩点法” ,将具有等价意义的一类顶点压缩成一个顶点,来简化问题;还有就是压缩冗余信息。 1.4 改善整体性能状态的基础是处理好细节问题 细节是算法整体的关键部分,对整体起到“牵一发而动全身”的作用,是算法整体性能状态的基础。在程序设计中,细节的处理十分重要,应该对其取“举轻若重”的态度。许多事例证明:有时细节决定成败。 按照对算法的影响的性质和程度,可把细节分为如下几种情况: 1、影响正确性的细节问题。在解题过程中虽然已经找到解决方法却不能通过全部测试数据,往往就是这类 的细节处理不当所致。 2、严重影响时间复杂度的细节。这类细节相当隐蔽,往往不为人所注意。但是这种细节影响时间复杂度的 阶,处理得好与不好往往会使程序的时间效率有质的区别。 3、轻微影响复杂度的细节。这类细节问题对时间复杂度没有根本性影响,仅仅对时间复杂度的系数有影响。 1.4.1 必须解决导致错误结果的细节问题 虽然已经找到正确的解法,但在程序实现的过程中,由于疏于细节而导致“功亏一篑”的事比比皆是,这种细节问题对整体的危害性最大。 常见的错误类型 类型1:语法错误 类型2:书写错误 类型3:输入输出格式的错误 类型4:数据范围的错误 类型5:变量未初始化的错误 类型6:中间运算越界 类型7:局部变量与全局变量同名造成概念混乱 类型8:if – Then – Else 语句混乱。 类型 9: 实数比较出错。在比较两个实数是否相等时,如果直接用等号,往往会造成错误。这是浮点去得存在精度误差所造成的。 解决办法是使用两数差的绝对值与一个相对极小量进行比较,例如,如果abs(a-b)1e-8,则可认为 a == b。 在程序运行的过程中跟踪

文档评论(0)

181****7523 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档