算法成神之路

图片发自简书App

随着自己写的越来越多,慢慢的就会有人和我主动交流,现在好多人希望我写一篇考研、就业的选择、零基础如何学习编程,秋招如何选择offer、等等


我以前写过一篇初入阿里---10 天,我自己还想写一篇在阿里的三个月,将中间的点点滴滴分享给大家,还想写一篇自己的思考、和打法战略,以及你们 99% 的人欠缺的一种能力,还有自己的技术路线的分享,目前是 C 之旅


要写的东西实在太多了,而我目前写公众号的时间,按一周时间计算,不能超过我睁眼时间的 1%,我 99% 的精力在其他地方,希望大家可以理解我,刚入职,还需要各方面能力的提升


今天在这里着分享一波:数据结构与算法怎么学,以及今天为什么会写这块,真的是应了大部分读者的要求


                    三个原因


1、数据结构与算法真的是至关重要,我可是当年在写基础知识的时候,放到了第一位,公众号历史文章都有啊,你们要好好看


图片发自简书App

2、不断的有人私聊问我在这方面的学习经验,我觉得是时候给你们分享一波了


3、说真的,数据结构与算法,我的水平还算可以吧,给我点时间,准备准备,也是可以讲讲的,我当年在实验室,可是经常的给学第、学妹讲过这方面的课程,自己对其理解也是很深刻的


                数据结构


对于我自己来说,秋招中的众多知识点,比如:操作系统、计算机网络、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 任何方向去学习数据结构与算法,我大学期间,学习与找工作,最常去学习的地方


牛客网,左神,应届生找工作的,逛过牛客网的,应该都知道左神的大名吧

图片发自简书App

在看看下面的课程:

图片发自简书App

左神的一本神书:

<程序员代码面试指南:IT名企算法与数据结构题目最优解 左程云著>

java 写的,有需要的可以买一本学习


我首先说明一下,我没有给任何网站打广告,我就是把自己当年走过的路,自己通过什么资料,什么视频,在什么网站进行学习,真实的分享给大家,有用的,你们借鉴,没用的,觉得我这个方法过时了,完全可以不必理会的


网址:

https://www.nowcoder.com/courses/semester/algorithm-elementary


                  算法之路


三步走战略:看视频 + 看书 + 刷算法


1、

我是在大二的下半学期开始接触的数据结构,我一开始的学习,是看书理解里面的简单逻辑,和听视频的讲解,也是边摸索边进行学习,对于那时候的自己,完全是小白水平


大二的下学期,可以说是在找学习编程的感觉,让自己激发兴趣,兴趣是最好的老师,一定的让自己喜欢上数据结构与算法,实现了什么数据结构或者做出了哪道算法,会对自己是一个正向的激励,会让自己有更大的兴趣,去解决更难的问题,记住:在什么阶段做什么难度的题


不要光刷题,一直想不出来,是很痛苦的一件事情,要学会用数据结构或者算法去解决项目中的实际问题,去做优化与改进,这块在大三的时候,结合着来,我不建议,太有针对性的去刷题


2、

大三的上学期以及寒假,是我主要学习数据结构与算法的大半年时间,在这个阶段,我逐渐脱离了视频(视频适合初级阶段,适合于大二学习),对于数据结构与算法,学到后期,必须的靠自己,不能在一味的依赖于视频中的讲解


我是这样的,通过看书,来实现一些数据结构,以及开始有针对性的提高自己的算法能力,数据结构,来回就那些东西,只要理清了之间的逻辑,思路清晰,反复的去实现几遍就好,难度相对于算法还是简单一些,数据结构,关键是理解数据与数据之间的存储关系,多做笔记,整理,疏通关系


算法,我觉得是挺有难度的,挺考验人的智商的,因为算法的实现思路,很奇特,刷过算法的,就懂,有些思路是取巧,有些是剑走偏锋,根本想不到,只能的先去看别人的思想,理解好,在实现出来


经常看别人的思路,不要觉得很丢人,这是正常的,不会了,实在想不出来了,就去看别人的实现思路,对于同一个问题,用不同的算法实现,带来的可是本质的区别,一定要有对时间复杂度有着极致的追求,去寻找最完美的解决方法,多思考,多花时间去理解清楚


3、

我当时,是拿小本本,对于数据结构和算法中,不清晰的地方,拿本子画清楚,不要光想,一定要动手去画,想明白了,理清了各种逻辑,代码的实现是很容易的,关键就是担心没思路,脑子是乱的


当时自己的时间安排,就是每天都会抽时间去学会数据结构,做几道算法题,去 leetcode 或者牛客网上面,从最简单的题刷起,说白了,这个就在于坚持,和自己有没有决心去学好


快找工作的时候,是必须要刷一波算法题的,刷的时间久了,你会慢慢的爱上它的,很有趣,很奇妙的感觉,以及带给自己莫名的快感,慢慢的你就会刷上瘾了,着迷其中


                    强调三点


1、需要明确一下:数据结构、算法需要掌握哪些知识点,这块,你翻看书的目录,以及看一些课程大纲都有写到,那块会很详细的有说明


数据结构:链表、栈、队列、字符串、矩阵、树、图

算法:排序、字符串、数组、递归、五大算法(动态规划、贪心。。。)


2、对于数据结构与算法的实现,不要纠结于C、C++、java、python、语言是其次,关键是实现的细节以及方法,选一门自己喜欢的语言,去学习数据结构与算法就好


3、书、视频,我都已经推荐过了,对于小白的话,建议先看看视频,理解理解,多听听别人思路,看看是怎么解题的,初步阶段,一定要选择简单的、自己能很快理解的去学习,由浅入深,慢慢的给自己信心


              我想说的


算法的学习,别人帮不了你多少,主要还是的靠自己悟,靠自己花时间去理解,师傅领进门,修行在个人,算法讨论,思路分享,去牛客网看看,各路大神,各种解决思路,你一定会有进步的


一开始,学习数据结构与算法,是枯燥的,是乏味的,因为你还不够了解到它的魅力,但是时间久了,你真的会爱上它,离不开它,与你血肉相连,伴你编程终生,在以后的学习道路中(不仅仅是技术方面),都会潜移默化的对你产生影响


数据结构与算法,给我带来的是,逻辑缜密性的提升,对我的性格、做人都产生了影响,我是强烈的建议,大家一定的好好学习,悟出自己的学习之道,那么你的路将会走的更远,更久


各位,假期快乐!

推荐阅读更多精彩内容

  • 栈 1. 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被...
    IT程序员阅读 3,015评论 0 8
  • pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 ...
    王震阳阅读 77,518评论 25 510
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 127,755评论 18 547
  • 乌贼的第一本书,没想到第一本书就能写地这么成熟。 内容 这本书的内容是关于石轩石道长的修仙之路。力量体系分为 锻体...
    二向箔作图阅读 202评论 0 0
  • 电影结尾给了一个男主当时坚持自己梦想,不为了稳定的工作(也是受到了女主的一通跟家人的电话的影响,很现实)参加ban...
    MetaData阅读 44评论 1 0