算法成神之路,请看这一篇!
作者 | wait0804
公号 | 编程剑谱
随着自己写的越来越多,慢慢的就会有人和我主动交流,现在好多人希望我写一篇考研、就业的选择、零基础如何学习编程,秋招如何选择offer、等等
我以前写过一篇初入阿里---10 天,我自己还想写一篇在阿里的三个月,将中间的点点滴滴分享给大家,还想写一篇自己的思考、和打法战略,以及你们 99% 的人欠缺的一种能力,还有自己的技术路线的分享,目前是 C 之旅
要写的东西实在太多了,而我目前写公众号的时间,按一周时间计算,不能超过我睁眼时间的 1%,我 99% 的精力在其他地方,希望大家可以理解我,刚入职,还需要各方面能力的提升
今天在这里着分享一波:数据结构与算法怎么学,以及今天为什么会写这块,真的是应了大部分读者的要求
三个原因
1、数据结构与算法真的是至关重要,我可是当年在写基础知识的时候,放到了第一位,公众号历史文章都有啊,你们要好好看
2、不断的有人私聊问我在这方面的学习经验,我觉得是时候给你们分享一波了
3、前一段时间总有人私聊我,给我推荐什么 google 的数据结构与算法课程,让我报名,我都很客气的说了一声:谢谢啊,暂时不需要,还一直说是特别好,一定要报,我之前忙于工作,今天就统一回复一下
不是一两个人私聊我,从半个月前到现在,大概十几个人吧,我真的是醉了,课程好,你自己觉得合适,报名就对了,给我推荐,也没问题,我自己不报,还一直说做活动,便宜,讲的特别好,不报对我是一种巨大的损失之类的话,对于这部分人,我都直接拉黑、删除掉了
在这里,好多人我没回,说一声,我真的是不需要,我相信,我应该比绝大部分人检索资料、信息的能力要强,以及接触信息的渠道要多,有些事情,不是我不知道,是我不需要,选择性的过滤了,有什么好的,我也希望大家多多给我分享,但是不要强人所难
说真的,数据结构与算法,我的水平还算可以吧,给我点时间,准备准备,也是可以讲讲的,我当年在实验室,可是经常的给学第、学妹讲过这方面的课程,自己对其理解也是很深刻的
数据结构
对于我自己来说,秋招中的众多知识点,比如:操作系统、计算机网络、Linux、数据库、C、C++、数据结构、算法、项目之类,我自己最最最擅长的就是数据结构与算法
举个例子:面试官问我,红黑树了解吗?
我的回答是:我会从树--->二叉树--->完全二叉树--->AVL树--->红黑树--->B+/B-/B*树,以及四叉树、八叉树等等
我先讲为什么需要这种数据结构,出现的背景是什么,解决什么问题,将关于树的整个体系系统都讲出来
我在秋招的时候,是可以手写 AVL 树、红黑树、B+/B-/B*,图的邻接矩阵、邻接表,最短路径、迪杰斯特拉算法(Dijkstra算法)弗洛伊德算法(Floyd算法)等,所以自己对于数据结构是特别的自信,对于面试官问我,我都是说自己数据结构掌握的还不错,一定的有自己擅长的技术栈,这才是你与别人不一样的地方,是你自己的优势所在
资料推荐
1、数据结构:
<大话数据结构>
清华大学严蔚敏的 <数据结构>,C C++版都有
这 2 本书都不错,上面的适合新手入门,下面的书籍适合进阶提升
视频:
黑马郝斌的 C 语言、数据结构,我都看过,讲的是真不错,特别适合Linux C/C++ 方向的同学去学习
C 语言:
https://www.bilibili.com/video/av8074534/?p=180
数据结构:
https://pan.baidu.com/s/1qQrHTdkvxMLSGv7G4nHWBw
密码:4o9p
说真的,b 站还是有很多的好东西,一定要善于去发掘、去寻找好的资源
2、算法
<啊哈算法>,入门级别学习合适
<编程之美>、<算法导论>,进阶提升必看
<剑指offer>,LeetCode 找工作必备,刷至少 2 遍
视频:
推荐一个网站:七月算法
算法导论:
https://pan.baidu.com/s/1Bm34-92TwN5TbMOXfPkY6g
密码:1i38
3、隆重推荐
适合于C/C++ java python 任何方向去学习数据结构与算法,我大学期间,学习与找工作,最常去学习的地方
牛客网,左神,应届生找工作的,逛过牛客网的,应该都知道左神的大名吧
在看看下面的课程:
左神的一本神书:
<程序员代码面试指南:IT名企算法与数据结构题目最优解 左程云著>
java 写的,有需要的可以买一本学习
我首先说明一下,我没有给任何网站打广告,我就是把自己当年走过的路,自己通过什么资料,什么视频,在什么网站进行学习,真实的分享给大家,有用的,你们借鉴,没用的,觉得我这个方法过时了,完全可以不必理会的
网址:
https://www.nowcoder.com/courses/semester/algorithm-elementary
算法之路
三步走战略:看视频 + 看书 + 刷算法
1、
我是在大二的下半学期开始接触的数据结构,我一开始的学习,是看书理解里面的简单逻辑,和听视频的讲解,也是边摸索边进行学习,对于那时候的自己,完全是小白水平
大二的下学期,可以说是在找学习编程的感觉,让自己激发兴趣,兴趣是最好的老师,一定的让自己喜欢上数据结构与算法,实现了什么数据结构或者做出了哪道算法,会对自己是一个正向的激励,会让自己有更大的兴趣,去解决更难的问题,记住:在什么阶段做什么难度的题
不要光刷题,一直想不出来,是很痛苦的一件事情,要学会用数据结构或者算法去解决项目中的实际问题,去做优化与改进,这块在大三的时候,结合着来,我不建议,太有针对性的去刷题
2、
大三的上学期以及寒假,是我主要学习数据结构与算法的大半年时间,在这个阶段,我逐渐脱离了视频(视频适合初级阶段,适合于大二学习),对于数据结构与算法,学到后期,必须的靠自己,不能在一味的依赖于视频中的讲解
我是这样的,通过看书,来实现一些数据结构,以及开始有针对性的提高自己的算法能力,数据结构,来回就那些东西,只要理清了之间的逻辑,思路清晰,反复的去实现几遍就好,难度相对于算法还是简单一些,数据结构,关键是理解数据与数据之间的存储关系,多做笔记,整理,疏通关系
算法,我觉得是挺有难度的,挺考验人的智商的,因为算法的实现思路,很奇特,刷过算法的,就懂,有些思路是取巧,有些是剑走偏锋,根本想不到,只能的先去看别人的思想,理解好,在实现出来
经常看别人的思路,不要觉得很丢人,这是正常的,不会了,实在想不出来了,就去看别人的实现思路,对于同一个问题,用不同的算法实现,带来的可是本质的区别,一定要有对时间复杂度有着极致的追求,去寻找最完美的解决方法,多思考,多花时间去理解清楚
3、
我当时,是拿小本本,对于数据结构和算法中,不清晰的地方,拿本子画清楚,不要光想,一定要动手去画,想明白了,理清了各种逻辑,代码的实现是很容易的,关键就是担心没思路,脑子是乱的
当时自己的时间安排,就是每天都会抽时间去学会数据结构,做几道算法题,去 leetcode 或者牛客网上面,从最简单的题刷起,说白了,这个就在于坚持,和自己有没有决心去学好
快找工作的时候,是必须要刷一波算法题的,刷的时间久了,你会慢慢的爱上它的,很有趣,很奇妙的感觉,以及带给自己莫名的快感,慢慢的你就会刷上瘾了,着迷其中
强调三点
1、需要明确一下:数据结构、算法需要掌握哪些知识点,这块,你翻看书的目录,以及看一些课程大纲都有写到,那块会很详细的有说明
数据结构:链表、栈、队列、字符串、矩阵、树、图
算法:排序、字符串、数组、递归、五大算法(动态规划、贪心。。。)
2、对于数据结构与算法的实现,不要纠结于C、C++、java、python、语言是其次,关键是实现的细节以及方法,选一门自己喜欢的语言,去学习数据结构与算法就好
3、书、视频,我都已经推荐过了,对于小白的话,建议先看看视频,理解理解,多听听别人思路,看看是怎么解题的,初步阶段,一定要选择简单的、自己能很快理解的去学习,由浅入深,慢慢的给自己信心
我想说的
算法的学习,别人帮不了你多少,主要还是的靠自己悟,靠自己花时间去理解,师傅领进门,修行在个人,算法讨论,思路分享,去牛客网看看,各路大神,各种解决思路,你一定会有进步的
一开始,学习数据结构与算法,是枯燥的,是乏味的,因为你还不够了解到它的魅力,但是时间久了,你真的会爱上它,离不开它,与你血肉相连,伴你编程终生,在以后的学习道路中(不仅仅是技术方面),都会潜移默化的对你产生影响
数据结构与算法,给我带来的是,逻辑缜密性的提升,对我的性格、做人都产生了影响,我是强烈的建议,大家一定的好好学习,悟出自己的学习之道,那么你的路将会走的更远,更久
10 月 1 号,休整了一天,现在的我在回家的路上,各位,假期快乐!
转自「编程剑谱」,搜索即可关注