提起算法,大家肯定都不陌生,从学生时代的「算法与数据结构」到工作之后了解到的「算法工程师」、「人工智能」、「数据挖掘」,那些 链表、栈、队列、图、字符串不仅仅是找工作的时候的刚需,也给我们打开了新的世界,一番绞尽脑汁的学习之后,不得不发自内心的感慨:算法的世界真神奇。
然而,学生时代考完试之后,算法久了不用也忘了许多,找工作的时候,面试时说得头头是道,真正的工作场景中好像又很少用到,这不仅让人产生疑惑:算法到底学不学,学了用处有多大?
程序员必须会算法?
程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点。很多人觉得像人工智能、数据搜索与挖掘这样高薪的工作才用得上算法,觉得算法深不可测。但是这些其实都不是具体的算法,而是一系列算法的集合。
算法是永无尽头的马路,有的人沿着这条路看见了美丽的风景;有的人靠着它走到了理想的目的地,还有的人想要参与到马路的修建中,为它拓展更多的方向。但是不管你想成为什么样的人,你学会了它,你便有机会成为任何一种人。
当然,我们也都清楚,算法之路,「路漫漫,其修远兮」 ,对初学者来说,可以根据几个问题评估自己现阶段是否适合学习算法:
学习算法最重要的是什么?
在学习算法的过程中,一能解决问题,二对自己有用,是最大的推动力。最好能通过工作中应用的一些案例来切入,利用碎片化时间入门算法,提升技术竞争力。有了兴趣之后就可以尝试将算法尽可能的优化,并套用到一个完整的项目中。
“学习算法很难”,怎样降低难度?
从基础来讲,要学习算法,至少要非常熟练地掌握一种排序算法,各种线性表的插入、删除算法,树的遍历和插入、删除算法,图的遍历算法等。
多学习掌握一些常见问题的解决模式,比如穷举算法如何应用,动态规划算法如何应用。最后要勤思考已经掌握并解决的算法,复盘为什么用这种方法解决,有没有其他方法,类似的问题怎么办,提高举一反三的能力。
编程和数据挖掘算法的区别与联系?
编程算法只是算法的一种表达形式,还可以用表格或流程图来表达算法。数据挖掘领域涉及的算法和其他领域算法只是问题域不同。数据挖掘和机器学习常用的方法,比如决策树、贝叶斯学习、神经网络、遗传算法等,在其他领域也有应用。
在人工智能领域或各种专家系统中,决策树算法也是常用算法。各种算法在不同领域扮演不同角色,本质上没有区别,一通百通。
算法实现是否有通用思想?
人们设计各种算法的目的是解决现实问题,虽然各种算法的实现五花八门,但算法设计模式却有一些通用的方法或思想。归纳起来,这些常见的算法设计方法有迭代法、穷举搜索法、分支界限法(剪枝法)、递推法、递归法、回溯法、分治法、贪婪法和动态规划法等。
如何开始算法学习第一步?
授人以鱼不如授人以渔
曾经我们从教科书里也学过算法,不过这些大多数都是偏理论的多、偏应用的少,很多读者啃完后,对各种排序、搜索、遍历等常用算法了如指掌,但是到了实际的场景里还是束手无策。这其实就是经验和方法集的问题,今天推荐的这个课程不仅仅停留在对一些固定经典算法的理解和记忆上,更多的是要带领大家做到:
对于部分特殊问题,要能够自己设计出算法实现;
对于原理公开的知名算法,要能将算法原理翻译成具体的算法代码;
对已有具体实现的算法,要能够设计合适的数学模型,并将算法应用到实际问题中。
公众号后台回复「算法福利」,领取限量粉丝课程优惠福利,扫描下方二维码,即可开始算法学习之路。