为何算法如此重要


我为何要问这个问题呢?其实这最近一周时间都在看算法在数据挖掘和存储处理性能上运用. 固然这也引发我我的的一些对算法的思考.正好昨天晚上看到张洋同窗算法杂货铺——分类算法之贝叶斯网络(Bayesian networks)一篇文章.更是激发我要去写这篇文章,躺在床上一直在想这个问题怎么能清楚的说出来. 也许你看到这个标题 你也工做了几年 回过头在来看这个问题 也许一时间会感到疑惑. 算法还重要吗? html

<1>什么是算法?

咱们先不要给算法是否还重要就轻易下了一个结论. 到这我也先不着急给算法下定义作解释. 咱们如今先来看看一种现象:  哪一种语言是开发者们能够高高兴兴的用来编程的?近日,一位美国的开发者经过Twitter对开发者们进行了一项调查 :你是否喜好XX语言 调查结果分析图:java

200904141721242268511421

 

 

 

 

 

 

 

 

 

 

基本上每月都会有一些相关对语言使用程度作了一个排名. 你们业见怪不怪了. 编程语言又能体现出算法相关价值,也许你会好几种语言, 但随着工做时间增长和对技术深刻研究你会发现:  不是具体的技术而是算法这些基本的东西成为了技术深刻的软肋, 特别是在紧要关口 这个软肋每每就会更疼.git

起码我认为本身目前工做创造性东西比之前少了不少.  不少算法已经被包装到了语言和工具中, 做为一个开发者也就不想之前那样费力去学习. 而每每有些算法只适用于本语言或工具并且只能解决某些问题,移植到别的状况下则没法使用, 这也是我在开始学习Ruby后才感到算法适用范围有所不一样. 最为别扭的是你发现之前在用Asp.NET和Visua4l Studio开发工具中对于有些问题已经界定好思路. 人都是懒惰 既然有现成的东西不用 为什么要费力去创新.  这也就致使长期适用单一编程开发者视野上狭隘.  开发者很难有属于本身的思惟方式. 这就是为何有些人说本身作到必定程度后成了熟练“代码工人”也不难解释. 起码这个问题让我感到很悲哀.程序员

Ruby之父松本行弘[日本同行]就曾表示,注重的是算法而不是工具, 若是没有本身的思惟方式和编程逻辑,很容易对某种具体的技术或者工具产生依赖性, 而这些编程工具和技术每每是国外开发. 假设有一天咱们没有这些现成的工具 和技术  咱们该怎么办? 岂不是成了一贫如洗了吗?可是若是有了稳固的算法思惟 编程世界里东西都不可怕.算法

算法是一种本质的回归.数据库

今天出了JAVA 明天出了一个C#. 后天还不知道要出了一个什么 XXX¥¥语言和新技术. 因而乎你也成了那赶潮大军中一员 一路疲惫被人牵着鼻子走,  到头来你发现越深刻步伐走得越慢. 越是吃力.每每技术了解得越多、作得东西越深,这样的体会越明显, 借用一位网友的话说就是"内功”不到位. C# java Ruby 只是两个你用来练习武功的招式, “内功”则是这些花哨武功招式后本质, 招式能够不少种  若是没有 ”内功” 招式变换再多也只是表面文章 罢了. 注定你是成不了一个名副其实的”武林高手”编程

看完了这个现象后 在回头来讲算法定义. 算法(Algorithm)说白了就是是解决问题的步骤.能够把算法定义成解决一个分类问题的任意一种特殊的方法. 服务器

编程世界中 算法+数据结构=程序.网络

而数据结构每每是封装在不一样编程语言中. 求解一个给定的可计算或可解的问题,不一样的人能够编写出不一样的程序,来解决同一个问题,这里存在两个问题:一是与计算方法密切相关的算法问题;二是程序设计的技术问题。算法和程序之间存在密切的关系的. 数据结构

<2>算法还重要吗?

 算法还重要吗? 我为何要加一个“还”来形容这个问题.  上周在网上论坛有一个网友曾说过”如今数据存储技术和计算机运算速度已是很快了 这也是未来一个趋势 算法还重要?”这忽然引发我对算法重要性的兴趣,固然我也默默问本身这个问题.

其实也许咱们忽略一个问题. 从去年到今年就拿咱们行业里一个很是小地方来看看目前咱们要面对问题: 就说说Twitter从2008年开始到如今每个月要处理发送数据信息量 统计图:

0051090

 

 

 

 

 

 

 

 

 

 

 

 

美国调研公司Royal Pingdom最新统计报告代表,目前Twitter的每个月平均信息发送量正以超过10亿的速度快速增加.

天那小小的一个社交SNS社交站点从2008到如今短短两年时间 数据量增加基本是以数量级的方式来增长.这只是目前行业一个小角落. 可想而知将来信息量更会以爆炸方式增加. 而要解决这些问题咱们不只不须要好的设备. 好的技术 更 须要不少卓越的算法来解决这些问题.

说了这么多 下面说一个简单例子.例如在ArcGis地里空间信息系统中 经常会处理一个关于到导航的小问题. 问题很简单:   你想从地图的任意的A点城市 到达任意的B点城市 列出最快的达到路线 并计算最省钱的行进方式:2010-09-19_154646

 

 

 

 

 

 

 

 

 

系统设计中: 若是一会儿把全国全部上亿条道路信息依次进行逐条比对在进行计算. 反映时间太长. 若是给多个用户 服务器的压力就太大了 基本立马崩溃掉.若是咱们须要设计一个算法:

首先从全国道路信息数据库中 调出 从任意A点到任意B点所要经历省市的道路信息数据.  这就剔除一大部分没用数据信息. 缩小了咱们数据检索的范围.

这样的话仍是不行. 访问压力依然存在. 这时咱们能够把数据按照省市进行分区.处理.  用户输入数据后从任意的A点到任意的B点首先确认 是否A点到B点是否在同一个区 若是同一个区 直接在数据库中这个区域内调取数据进行计算. 至于距离最近路线算法中图论中有很好解释 .

这时问题又来: 西北和沿海地区发展速度不一. 道路信息数据沿海城市偏大 用户量偏多 出行需求量高. 西北地区道路偏少  人口稀缺 远距离出行量少等特色 再次优化算法。

对核心沿海需求量居多城市和省份 区域数据再次进行分区处理. 最顶层的是省份 下级市区 再到县级. 
方便用户点对点精确搜索和距离计算. 若是底层访问量较小 相似树形结构 向上能够延展放大搜索范围.

上面大概知足基本需求. 若是用户提出不一样交通方式 乘车/飞行/水路 并且道路也分为高速 国道 省道. 航线非为国际和区域航线. 这样的话咱们计算距离的算法就须要更加细化了. 从上面实例能够看到用户需求老是不断变化的. 一个好的算法是解决复杂问题核心关键. 可见算法在未来解决数据处理依然是不可替代的.

有人又会问.为何我平常工做中不多用到算法? 

<3>算法适用范围?

 不少人疑惑个人平常编程中不多用到算法. 我我的认为,好的算法是每一个程序都应该尽力去实现的, 也许一个程序百分之90以上被项目UI和实现业务逻辑给占据了. 可是老是有那么一部分决定你的产品核心竞争力.

为何你没有用到算法?

人们之因此说算法很重要,是由于任何的程序,任何的软件,都是由不少的算法和数据结构组成的。从这点上说算法确实很重要,可是这不意味着算法对于每一个软件设计人员的实际工做都是很重要的。其实,软件行业是能够分为算法密集型典型的好比一个搜索引擎 Cache底层,/三维场景中实时渲染算法.例如Google。天天Google的网站要处理十亿个以上的搜索,GMail要储存几千万用户的2G邮箱, Google Earth要让数十万用户同时在整个地球上遨游,并将合适的图片通过互联网提交给每一个用户。若是没有好的算法,这些应用都没法成为现实

业务逻辑密集型,典型的好比一个CRM/ERP业务系统 项目中咱们把更多的时间放到业务逻辑的实现和UI层数据呈现上 至于算法使用只有在性能受到限制或是出现性能访问瓶颈时加以算法优化。 这一般的状况,而对于基于运用实际问题 每每面临问题较多  使用算法地方也就相对偏多.

使用体验密集型,典型的好比娱乐行业Silverlight站点 注重的使用用户体验上快捷。因此并非每一个软件开发者都要求有很好的算法功底。关键是看遇到问题解决问题的能力,算法在必定程度积累思惟模式上经验.。这也是不少程序员说本身到了 30岁 在技术上创新陷入瓶颈.

每一个项目特色和需求特殊也致使算法运用场景上不一样. 有人说过算法重要,但不是最重要 这句话在某些特定运用场合时能够讲得通的 得灵活使用  

<4>最后

最后至于这个问题 算法还重要吗?不管IT行业内多么朝夕莫测、新技术 新语言层出不穷,计算机和软件发展背后的根基却岿然屹立、经年不变,算法即是基础之一. 而对于那些已经历经技术变幻开发者而言算法同是也是一种本质的回归.

22
0
(请您对文章作出评价)
« 上一篇: IE 9 Beta 测试Bug
» 下一篇: Silverlight测试——利用Ranorex实现数据驱动测试
< Prev 1 2
ADD YOUR COMMENT

  1. #51楼 白途思  2010-09-21 10:29
    收藏了楼主的帖子,今天又看了看,越看越有道理。 我也一直在思考这个问题。 之前一直觉得算法就是编程,可是后来我发现错了。 编程是个混合体,编程混合了技术、逻辑、美工、与算法。 而算法即包含逻辑,又包含专业知识。 评论不少我就不仔细看了。有个仁兄提到专业分工。 这就让我想起了WEB编程,曾经是一个使人向往的职业,如今却变成了it民工。 我一直都很强调,技术的发展只会讲壁垒将的愈来愈低。 可是,下降壁垒的人,倒是愈来愈高,这就是算法的做用。
相关文章
相关标签/搜索