找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5836|回复: 0

学算法的三重境界

[复制链接]
发表于 2012-2-17 13:38:12 | 显示全部楼层 |阅读模式
引言    佛曰:人生将经历三种境界,为:看山是山,看山不是山,看山还是山。学算法也有三重境界,入门:了解常用的算法思想,并能适当的加以应用;深入:能演算和论证算法的正确性,清楚其原理或来龙去脉,同时,能在已有的经典算法的基础之上,提出自己的观点并加以改进相关算法;创造:发现已有的算法太过粗糙无法满足实际应用需求,从而创造和开发出一种新的算法。
学算法的三重境界    下面,简略一一描述如下:


  • 入门
    入门的含义为:能了解常用的算法思想,并能适当的加以应用。你首先通透各种基本的数据结构,如数组,链表,队列,堆,树(二叉树,红黑树,B树),图,及在相关数据结构的基础之上应用的各种经典算法,如最常用的各种排序算法(插入,快速,归并等),字符串匹配算法(KMP等),回溯,贪心,动态规划等等。做到这一步,并不难,只要你对算法有着浓厚的兴趣,加以努力,平时看看数据结构的教材,及算法导论,编程珠玑之类的便可达到。大致花一两年时间内可以做到。
    在此,引用回答一读者的问题来列一些算法学习参考的书:除去随便一本数据结构的教材,算法导论(通读完此本便已进入算法的世界),编程珠玑外,智能web算法,集体智慧编程...还有很多机器学习,数据挖掘,信息检索方面的书籍可供参考,因为这些领域涉及到很多真枪实战的算法。但所有这些书上有的只是理论,循着自己的兴趣,多多编程实践学的效果会更好。

  • 深入
    算法的第二重境界为:能演算和论证算法的正确性,清楚其原理或来龙去脉,达到这一步必须要有一定的数学基础或背景,我们都知道数学是一切学科的基础,同样,数学功底往往也能决定一个人的算法水平。我们在看算法导论时,看着那些证明,或许自己觉得一切理所当然,可要你独自去论证其正确性,可一般人都会就此止步。况且,正如一个P与NP问题一样,已经知道了一个定理,证明这个定理并不难,但要你抛开一切。从头开始挖掘其来由或来龙去脉,则由一定难度了。
    同时,能在已有的经典算法的基础之上,提出自己的观点并加以改进相关算法。在进入到本层境界后,算法基本已经彻底搞懂了,但那毕竟是先人早已发明的东西,不是你自己的成果,你需要在已有的算法基础上,提出自己的改进和改造的独立性观点。
     他们往往是ACM大赛的佼佼者,或者各研究院或各大公司的科学家或纯算法研究员。当你有了自己的独立思想后,恭喜你,你已经走到了算法学习的第二重境界(大致花两三年时间可以做到,有很强数学背景的则可以缩短),但离第三层境界还很远。

  • 创造
    模仿和山寨别人总是一件并不难的事,也是大多数人乐意做的事情。算法的第三重境界,创造往往才是深入学习算法的根本:发现已有的算法太过粗糙无法满足实际应用需求,从而创造和开发出一种新的算法。达到这一级别的往往被称之为大师级别的任务,如Don E. Knuth(TAOCP巨作作者),Edsger Wybe Dijkstra(Dijkstra发明者),Jon Bentley(编程珠玑作者)等等。达到这一级别可能需要花十年可能甚至一生的时间。

总结    大多数人会走到第一重境界,而且根据国内的需求,往往做到这一步也就足够了,有少部分的人能做到第二级别,这类人往往是有着数学背景的专业人士,或者博士研究者,普通人凭借着极致的疯狂或兴趣也能做到这一点,但必须付出一点的代价。最高级别创造,则绝大部人会望之兴叹,但还不至于是可望不可即之地,在疯狂者的眼里,没有什么是达不到到不了的,你只需要一颗足够疯狂的心。
    可能会有读者疑问,算法学习者真的除了上面三种境界三种角色,便不再有其它的了么。NO,还有一层境界:失足青年,他们学算法没有什么目的,也不图从中索取什么,一切纯粹从兴趣出发,跟一般的发烧友没什么区别,在他们看来,一切随风,山还是那个山,水还是那个水,只是一不小心,便失足跌进水里了。就像下面那个少年:



    完。



作者:v_JULY_v 发表于2012-2-17 11:26:59 原文链接

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-29 20:07 , Processed in 0.012455 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表