百科问答小站 logo
百科问答小站 font logo



如何系统地学习算法? 第1页

  

user avatar   harvic 网友的相关建议: 
      

上学时候傻,为了校招,看了不下于五本算法书,加上LeetCode,刷了大半年。

总共一两千道题啊……不刷怕考到……忘了刷,刷了忘……毛都快掉没了……

现在工作近十年,辗转几个大厂,由当年的应试者变成了出题人,才知道,完全不必这么辛苦。

任何事情都遵循28原则,我们只要把握住那20%,就能拿到80分!

凡事都讲究性价比!

省下来的时间,谈个女朋友,它不香么???!!!

这里把我这些年的出题经验告诉大家,希望大家知道哪些是重点,应该怎么学数据结构和算法

直接上干货,我花了两天的时间做了一张图,涵盖数据结构和算法书籍中都会讲到的知识点。并给出了常用算法的平均时间复杂度,对于必须要学的内容前面加了星标


这里面涉及到了近二十种数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;超四十种常见算法思想:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易、非常快。

需要高清无水印思维导图源文件的小伙伴,可以点击这里获取:

长文预警,以下内容涵盖了十几年来学习算法的心得,总结出来供大家参与。如果看完这篇文章,还学不好算法,尽管来骂我。

收藏是点赞的五倍啊,原创不易,小伙伴们双击屏幕点个赞支持下吧,手动叩谢了。

文章写了很久,我相信它一定能帮到你,也希望大家能给我个赞,以示鼓励,谢谢

目录:

  1. 数据结构与算法的区别
  2. 数据结构怎么学
  3. 怎么学习算法
  4. 算法太难懂?那是你不知道这些模拟网站

一、数据结构与算法的区别

很多同学搞不明白,数据结构与算法有什么区别,甚至有些同学以为数据结构中就包含了算法。

其实,是字面意思就能知道个大概,数据结构主要讲解数据的组织形式,换句话说,我就是我们要怎样把这些数据存储起来,所以有列表、堆、栈、树、图,这是数据结构的重点。

算法,则注重的是思想,比如列表里的元素怎么排序、怎么在当前的存储结构中找到最大的数和最小的数?等等,说白了就是解决现实中问题的思想。所以才会有分治思想、贪心思想、动态规划这些经典算法。

二、数据结构怎么学

关于数据结构,我想说的是,它是这四大件中最简单、最基础的一个。离开了数据结构,几乎任何的程序都会失效,所以在讨论数据结构的时候,常常要把算法也连带着说一说。

要单纯地掌握常见的数据结构,就如同拆解一个个精妙的仪器件一样有趣和简单。正因为数据结构这个东西在程序中的作用,和仪器部件特别相像,不同的数据结构有着不同的特性,因此要想学好数据结构,图解是必备武器!

这里强推中国大学上,浙江大学的开设的《数据结构》课程,涵盖了常用的数据结构和算法。

辅以教材参考书,强推《大话数据结构》,光看封面你就知道这本书的风格了

没错,这就是大名鼎鼎的《大话设计模式》的作者出的,绝对顶。

三、怎么学习算法

算法课常常和数据结构课放在一起,在有些高校中,会存在“数据结构与算法”和“算法设计与分析”这样的两门课。

学习算法的套路很简单,多看、多写、多上机,既然是思想的集合,看得多了,自然无师自通。

至于刷题,很多同学都知道要刷LeetCode。

LeetCode题库:(2123题)

总共两千多道题,而且有些题,非常难,就算每天10题,也至少刷半年。这显然不适合绝大部分同学。

所以,我们要找到最核心、最重要的题集,即可

比如,如果时间紧张,可以先刷《程序员面试宝典》里的题目,总共109题。

刷完以后,有时间,可以再刷《剑指offfer》的题目,共75题。

因为这两本书,都是面向面试的高频题汇总,自然有很多题目是重合的。这也正能说明这两本书的重要性。

如果专攻面试的话,还有两本不错的书推荐:

《编程珠玑》这本书的豆瓣评分非常高,有 9 分。

这本书最大的特色就是讲了很多针对海量数据的处理技巧。这个可能是其他算法书籍很少涉及的。面试的时候,海量数据处理的问题也是经常会问的,特别是校招面试。不管是开拓眼界,还是应付面试,这本书都很值得一看。

《编程之美》这本书有多位作者,其中绝大部分是微软的工程师,所以书的质量很有保证。不过,这里面的算法题目稍微有点难,也不是很系统,这也是我把它归到面试这一部分的原因。如果你有一定基础,也喜欢钻研些算法问题,或者要面试 Google、Facebook 这样的公司,可以拿这本书里的题,先来自测一下。

当然,我也有一本谷歌师兄总结的高频面试算法习题集,包含了常见的数据结构和算法汇总,无论是排版还是内容,都是非常棒。

所有这些书,我都为大家找到并下载好了,需要的小伙伴可以直接领取。这回得帮我点赞了吧

四、算法太难懂?那是你不知道有这些模拟网站

算法的难点在于,根本没办法在脑子里抽象出它的步骤啊

对于做个几何题都费劲的男孩子来说,那更是要了他的亲命了。

今天,我就给大家推荐几个算法可视化的网站。

没错,就是写了代码以后,可以看见他们是怎么一步步求出结果的。

1、 visualgo.net/en

目前网站支持中文,印尼文,日文等多语言版本。

最关键的是,它几乎包含了所有算法!!!!

在搜索选项中你可以根据关键词查找到你想要的算法。

点进去一个具体的算法之后,会有两种方式的可视化呈现方式,一种是电子讲座模式,一种是示例模式。其中示例模式是以动画方式呈现,你可以控制动画的快进与倒退,电子讲座模式是以知识点讲解模式呈现,你可以手动控制页面的进度。两种方式都可以帮助你演示每个步骤的过程代码。

接下来我们演示一下冒泡排序的执行过程,如下图所示:

另外,你还可以创建一组自定义的数,然后让动画显示“你的算法”。

除此之外,还支持在线测试哟~

2、 Algorithm Visualizer

在Algorithm Visualizer,大家可以很清楚的看到算法运行的整个过程,很直观,便于大家学习。

大家可以很清楚的看到,网站分为三部分,最左边是算法目录,大家可以选择自己感兴趣的算法,目前已经包括了很多算法了,比如二叉树、图、排序算法、动态规划等等经典算法 。中间区域主要是算法演示以及运行log。右侧是代码以及算法运行按钮。

我们用它来演示一下冒泡排序的执行过程,如下图所示:

同时它是开源的,目前有35K个star,足以可见该项目的欢迎程度,这里推荐给要学习算法的各位。

github.com/algorithm-vi

3、 Data Structure Visualization

目前已经有很多常用的数据结构与算法的可视化,如:常见的数组、链表、队列、二叉搜索树、红黑树、各种排序等,如下图所示:

比如,我们用它来模拟一个二叉搜索树,如下图所示:

我们再用它来演示一下快速排序算法,如下图所示:

把这些内容学会,算法应该说是非常牢固了,无论是校招还是工作,都已经非常够用了。

但程序员的人生不是只有算法的学习,我们还有校招、面试、青春饭等等的困惑,我把我这些年的所知所得,整理成了一本书,开源到github上了。相信会对大家很有帮助,大家可以去看.

目前还在持续更新,欢迎大家star。

地址: github.com/harvic/Fight

好了,这篇就到这了,希望大家毕业都能找到好工作。

我是 @启舰 ,原创不易,帮我点个赞吧。


本人所有文章皆为原创,著作权归@启舰 所有,未经授权,转载必究




  

相关话题

  码农拿相对高的薪水还能持续多久? 
  人类到什么时候才可以开始对地下世界进行探索? 
  如何评价 2019 年 5 月 5 日《今日说法》栏目播出的《爆炸的手机》,三星手机到底怎么了? 
  北大的同学凌晨四点半真的在看书吗? 
  消息称 Keep、喜马拉雅均已于最近几周取消赴美首次公开募股(IPO)计划,背后原因可能有哪些? 
  拾获了外星人的工具,真能对我们的科技产生巨大助益吗? 
  为什么我写代码时总是手滑把main打成mian? 
  为什么写程序的时候可以坚持很久,但是学习数学就很难保持注意力? 
  LBS数据库的架构是怎样的? 
  国内的自动驾驶技术目前发展到什么阶段了? 

前一个讨论
有什么字单独拿出来不容易认出来,放到词语里一下就认出来的?
下一个讨论
数据分析面试时被问到,最近一周拼多多成交订单量较上周有5%的下降,分析原因,该怎么从数据角度分析呢?





© 2024-05-10 - tinynew.org. All Rights Reserved.
© 2024-05-10 - tinynew.org. 保留所有权利