算法的概念

问题

 

算法是什么?第一次接触到这个概念是10年前上大一的时候,《数据结构》这门课程首先遇到的。书上说,算法是一个用来解决一个良定义计算问题的工具。那么经历了这么多年程序员的生活,回头再想一想,算法到底是什么呢?

 

首先,算法是用来解决问题的,所以,我们要仔细思考一下什么是问题?个人的一点遇见认为,问题来自各个领域。农民有种地的问题,工人有领工资的问题,那么计算机算法研究的问题,主要是计算机领域要碰到的问题。所以,这个问题就离不开“冯.诺依曼”体系。这个体系将计算系统分定义成了计算-控制-存储-输入/输出,那么算法要解决的问题,就是整个体系中输入和输出之间的关系。

 

这个说法太抽象,就像我们面向对象技术中类的概念,如果不将他实例化,那么这个抽象的概念就会一无是处,所以我们还是举一个例子来说明吧。若干年前,我曾经碰到一个项目,领导要求我实现该项目《需求说明书》中的排序算法,即将登记公司发布的各家上市公司资产负债表中若干个表项进行排序并打印在界面上。那么这就是问题了,因为需求说明书中定义了一个输入和输出之间的关系,输入若干上市公司的若干资产负债表,输入表项。这个关系就是按指定金额排好序。

 

这就是一个问题,一个需要用算法来解决的问题。至于算法到底是什么,走到这一步,就很好解释了,算法就是给出一个可以获得该输入输出关系的计算过程。对于前面的那个例子来说,就是我给出一个解决方案来对这个金额进行排序。

 

综上所述,我们研究一个算法最重要的是什么?不是算法本身,而是问题!是需求!所以,在研究一个算法的时候,你连问题都没搞清楚,就匆忙下结论,甚至写代码,后果可想而知。特别是在做项目的时候,对一个问题产生的误解,从而在代码中就会把这个问题给放大。整个软件产品上线后,也许这个算法会导致灾难性的后果。所以我们研究算法,首先得研究问题,把一个问题弄清楚、弄透!

 

描述问题的方法很多,也需要大家在实际生活中不断总结,这里介绍一个最基本、最实用的方法 —— 建模

 

建模

 

计算机世界跟现实世界差别很大,所以,分析一个待计算机处理的问题,必须要使用一个模型将计算机与现实世界联系起来。在设计大型软件的架构架构时,我们知道,现在有种非常通用的建模语言——UML,通过各种用例图、静态图、时序图、部署图等,将一个非常复杂的问题分解成各个模块,然后使用一个成熟的框架或者设计模式来实现这些模块。

 

同样,解决一个算法对应的小问题时,也需要建模。描述一个算法问题时,不管这个问题有多复杂,总是能够通过数学模型来描述他的。所以请大家养成习惯,见到一个问题,别立即去写代码,而是用数据结构图和流程图把这个问题模拟一遍,也就是建立静态模型和动态模型来弄透这个问题的本质。如果整个流程你都走不通,你放心,写出的代码也会跑不通的。至于如何建模,这也是我们以后讨论的重点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值