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

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

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

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.人工智能51CTO.COM算法 自然语言处理 语音识别 人脸识别 机器视觉 知识图谱 无人驾驶 机器人 开发 云计算 开源 大数据 网络 安全 全部话题 关注该话题的人还关注了 机器学习 2011内容 算法 1605内容 深度学习 1675内容 机器视觉 64内容 知识图谱 70内容 自然语言处理 109内容 机器人 914内容 人脸识别 460内容 我关注的话题 相关https://ai.51cto.com/
2.算法网站:6个非常适合学习编程/算法的网站,选一个你喜欢的吧本文推荐了6个适合学习和练习编程算法的网站,包括HackerRank、TopCoder、Geekforgeeks、LeetCode、Daily Coding Problem和Exercism.io,涵盖了从基础到高级的算法题,适合不同水平的开发者提升技能,部分网站还提供在线编程环境和代码性能评估。 摘要由CSDN通过智能技术生成 https://blog.csdn.net/qq_42366672/article/details/123920105
3.推荐几个算法可视化网站,从此轻松学算法!大家好,我是大彬~ 很多初学者在学习数据结构与算法的时候,都会觉得很难,很大一部分是因为数据结构与算法本身比较抽象,不好理解。对于这一点,可以通过一些可视化动画来帮助理解。 下面大彬推荐几个学习数据结构和算法的可视化工具。 Data Structure Visualizations 这是https://m.nowcoder.com/feed/main/detail/6ecdab56f00b44bfacf3cb854929059e
4.腾讯实验室推荐一些优秀的算法学习网站机器学习算法与Python实战 重磅干货,第一时间送达 作者: 腾讯安全联合实验室 链接: https://www.zhihu.com/question/20368410/answer/726247443 算法是程序的灵魂。 以下从在线题库、在线提交程序源代码等维度推荐一些优秀的网站,希望能对大家有所帮助。一、在线题库算法学习,本质上是学习一门语言。 学习语言的要领https://dy.163.com/v2/article/detail/ELF75C9Q0519EA27.html
5.全网最全程序员学习网站汇总,还不赶快收藏摘要:程序员是一个需要不断学习的职业。幸运的是,在这个互联网时代,知识就在那里,等着我们去获取。作为一个“收藏从未中止,学习从未开始”的博主,秉承着好东西不能独享的态度,把收藏的学习网站整理分享出来,希望大家不要学我,肯定要好好学习,天天进步,升职加薪?。好了,下面开始上货,因为博主是个Java程序员, https://www.songma.com/news/txtlist_i66992v.html
6.码上去学海南公司:算法推荐,必读的13本经典神书《百面机器学习:算法工程师带你去面试》这本书收录了100多道机器学习算法工程师的面试题目和解答,其中大部分源于美国著名视频网站Hulu算法研究岗位的真实场景。本书不仅介绍了机器学习的基础知识,而且还有成为优秀算法工程师的相关技能。以上就是本次分享的全部内容,想学习更多编程技巧,欢迎持续关注码上去学海南公司https://baijiahao.baidu.com/s?id=1814576886625465818&wfr=spider&for=pc
7.九章算法研究生的专业是计算机科学,但是当时毕业疫情的关系就没走相关的职业,后面是想转回去原本的跑道,开始花时间重新学习,先学习了九章算法2023版,刷题加看课学了3个多月,后又报了高频冲刺班学了2个月,总共学算法时间花了将近6个月,学习算法后开始报名学习系统设计和bq的课程,等到都学完之后,约了沙加老师的简历修改和http://jiuzhang.com/
8.的前端资源汇总仓库(包括前端学习开发资源数据结构与算法小鹿动画学编程 小鹿 lxq17853556107 https://github.com/luxiangqiang/Blog 全Github唯一动画仓库,用动画的形式把前端技术讲的淋漓尽致!也包括自己整理的前端面试和进阶文章分享,欢迎关注哦! 编程如画 大鹏 aaron875499765 https://github.com/guanpengchn/blog 全网最特别的画解算法,mdnice作者官方博客 前端思维框架 https://github.com/FrontEndGitHub/FrontEndGitHub
9.吴师兄学算法五分钟学算法吴师兄学算法(www.cxyxiaowu.com)提供许多数据结构与算法学习的基础知识, 涵盖 LeetCode 题解、剑指 Offer 题解、数据结构等内容。https://www.cxyxiaowu.com/
10.有哪些学习算法的网站推荐?推荐的讲解算法的网站、好博客: 讲解、代码格式、图表都很规范,覆盖广 Matrix67 的一些算法讲解类经典文章,平易近人 BYVoid 的博客,计算机科学标签 范浩强的博客 (曾经)的博客@顾昱洲 有口碑的稳定的在线题库: http://acm.timus.ru/** URAL http://uva.onlinejudge.org/** UVA http://acm.sgu.ru/index.https://www.jianshu.com/p/06ff13b234e3
11.代码随想录(豆瓣)推荐 内容简介· ··· 《代码随想录——跟着Carl学算法》归纳了程序员面试中的经典算法题,并按照由浅入深、循序渐进的顺序讲解。 《代码随想录——跟着Carl学算法》首先讲解程序员面试时需要了解的制作简历的技巧和IT名企的面试流程,以及面试时经常忽略的代码规范性问题。然后详细分析程序的时间复杂度和空间复杂库https://book.douban.com/subject/35680544/
12.台风科学研究为防灾减灾强支撑台风尺度估算研究采用了静止气象卫星红外观测数据、中国气象局和联合台风警报中心(JTWC)的最佳路径资料,以及少量的台风中心和外围飞机观测报数据;选用多层感知器(MLP)、广义回归神经网络(GRNN)等5种典型的机器学习算法,建立卫星观测及台风本体物理属性信息与台风特征大风半径之间的非线性关系。 https://www.cma.gov.cn/2011xwzx/2011xqxxw/2011xqxyw/202305/t20230531_5541701.html
13.基于影像学的血流储备分数衍生指标研究进展2020年中国一项多中心研究利用计算流体动力学(CFD)算法测定的CT-FFR检测病变的特异性缺血,结果显示CT-FFR对每支血管的诊断准确性、敏感度和特异度分别为91%、89%和91%,而CCTA为55%、92%和34%,侵袭性冠状动脉造影为58%、94%和37%,CT-FFR具有更高的特异度、准确性和受试者工作特征(ROC)曲线下面积,但是在https://www.medsci.cn/article/show_article.do?id=24c7294603a7