首页 > 代码库 > 算法战略

算法战略

由于自己本科的时候,学习的是网络工程专业,更加侧重路由、交换等相关网络知识。并且仅开设了“数据结构”,而没有开设“算法设计与分析”。那时候自己虽然知道算法非常的重要,但是对算法的认识很肤浅,仅仅停留在了算法的表面,并且也一直没有找到适合自己的学习方法。其实,很重的一点儿就是对算法的认识不足,并且还没有需求驱动。自己第一次认识到算法重要性是在自己大三的时候,我们去参加了“河南省第五届ACM程序设计大赛”。结果不用说也可以想象到,失败的一塌糊涂,一道题目都没有做出来。当然,这次失败有主观因素,也有客观因素,但是,失败最重要的原因是我们几乎全是裸考,没有做任何的准备工作。一方面原因是我们学校没有足够的重视,另一方面的原因是我们自己当时根本就没有ACM的概念,没有做足功课,最终导致失败。下面是当时自己失败后的总结原文。

第五届ACM程序设计大赛总结(2012-5-13 23:23)

我是一个尤其特别憎恨失败的人,为了不再失败,我必须容忍失败,埋头苦干,不断学习,不断提高自身综合实力,敢于面对,迎难而上。
                                                                                                                              ——题记
第五届ACM程序设计竞赛的确失败了,失败的很惨,一道题也没有做出来,全军覆没,真是兵败如山倒。自己也不需要找太多的客观原因,还是从自身找原因吧,失败的本质原因是自己上机编程的时间太少了,练习量远远没有达到。郑州轻工业学院这次是失败了,希望自己通过一年时间的练习,使自己在南阳理工学院第六届ACM程序设计大赛中取胜,灭了郑大队。
胜兵先胜而后求战,败兵先战而后求胜,自己必须先通过学习增强自身实力,使自己处于不败之地,牢固地树立起“先为不可胜”的思想。以后自己的学习侧重于英语化,数学化,程序化和网络化。
1、英语化
英语是自己的第二语言,随着世界经济的大融合,英语在商务沟通与交流中扮演着日益重要的作用。自己的专业是计算机,以后需要看很多的英语文献,自己也正在考研,也需要把英语学好,因此精通英语非常必要。自己英语的学习主要是大量的读,大量的听。(牛津高阶英汉双解词典)
2、数学化
数学是计算机的灵魂,重要性更是不言而喻。计算机专业主要学习离散数学,包括逻辑,集合,代数,数论,图论,组合六个部分,自己必须研读《离散数学》。
3、程序化
计算机专业的人首先必须是一个编程高手,我一直都是这样认为的,并且以后还将这样认为。这次失败就是因为算法,自己学艺不精。计算机这个学科的性质就决定了没有实践,理论几乎没法理解得扎实透彻,以前自己把大量的时间都用在了理论上面,今后自己将增加上机编程的时间。自己的编程以C为载体来练习算法,要学习的算法书籍依次为《数据结构》,《算法分析与设计》,《算法导论》。
4、网络化
自己的专业就是网络工程,并且以后自己继续学习网络安全,而协议则是网络的灵魂,自己必须研读《TCP/IP详解》,能够将常用的基础性知识熟记成诵,提到一个基本的名词或话题能够将其来龙去脉解释清楚,真真正正,透透彻彻的理解网络原理,杜绝是是而非,模棱两可。其实,网络的学习异常的繁琐,知识不难但是很多,需要积累,更需要实践,这是一个长期的过程。
学习计算机专业需要大量的时间,需要付出大量的精力,也需要极大的耐心。如果你一天只工作八小时,那你就不配做IT。世界上不会有孤独的高手,却有一堆没人要的半吊子。天赋不是问题,差距也不是问题,只要你肯努力,只要你够认真,只要你愿坚持,那么实现你的梦想只是时间问题。
如果一次也不回头,我能走到哪里呢?

上面是自己失败后,在郑州轻工业学院的留影。虽然事情已经整整的过去两年了,但是每当想起,心里还很不是滋味。在后来的一年里,自己的时间基本上全部用在了研究生考试上面,所以后来就再也没有参加过任何的算法竞赛。真的非常的遗憾,但是,凡走过必留下痕迹。年轻的时候,要大胆地去尝试,要大胆地去经历,不要害怕失败。即时失败了,也能收获颇多,要不断经历,不断总结,不断进步。

正是这次失败,唤醒了自己对算法的认识,最重要的是自己不再认为算法是一种很神秘的东西,相信只要经过训练,自己也能够做到很好。

第二次认识到算法重要是在自己研究生复试的时候,一般好的学校在研究生复试的时候都会有上机考试的。然后,自己的大学生活基本上就结束了,也不断听到去面试的同学说道算法的重要性,尤其是大的公司。

第三次认识到算法重要是在自己研究生的时候,由于自己的方向是做大数据推荐算法的。当你在处理海量数据的时候,你就会明显的感觉到一种叫做时间的东西,算法效率的高低这时就至关的重要了。

自从那次失败到现在已经整整两年了,自己对算法的认识也在不断的变化,尤其是将复杂的机器学习技术应用于解决大规模问题的时候,算法的重要性就会显现出来。

下面是自己看过的以及要看的算法书籍:

数据结构,如下所示:

  • 《数据结构(C语言版)》[已学]
  • 《算法结构(习题集)》[半学]
  • 《数据结构算法解析》[正学]
  • 《数据结构与算法分析——C语言描述》[正学]

算法书籍,如下所示:

  • 《算法设计与分析基础》[正学]
  • 《算法导论》[正学]
  • 《计算机程序设计的艺术》[要学]

数据算法,如下所示:

  • 《机器学习实战》[正学]
  • 《Mahout实战》[正学]

也许是由于那次失败的原因吧,自己一直对ACM念念不忘,每当有空的时候,就会看些信息竞赛方面的书籍,并且在http://poj.org/刷题,以打法无聊的多余的时间。在学习算法的过程中,肯定会涉及到很多的数学知识,这正是自己进步的空间。如果有一天,你发现自己能够用数学模型来分析这个世界了,那么你的数学思维基本上也就入门了。题一道一道做,路一步一步走。路虽远,行则必至,事虽难,做则必成。