算法的乐趣1.3 算法的乐趣在哪里_算法的乐趣1.3 算法的乐趣在哪里试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 算法的乐趣 > 1.3 算法的乐趣在哪里

算法的乐趣——1.3 算法的乐趣在哪里

算法有很多种存在形式,编写计算机程序只是其中一种,是程序员惯用的方式,本书要介绍的内容就是如何以计算机程序的方式研究算法。1.2节介绍的两个例子都是我亲身经历过的事情,程序员在大部分时间里都是处理一些平凡而琐碎的程序,但有时候也需要做一些创造性的工作。记住,程序员就是计算机的“上帝”,计算机能解决问题是因为它的“上帝”告诉它怎么做。那么,当问题来临的时候,“上帝”是到各种论坛上发帖子求代码,还是自己解决问题? 如果要自己解决问题,应该如何解决问题?为什么要自己解决问题?先来回答第一个问题——如何设计算法解决问题?人类解决问题的方式是当遇到一个问题时,首先从大脑中搜索已有的知识和经验,寻找它们之间具有关联的地方,将一个未知问题做适当的转换,转化成一个或多个已知问题进行求解,最后综合起来得到原始问题的解决方案。编写计算机程序实现算法,让计算机帮我们解决问题的过程也不例外,也需要一定的知识和经验。为了让计算机帮我们解决问题,就要设计计算机能理解的算法程序。而设计算法程序的第一步就是要让计算机理解问题是什么。这就需要建立现实问题的数学模型。建模过程就是一个对现实问题的抽象过程,运用逻辑思维能力,抓住问题的主要因素,忽略次要因素。建立数学模型之后,第二个要考虑的问题就是输入输出问题,输入就是将自然语言或人类能够理解的其他表达方式描述的问题转换为数学模型中的数据,输出就是将数学模型中表达的运算结果转换成自然语言或人类能够理解的其他表达方式。最后就是算法的设计,其实就是设计一套对数学模型中的数据的操作和转换步骤,使其能演化出最终的结果。 数学模型、输入输出方法和算法步骤是编写计算机算法程序的三大关键因素。对于非常复杂的问题,建立数学模型是非常难的事情,比如天文物理学家研究的“宇宙大爆炸”模型,再比如热力学研究的复杂几何体冷却模型,等等。不过,这不是本书探讨的范围,程序员遇到的问题更多的不是这种复杂的理论问题,而是软件开发过程中常用和常见的问题,这些问题简单,但并不枯燥乏味。对于简单的计算机算法而言,建立数学模型实际上就是设计合适的数据结构的问题。这又引出了前面提到的话题,数据结构在算法设计过程中扮演着非常重要的角色。输入输出方式和算法步骤设计都是基于相应的数据结构设计的,相应的数据结构要能很方便地将原始问题转换成数据结构中的各个属性,也要能很方便地将数据结构中的结果以人们能够理解的方式输出,同时,也要为算法转换过程中各个步骤的演化提供最便利的支持。使用线性表还是关联结构,使用树还是图,都是在设计输入输出和算法步骤时就要考虑的问题。 为什么要自己解决问题?爱因斯坦说过:“兴趣是最好的老师。”这就是说,只要一个人对某事物产生兴趣,就会主动去学习、去研究,并在学习和研究的过程中产生愉快的情绪。我把从算法中体会到的乐趣分成三个层次:初级层次是找到特定的算法解决特定的实际问题,这种乐趣是解决问题后的成就感;中级层次是有些算法本身就是充满乐趣的,搞明白这种算法的原理并写出算法的程序代码,能为自己今后的工作带来便利;高级层次是自己设计算法解决问题,让其他人可以利用你的算法享受到初级层次的乐趣。有时候问题可能是别人没有遇到过的,没有已知的解法,这种情况下只能自己解决问题。这是本书一直强调算法的乐趣的原因。只有体会到乐趣,才有动力去学习和研究,而这种学习和研究的结果是为自己带来正向的激励,为今后的工作带来便利。回想一下1.2.1节的例子,环形队列相关的算法是固定长度缓冲区读写的常用模式,如果知道这一点,就不会有这种问题了。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《算法的乐趣》其他试读目录

• 1.1 什么是算法
• 1.2 程序员必须要会算法吗
• 1.3 算法的乐趣在哪里 [当前]
• 1.4 算法与代码
• 1.5 总结
• 7.1 稳定匹配问题
• 7.2 Gale-Shapley算法的应用实例
• 7.3 有多少稳定匹配
• 7.4 二部图与二分匹配
• 7.5 总结
• 7.6 参考资料
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •