zoukankan      html  css  js  c++  java
  • 1、从0开始学算法 概述

    首先先来说说为啥要学习数据结构和算法

    1、大公司要考察算法

    很多大公司,比如 BAT、Google、Facebook,面试的时候都喜欢考算法、有些还会让人现场写代码(可能是白板,也可能是纸上)。

    为什么这些大公司都喜欢考算法呢?

    校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察你的基础知识是否牢固。(当然,如果你有不错的实际的项目经验,也是可以加分的)

    社招的话,还是会考察你的数据结构和算法能力。因为大公司更看重你的长期潜力

    2、更容易弄懂框架/技术背后的原理

    比如,我们常用的 Key-Value 数据库 Redis 中,

    里面的有序集合是用什么数据结构来实现的呢?为什么要用跳表来实现呢?为什么不用二叉树呢?

    比如JDK8中的HashMap为啥会使用红黑树,而不是用普通的链表呢?

    掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。

    3、这是一个通用的能力

    其实计算机语言大同小异,当你算法能力比较突出的时候,学习其他语言,上手速度会很快

    我觉得吧,数据结构和算法这个东西,如果你不去学,可能真的这辈子都用不到(如果你一直在小公司的话),也感受不到它的好。但是一旦掌握,你就会常常被它的强大威力所折服。比如对于区块链来说,背后其实就是(链表+hash+树)

    之前你可能需要费很大劲儿来优化的代码,可能用了某些数据结构和算法以后,可能很快就解决了

     

    说完为啥要学以后,接着来说说 我们要学习那些东西

    相信大家都在大学学习过数据结构和算法这门课,应该是难度不小的,是否还一度怀疑自己很笨?

    其实不是的,数据结构和算法本身确实很抽象,相对晦涩难懂

    但是只要掌握正确的学习方法,有的放矢,学习起来并没有那么难的。

     

    先来看看我们都会学习那些重点知识?

    可能大家都会在网上看到一个算法的知识图谱,列出超级多的知识

    这次我就不列了哈,直接说我们要掌握的知识,咱们学习要学会找重点。如果不分重点地学习,眉毛胡子一把抓,学起来肯定会比较吃力。

    所以,结合我自己的学习心得,还有这些年的开发经验,

    总结了下面20个最常用的、最基础的数据结构与算法,

    其中包含 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;

    10 个算法:递归、排序(各种排序)、二分查找、搜索(dfs,bfs)、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

    掌握了这些基础的数据结构和算法,再根据自己的工作/发展需要去学更加复杂的数据结构和算法,都相对容易得多

    最后分享一些学习方法和注意事项,让大家更加高效的学习

    1、边学边练

    课上举的经典例子,要学习要消化,并且课后的相关算法练习也要及时完成。

    不要光看不练(不然很可能会发生,以为自己都会了,但是还是写不出代码的困境)

    有些同学可能会问,那我还需要专门去刷题吗?

    我的建议是 可以先学习完这一系列的知识,然后根据自己的需要去刷题,但一定不要浪费太多时间在刷题上。你只要把这一系列的知识学好,学扎实,常见的公司面试是没啥问题的。

    2、多问、多思考

    学习最好的方法是,几个同学一起学习,在一块儿讨论切磋,有问题及时寻求老师答疑。

    所以,大家有问题可以及时在群里和大家一起探讨。

    3、奖励学习法

    学习的过程中,我们碰到最大的问题就是,坚持不下来。 

    是的,很多基础课程学起来都非常枯燥,很容易放弃

    可是大家为啥能够能玩游戏玩很久还乐此不疲?

    其实就是有一个及时反馈给你,当你玩了一段时间,你的经验会增加,你的装备会更好

    都在实时反馈给你,但是学习的反馈周期相对比较长,所以你可以在完成了某次学习后,给自己一些小奖励(看会电视,去吃好吃的等),或者可以写自己的学习心得,然后发到群里 (大家可能会给你点赞,分享等)这样子你可能会让你更容易坚持下来

    在学习的过程中,一定会碰到“拦路虎”。如果哪个知识点没有怎么学懂,不要着急,这是正常的。因为,想听一遍、看一遍就把所有知识掌握,这肯定是不可能的。

    如果碰到“拦路虎”,你可以和老师交流,也可以先沉淀一下,过几天再重新学一遍。所谓,书读百遍其义自见,我觉得是很有道理的

    我讲的这几个方法,不光适用于咋们数据结构和算法的学习,也适用于其他任何知识的学习过程,你可以在实践以后,总结出最适合自己的学习方法。

    最后,数据结构和算法是一个学习的坎,相对可能会困难点,但是无论怎么样,我们都要跨过去,因为这个技术 你现在不学,将来找工作也要学!

    既然都要学,还不如早点学习呢!

  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/javabigdata/p/14477329.html
Copyright © 2011-2022 走看看