小白一路走来,连续刷题三年,谈谈我的算法学习经验帅地

数据结构与算法应该算是一个比较难的模块,从小白一路走过来,从大一连续刷过好几年题,看过挺多书,踩过挺多坑,也涨了一些经验,姑且在这里分析一波对数据结构与算法的学习经验,请耐心看完,相信对你会有所帮助。

对于初学者来说,我认为选择一本合适、不错的算法书是非常非常重要的,从大一到现在我也看过不少的算法书,当然在学习算法的过程中也走过不少坑,刷了很少题,总结了不少经验,下面说说我的一些经验吧,请耐心看完,相信一定对你有所帮助。

1、数据结构与算法分析(c语言描述版)

我相信大部分人大学看的教程都是清华大学出版社严蔚敏写的那本书,说实话,作为初学者,那本书我没能坚持看下去,可能比较适合大佬看吧。我自己买了一本《数据结构与算法分析(c语言描述版)》,挺薄的,不过感觉很棒,这本书让我学到了很多,个人感觉也挺容易懂的,代码实现是采用C语言来实现的,不是伪代码,如果你想学习数据结构,我觉得这本书是个不错的选择。班级里有挺多人看了《大话数据结构》,挺他们说也挺不错,不过我没看过。

2、挑战程序设计竞赛

这边书也是大一时看的,学习算法,刷一些题是必须的,所谓3分理论7分实践。如果你想刷题,我挺推荐这本书,里面分初级、中级到高级。虽然每道题没有讲的特别详细,但当时都看懂了,真心不错。不过高级那部分我是没看,初级和中级看着挺舒服。也是学到挺多的,推荐给大家。

3、算法(第四版)

4、编程之美

5、编程珠玑

当然,数据结构与算法的还有很多优秀的书籍,我自己也看过不少,不过以上这些,我觉得很不错。自己也买过算法导论等,不过,没看的下去。

这些我也都准备了电子书籍,

作为初学者,学习算法是一个相对比较艰难的过程,比起看书,可能看视频会相对好理解点,当然,这里引人而异,有些人喜欢看书不喜欢看视频,这里主要是根据你自身来选择了。

说起视频,我自己看的也不多,我是属于喜欢看书的那一种,不过我觉得这些这些视频还不错,推荐给大家。

1、牛客网有个初级和进阶班的视频,我觉得很不错,不过我看过进阶班的,初级班的没看过,感觉还不错,截图如下:

2、直通bat班:这个我觉得也不错,也是适合新手入门的那种

说实话,想要提高自己的算法,我觉得就是脚踏实地着多动手去刷题,多刷题。

但是,如果你是小白,也就是说,你连常见的数据结构,如链表、树以及常见的算法思想,如递归、枚举、动态规划这些都没学过,那么,我不建议你盲目疯狂着去刷题的。而是先去找本书先去学习这些必要的知识,然后再去刷题。因为,如果这些基础都不懂的话,估计一道题做了几个小时,然后看答案都不不懂,做题没有任何思路,这是很难受的。久而久之,估计没啥动力了,我刚开始就是这样,一道题答案看一天,然而还是不大懂,什么回溯啊,暴力啊,还不知道是啥意思。

也就是说,假如你要去诸如leetcode这些网站刷题,那么,你要先具备一定的基础,这些基础包括:

1、常见数据结构:链表、树(如二叉树)。(是的,链表和二叉树是重点,图这些可以先放着)

2、常见算法思想:贪婪法、分治法、穷举法、动态规划,回溯法。(贪婪、穷举、分治是基础,动态规划有难度,可以先放着)

以上列出来的算是最基本的吧。就是说你刷题之前,要把这些过一遍再去刷题。如果你连这些最基本的都不知道的话,那么你再刷题的过程中,会很难受的,思路也会相对比较少。

总之,千万不要急,先把这些基本的过一遍,力求理解,再去刷题。这些知识点,我上面已经给你们推荐了对应的书籍和视频了,就不继续说了。

所以你们千万别指望以为自己把这些思想学完之后刷题会很牛,只有多刷题,只有多动手实践,你的灵敏度才会提高起来。

总结下:

提高数据结构与算法没啥捷径,最好的捷径就是多刷题。但是,刷题的前提是你要先学会一些基本的数据结构与算法思想。

如何刷题?如何对待一道算法题?

我觉得,在做题的时候,一定要追求完美,千万不要把一道题做出来之后,提交通过,然后就赶紧下一道。我认为这意义不大,因为一道题的解法太多了,有些解法态粗糙了,我们应该要寻找最优的方法。

算法能力的提升和做题的数量是有一定的关系,但并不是线性关系。也就是说,在做题的时候,要力求一题多解,如果自己实在想不出来其他办法了,可以去看看别人是怎么做的,千万不要觉得模仿别人的做法是件丢人的事。

我举道例题吧:

问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

方法1::暴力递归

这道题不难,或许你会采取下面的做法:

方法三:斐波那契数列

实际上,我们可以把空间复杂度弄的更小,不需要HashMap来保存状态:

publicstaticintsolve(intn){if(n<=0)return0;if(n<=2){returnn;}intf1=0;intf2=1;intsum=0;for(inti=1;i<=n;i++){sum=f1+f2;f1=f2;f2=sum;}returnsum;}我弄这道题给你们看,并不是在教你们这道题怎么做,而是有以下目的:

1、在刷题的时候,我们要力求完美。

2、我想不到这些方法啊,怎么办?那么你就可以去看别人的做法,之后,遇到类似的题,你就会更有思路,更知道往哪个方向想。

什么叫舒适区?在刷题的时候,可能有一类题是你比较懂的,你每次一看就有思路,然后半个小时就撸好代码,提交代码,然后通过了,然后,哇,又多刷了一道题,心里很舒服。

所以,建议你,一定要学好跳出自己的舒适区。

我一般是在leetcode和牛客网刷题,感觉挺不错,题目难度不是很大。

至于leetcode,也是大部分题目官方都有给出答案,也是个不错的刷题网站。你们可以两个挑选一个,或者两个都刷。

当然,还有其他刷题的网站,不过,其他网站没刷过,不大清除如何。

至于leetcode,有中文版和英文版,个人建议英文版,英文版里面有各种大佬的解法分析。

根据自己的兴趣选。

给你一组整型数据,这些数据中,其中有一个数只出现了一次,其他的数都出现了两次,让你来找出一个数。

然而我想告诉你的是,采用位运算来做,绝对高逼格!

我们刚才说过,两个相同的数异或的结果是0,一个数和0异或的结果是它本身,所以我们把这一组整型全部异或一下,例如这组数据是:1,2,3,4,5,1,2,3,4。其中5只出现了一次,其他都出现了两次,把他们全部异或一下,结果如下:

由于异或支持交换律和结合律,所以:

123451234=(11)(22)(33)(44)5=00005=5。

也就是说,那些出现了两次的数异或之后会变成0,那个出现一次的数,和0异或之后就等于它本身。就问这个解法牛不牛逼?所以代码如下

如果让你求解2的n次方,并且不能使用系统自带的pow函数,你会怎么做呢?这还不简单,连续让n个m相乘就行了,代码如下:

我举个例子吧,例如n=13,则n的二进制表示为1101,那么m的13次方可以拆解为:

m^1101=m^0001*m^0100*m^1000。

我们可以通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。直接看代码吧,反而容易理解:

前面我主要是说了我平时都是怎么学习算法的。在数据结构方法,我只是列举了你们一定要学习链表和树(二叉堆),但这是最基本的,刷题之前要掌握的,对于数据结构,我列举下一些比较重要的:

1、链表(如单向链表、双向链表)。

2、树(如二叉树、平衡树、红黑树)。

3、图(如最短路径的几种算法)。

4、队列、栈、矩阵。

对于这些,自己一定要动手实现一遍。你可以看书,也可以看视频,新手可以先看视频,不过前期可以看视频,之后我建议是一定要看书。

例如对于平衡树,可能你跟着书本的代码实现之后,过阵子你就忘记,不过这不要紧,虽然你忘记了,但是如果你之前用代码实现过,理解过,那么当你再次看到的时候,会很快就记起来,很快就知道思路,而且你的抽象能力等等会在不知不觉中提升起来。之后再学习红黑树啊,什么数据结构啊,都会学的很快。

动手去做,动手去做,动手去做。重要的话说三遍。

千万不要找了一堆资源,订好了学习计划,我要留到某某天就来去做.....

千万不要这样,而是当你激情来的时候,就马上去干,千万不要留到某个放假日啊什么鬼了,很多这种想法的人,最后会啥也没做的。

也不要觉得要学习的有好多啊,不知道从哪学习起。我上面说了,可以先学习最基本的,然后刷题,刷题是一个需要长期坚持的事情,一年,两年。在刷题的过程中,可以穿插和学习其他数据结构。

我还讲解了一些常用数据结构与算法思想,每篇都通俗易懂着讲解了,被各种号所转发

1、点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓-_-)

THE END
1.数据结构与算法应该读哪些书?我们帮你整理好了一本用动画学习算法的入门图书,以直观的图文解析深入算法与数据结构,用通俗易懂的伪代码了解程序运行原理,从实际问题出发拓展相关知识,轻松记忆,深入理解,带你从零开始掌握算法。 趣学算法鼻祖 《算法图解》 Aditya Bhargava | 著 袁国忠 | 译 趣学算法鼻祖教程,豆瓣评分 8.4,Python 示例。像小说一样有趣的算法入https://www.bilibili.com/read/cv35617847
2.强推人人都能看懂的算法入门书,建议翻烂它!其次,算法的验证和优化有难度,如何证明算法的正确性、如何评估算法的性能、如何对算法进行优化,都是需要面对的问题。 最后,算法的实际应用还需要考虑实际环境的限制,如时间效率、空间效率、可扩展性等,要能够将理论在实践中合理应用。 不过现在同学们学https://mp.weixin.qq.com/s?__biz=MzA3NTIzMzIxNQ==&mid=2652924666&idx=1&sn=3755be2a51b436783ab2a06bd2b74ac1&chksm=85c2748a3d2f2fb85c691d23ff7042ec8867ac55b4a9157bcb10b52de46d15b8e6afefbfc0a1&scene=27
3.新手入门算法书籍推荐算法入门书籍公众号设立以来,很多同学都在问如何入门、提高,以及有什么好的算法书籍可以学习。这周空闲时间我就大概在网上整理了一下,由于每个人的性格、学习习惯都不一样,不能针对个人情况来推荐,所以这里给的算法书籍仅做参考哦。 另外需要注意的是,这里给的书籍路线更偏向于普通意义的学习,而不仅仅是针对算法竞赛,公众号前期https://blog.csdn.net/qq_41551359/article/details/81837296
4.算法学习指南:从入门到进阶的书籍推荐正如俗话所说:“算法是编程的灵魂。”无论使用哪种编程语言,算法都是关键所在。今天,我将为大家推荐一些从入门到进阶的算法书籍!入门篇: 《我的第一本算法书》 - 石田保辉;宫崎修一 《算法图解》 - 巴尔加瓦(Aditya Bhargava) 《啊哈!算法》 - 啊哈磊进阶篇: 《算法》(第4版) - https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_3690029175968148788
5.面向初学者和专家的十大机器学习书籍机器学习算法用于各种应用程序,例如电子邮件过滤和计算机视觉,在这些应用程序中,很难或不可行地开发常规算法来执行所需的任务。想学习机器学习吗?从这10本书开始。 想学习机器学习吗?从这10本书开始。 > Top 10 Books on Machine Learning For Absolute Beginners, Beginners and Experts https://www.51cto.com/article/639967.html
6.五本必读的深度学习圣经书籍,入门AI从「深度学习」开始在过去的一年多时间里,研究人员竞相出版专着,以满足读者对深度学习知识的渴求。第一本关于深度学习的书已经上架,更多的将会在夏天或者明年年初陆续上架。我有幸提前拜读了一些专着的初稿,这些书的最终出版让人期待万分。 接下来我将推荐一些深度学习书籍给大家。这些书可以引导大家如何学习人工智能,这对深度学习的快速https://cloud.tencent.com/developer/article/1107150
7.95后哈佛小哥撰写《从零开始的机器学习》,入门必备,书籍资源已开放书籍地址:https://dafriedman97.github.io/mlbook/content/introduction.html 这本书涵盖了机器学习领域最常见的方法,就像是一位机器学习工程师的工具箱,适用于入门级学习者。撰写目的是为读者提供独立构建一些基本的机器学习算法的实践指导,如果用工具箱类比的话,就是教会读者具体使用一把螺丝刀、一盒卷尺。书中的每https://m.thepaper.cn/baijiahao_9418519
8.《Python入门三剑客:零基础编程+数据分析+机器学习(套装共3册x1¥75.80Python编程从零基础到项目实战PYTHON(微课视频版) python编程 从入门到实践 python学习手册 python编程快速上手 编程入门零基础教材教程书籍 x1¥75.80python在机器学习中的应用 python机器学习基础教程实战 chatgpt聊天机器人 人工智能 强化学习 python深度学习 机器学习算法到解析手册 人工智能基础 http://product.dangdang.com/410271151.html
9.关于机器学习的7本入门级好书关于机器学习的 7 本入门书籍机器学习和人工智能是蓬勃发展的领域,并且正在越来越多地成为人们的研究主题。我们在新闻中听到的关于机器学习的各种高级应用似乎高不可攀,但他们的核心理念却很好理解。本文将讨论一些最受机器学习初学者(或者任何有兴趣了解该主题的人)欢迎的资源。其中某些书籍需要读者熟悉一些编码语言和https://www.tableau.com/zh-cn/learn/articles/books-about-machine-learning
10.机器学习入门书籍排行榜京东JD.COM为您提供机器学习入门书籍销量排行榜、机器学习入门书籍哪个好、机器学习入门书籍多少钱等相关资讯,从机器学习入门书籍价格、评价、图片等多方面比较,为您推荐优质机器学习入门书籍产品!https://www.jd.com/phb/key_1713cf79424443e113a7.html
11.学习C语言必看的6本书籍编辑推荐丨这本书主要针对学习C语言的初学者,即使完全没有编程基础,也能够通过阅读本书快速掌握C语言的核心知识。 内容简介丨这本书是学习C语言的入门书籍,内容非常全面,包含C语言基础知识、流程控制、数组、函数、指针、字符串、结构体、链表、文件操作、栈和队列、自定义头文件、多文件编译、Linux下C文件的编译和https://www.yuwenmi.com/lizhi/shuji/444353.html
12.超详细算法岗的学习路线大总结!学习笔记:https://github.com/datawhalechina/leeml-notes 4. 书籍|《机器学习》 周志华的《机器学习》被大家亲切地称为“西瓜书”。这本书非常经典,讲述了机器学习核心数学理论和算法,适合有作为学校的教材或者中阶读者自学使用,入门时学习这本书籍难度稍微偏高了一些。 https://leetcode.cn/circle/discuss/SX3aa6/
13.学习JavaScript数据结构与算法(第3版)(豆瓣)本书首先介绍了JavaScript语言的基础知识(包括ECMAScript和TypeScript),其次讨论了数组、栈、队列、双端队列和链表等重要的数据结构,随后分析了集合、字典和散列表的工作原理,接下来阐述了递归的原理、什么是树以及二叉堆和堆排序,然后介绍了图、DFS和BFS算法、各种排序(冒泡排序、选择排序、插入排序、归并排序、快速排序https://book.douban.com/subject/33441631/
14.算法类书籍推荐:10本程序员必读的算法书籍潇湘读书社书单| 10本程序员必读的算法书籍推荐!我们为你总结了十本各具特色的算法书,学习课程的同时,阅读这些书籍,快速前进,离你的理想目标更近一步! 1.《算法导论》 Thomas H. Corman 这是最著名的算法书之一,但要注意它的理论性非常强。目前它已经出到了第三版。我强烈建议每个程序员都在书架上放一本算法导论,但只https://www.xiaoxiangguan.cc/79502.html
15.算法竞赛入门经典PDF扫描版电子书下载书籍类别:C/C++ 应用平台:PDF 更新时间:2014-04-18 购买链接:京东异步社区 网友评分: 360通过腾讯通过金山通过 43.84MB 详情介绍 算法竞赛入门经典简介: 本书是一本算法竞赛的入门教材,把C/C++语言、算法和解题有机地结合在了一起,淡化理论,注重学习方法和实践技巧。全书内容分为11章,包括程序设计入门、循环结构https://www.jb51.net/books/155734.html
16.蜡炬教育推荐:程序员必备的5本算法书籍原标题:蜡炬教育推荐:程序员必备的5本算法书籍 由于近几年大数据、机器学习、人工智能方向的持续火爆,算法越来越被程序员重视,实际上算法比编程语言本身更加重要。 今天,蜡炬教育老师就为大家推荐几本经典的算法书籍,包括从入门到专家级的算法书籍,对算法感兴趣的同学可以找来学习一下。 https://www.jianshu.com/p/ed6c6c6f2726