前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【非广告】三千字干货经验分享,新手怎么学好算法和数据结构?

【非广告】三千字干货经验分享,新手怎么学好算法和数据结构?

作者头像
黄鸿波
发布2021-01-18 14:38:09
8790
发布2021-01-18 14:38:09
举报
文章被收录于专栏:AI的那些事儿AI的那些事儿

大家好,这篇不是广告。

今天和大家聊聊算法和数据结构的提升问题,因为很多小伙伴找到我说自己即将面临面试或者是考研的机试,但是对于自己的实力没有信心,想问一问有没有什么提升的方法。所以今天就和大家简单分享一下我个人的一些经验心得。

刷题

首先要说的就是刷题,其实算法和数据结构也是一种技术,既然是技术那么练习自然是必不可少的。

但是很多人对于刷题并没有一个概念,乱刷一气,所以最终的结果是时间花了不少,但是带来的长进却不多。很多人因此非常气馁,对自己失去了信心。其实刷题是非常有技巧的,并不是打开LeetCode一阵猛刷就行的。

网站选择

我估计大家说到刷题首先想到的就是LeetCode,但老实讲尽管LeetCode名气很大,但是我个人认为它并不是很好的刷题平台,实际上acmer中的大牛往往也不刷LeetCode的(我在毕业之前就没有刷过)。因为LeetCode的Hard在acm里大部分也只能算是水题,而且LeetCode的难度分层做得很不好,Easy、Medium和Hard有时候并不能反映题目的真实难度。

另外一点是LeetCode当中考察的算法比较少,也相对基础,我至今刷了差不多两百题,来来回回就是那么几个算法。每一个算法都很少深入。当然对于想要找工作的同学来说问题不大,如果想要再钻研得深一些就不够了。

所以这里给大家推荐一些正规的算法练习的渠道,全都是免费的。一般这些算法练习的网站会被称作是OJ(online judge),也就是在线评测网站的意思。国内著名的OJ有很多,比如北大的poj,网址:poj.org。比如浙大的zoj,网址:https://zoj.pintia.cn/。再比如华中科大的hustoj,网址:hustoj.org,还有杭电的hduoj,网址:acm.hdu.edu.cn。多说一句,著名的Best Coder竞赛就是杭电搞的,其实就是模仿codeforces和topcoder的国内版本。但是是中文赛题。

上述介绍的都是国内的OJ,除了国内的国外的OJ也有不少,比如著名的codeforces和topcoder。topcoder的画风有些不太一样,会有一个专门的客户端,很多人上来就被劝退了。

总的来说OJ其实没必要选很多,选择自己比较喜欢的一两个就可以了。最早是北大的poj名气最大,最近华中科大和杭电迎头赶上,尤其是杭电的best coder比赛吸引了很多选手参加,题目质量也非常不错。

难度选择

先来和大家谈谈难度选择,我们在刷题的时候首先需要考虑的就是难度。我们自己大概在什么水平,能够做出来什么级别的题目,然后挑选比自己当前水平略微高一点点的题目进行锻炼,这样既不会太简单没有挑战,也不会太困难导致自己做不出来。

但是道理大家都会,真正实操可能还是不知道从何入手。其实有两个指标非常关键,我之前也在题解当中提到过一个是通过率一个是通过人数。我以ZOJ举个例子,大家看下下图:

这里的12题其实很能说明问题,像是1001这种全场通过万人以上的题目,不用看肯定是水题。如果对自己算法有信心其实可以没必要刷了,刷了带来的提升并不大。对于我而言,我可能会刷通过1000人左右的题,也就是说我自己的话这些题目当中只会选择1011和1012进行练习。

另外一个指标是通过率,比如1008题,虽然通过的人数有4000+看起来很多,但是通过率只有20%。说明这道题的难度不小,或者是有一些比较深的trick。那么在做这道题的时候就需要尤其小心,很有可能会被某一个 点卡住,并且卡很长时间。通过率一定程度上也可以反映题目的难度,结合通过人数一起看,基本上对于题目的情况就有了一个大概的了解。

大家可以在OJ当中选择一些做一做,找到自己的水平位置,大概能通过什么级别的题目,然后一点点调整自己的目标,这样刷题的效果才最好。

专题训练

前面介绍的是刷题方法,这里要说的是学习方法。

我个人认为最有效果的其实不是刷题,而是专题训练。也就是说针对某一个专题进行深入的训练,把这个算法对应的一类问题从简到难做一遍。这样下来对于这个专题的理解必然会非常深刻,这样才算是真正把一个专题做透了,学透了。我们学了一堆算法,没有经过专门的练习,就指望要用到的时候能够超常发挥,这怎么可能呢?

但是专题训练怎么训练呢?我们怎么知道有哪些专题,专题当中有哪些题目呢?这个就需要前人大佬的总结和分享了,靠着菜鸟自己去准备专题训练是比较困难的。这里我推荐一个著名金牌大佬匡斌巨巨总结的专题训练,叫做kuanbin带你飞。网址:https://vjudge.net/article/187。

这当中一共有23个专题,当然有些专题非常难,不搞acm比赛的其实没有必要。但是其中的搜索和动态规划以及线段树专题都非常好,我自己是亲自动手练过的,做完之后感觉还是提升很明显的。

很多同学跟我说自己对于递归以及搜索算法理解不深刻,解决方法很简单,就是专题训练,如果你能把简单搜索和搜索进阶这两个专题刷完,那么估计大部分搜索问题都不再是问题了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI的那些事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 刷题
    • 网站选择
      • 难度选择
      • 专题训练
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档