如何学好数据结构与算法?这篇文章带你搞定这个难题

参考视频‘算法之神’左神带你搞定这道BAT大厂高频面试题/数据结构与算法/既需要思路又需要coding能力

为什么要学习数据结构

随着人工智能的发展,人工智能已经渗透到各个行业,算法工程师非常火爆,急缺大量人才,年薪也越来越高。刚毕业30-40万很常见,很多人都想学习算法,那究竟如何下手呢?
遇到一个实际问题,需要解决两个事情:
(1)如何将数据存储到计算机中;(2)用什么方法策略解决问题;前者是数据结构,后者是算法。只有数据结构没有算法,相当于只把数据存储到计算机中而没有有效的方法去处理,就像一幢只有框架的烂尾楼;若只有算法,没有数据结构,就像沙漠的海市蜃楼,只不过是空中楼阁罢了。
数据 是一切输入到计算机的信息总和,结构是指数据之间的关系,数据结构 就是将数据及其之间的关系有效的储存在计算机中。算法 是指对特定问题求解步骤的一种描述,数据结构和算法并不依赖于语言。
遇到一个实际问题,充分利用所学的数据结构,将数据及其之间的关系有效的储存在计算机中,然后选择合适的算法策略,并用程序高效实现。即数据结构 + 算法 = 程序
通过学习数据结构,更加准确,深刻地理解不同数据结构之间的共性和联系,学会选择和改进数据,高效地设计并实现各种算法,这才是数据结构的精髓。

数据结构的学习秘籍

会数据结构的基本操作

学会各种数据结构的基本操作,取值,查找,插入,删除等。先看图解,理解各种数据结构的定义,操作方法,然后看代码,尝试自己动手上机运行,逐渐掌握基本操作。初学时,要想理解数据结构,一定要学会画图,通过画图形象表达,更能体会其中的数据结构关系。初学阶段的利器:画图,理解,画图 。

会利用数据结构解决实际问题

掌握基础操作之后,就可以尝试利用数据结构解决一些实际问题了,先学会经典应用问题的解决方法,体会数据结构的使用方法,然后在做题,独立设计数据结构解决问题,要想熟练应用就必须大量做题,从做题中体会其中的方法。最好进行专项练习,比如线性表问题,二叉树问题,图问题。该阶段的学习利器:做题,反思,做题 。

熟练使用和改进数据结构,优化算法

最高境界,也是学习数据结构的精髓所在。单独学习数据结构是无法达到的,需要在学习算法的过程中慢慢修炼。在学习算法的同时,逐步熟练应用,改进,慢慢体会不同数据结构和算法策略的复杂性,最终学会利用数据结构改进和优化算法。该阶段已经在数据结构之上,通过在测试系统上刷各种算法题,体会利用数据结构改进优化算法。该阶段的利器:刷题,总结,刷题 。

算法的学习秘籍

多角度,对比学习

学习算法可以先阅读一本简单的入门书,然后综合几本书横向多角度看,例如学习动态规划,拿几本算法书,把动态规划这章找出来,比较学习,多角度对比分析更清晰,或许你会恍然大悟,噢,原来如此简单!

大视野,不求甚解

公式可以看不懂,代码可以不会。不必投入大量精力试图推导每一个公式,也不必探究语法细节。算法的背后可能有高深的数学模型,复杂的推理证明,理解了当然玄妙,不懂拉倒。学算法是学算法本身,首先是算法思想,解题思路,然后是算法实现。先领会算法,写伪代码,遇到不懂的部分,浏览一下或跳过去,读完了还不明白再翻翻别的书。

多交流,见贤思齐

与同学,朋友,教师或者其编程爱好者们一起学习和讨论问题,是取得进步最有效的办法,也是分享知识和快乐的途径。加入论坛交流群,会了解他人在做什么,怎么做,遇到问题可以请教高手,带来醍醐灌顶的喜悦:论坛和群也会分享大量的学习资料,视屏,读数交流,你会发现,不是你一个人在战斗!

勤实战,越挫越勇

不要急切期望“实际的”例子,更不要看不起小实例,“不积跬步无以至千里” 。大规模的成功商业案例所采用的算法,无人驾驶,人工情感,不是我们目前解决的问题。看清脚下的路,比仰望星空更实际,多做一些实战练习,更好的体会算法本质,在错误中不断成长,越挫越勇,终究会成为算法高手。

看电影,洞察未来

可以看看科幻电影,如《人工智能》,《记忆裂变》,《未来战士》,《她》等等。奇妙的是这些科幻东西正在一步步的实现,靠的是什么?人工智能。计算机的终极是人工智能,人工智能的核心是算法。

如何学好数据结构与算法

“一心两本” 学习法:一颗好奇心,两个记录本。
怀着一颗好奇心去学习,才能不断解决问题,获得满足感,很多科学大牛都是永远保持着一颗好奇心。一个记录本记录学习重点难点;一个记录本记录日记或周记,记录一天或一周来学习了什么,有什么经验教训,需要注意什么,计划下一周或下一天该做些什么。不断总结反思过去,计划未来,每天都有事情做,心中正能量满满。

总结

知识在于积累,学习需要耐力。学习就像挖金矿,或许一开始毫无头绪,一头雾水,但换个角度,换换工具,时间久了总会找到一个缝隙。成功就是你比别人多走了一段路,或许是那么一小步。

你可能感兴趣的:(算法,数据结构,人工智能,编程语言,java)