【算法基础三】算法如何入门?零基础入门算法应该学些什么?

✅作者简介:大家好,我是新小白2022,让我们一起学习,共同进步吧!
个人主页:新小白2022的CSDN博客
系列专栏:算法基础入门
如果觉得博主的文章还不错的话,请点赞+收藏⭐️+留言支持一下博主哦

 系列文章目录

   算法学习打卡

第一章  字符编码分类(算法基础一)

第二章   双飞本科学习动力,方向(算法基础二)

第三章   零基础入门算法应该学些什么(算法基础三)

第四章  小项目实战(通讯录管理系统) 

第五章 项目实战自我总结

第六章  快捷键操作(单行/多行注释) 

第七章  随机种子与随机数(冷知识)

第八章   谁的大学不迷茫?计算机相关专业该怎样度过?

 第九章   致新手——计算机考研都需要准备什么?

 第十章  作为程序员,是什么让你坚持不懈地学习?


目录

 系列文章目录

前言

一、什么是数据结构与算法

二、学习的重点在什么地方?

三、切勿盲目刷题:刷题前的知识积累

 1、提高数据结构与算法没啥捷径,最好的捷径就是多刷题。

 2、AC不是目的,我们要追求完美

 3、挑战自己,跳出舒适区

 4、再说数据结构重要性

三、从0基础小白,到ACM亚洲区域赛金牌

 1、知识轮廓

 2、学一门基础的程序设计语言

 3、选择一本适合自己的参考书

 4、刷题实践

 5、如何正确做一道题

从简入手

优化

构思代码

写代码

Debug

总结与反思

总结


前言

这篇文章不是让你成为大神的,学完也不是多厉害,而是,给处于大学迷茫、不知道学啥的你,一个学习的方向,无论你是否是科班。不过我相信,当你看完这些,你应该会有自己的学习方向。


一、什么是数据结构与算法


1、程序 = 数据结构 + 算法,足以看出他们的重要性,但感觉平时编程没有刻意用到他们,其实这只是感觉,代码的字里行间无不在使用。

一个常见的心理路程就是:

开始学习时,感觉他们没什么用,平时敲代码也用不到,没有在代码里刻意设计过
学习一段时间,发现以前写代码都在悄悄的用到,然后开始刻意按照规则设计代码
时间久了,又感觉没有用到了,其实是在下意识的用了,只是用的时候没有刻意贴上“数据结构与算法”的标签

2. 算法
操作数据的一组方法。

算法的设计取决于逻辑结构,算法的实现依赖于存储结构。

3. 数据结构与算法
数据结构是为算法服务的,算法要作用在特定的数据结构之上。无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。

二、学习的重点在什么地方?

提到数据结构和算法,很多人就很头疼,因为这里面的内容实在是太多了。这里,我就帮你梳理一下,应该先学什么,后学什么。你可以对照看看,你属于哪个阶段,然后有针对地进行学习。

想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念——复杂度分析

这个概念究竟有多重要呢?可以这么说它几乎占了数据结构和算法这门课的半壁江山,是数据结构和算法学习的精髓!必须要拿下,并且要搞得非常熟练。否则后面的数据结构和算法也很难学好。

为了让你对数据结构和算法能有个全面的认识,从优秀博客这里找了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点!

【算法基础三】算法如何入门?零基础入门算法应该学些什么?_第1张图片

作为初学者,或者一个非算法工程师来说,你并不需要掌握图里面的所有知识点。

很多高级的数据结构与算法,比如二分图、最大流等,这些在我们平常的开发中很少会用到。所以,你暂时可以不用看。我还是那句话,咱们学习要学会找重点。如果不分重点地学习,眉毛胡子一把抓,学起来肯定会比较吃力

总结了20个最常用的、最基础数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这20个知识点就足够了。

这里面有10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;

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

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

学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。你的编程内功就真正得到了修炼。

三、切勿盲目刷题:刷题前的知识积累

 1、提高数据结构与算法没啥捷径,最好的捷径就是多刷题。

但是,刷题的前提是你要先学会一些基本的数据结构与算法思想。(优秀博客分享连续三年刷题)

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

 2、AC不是目的,我们要追求完美

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

在做题的时候,要力求一题多解,如果自己实在想不出来其他办法了,可以去看看别人是怎么做的,千万不要觉得模仿别人的做法是件丢人的事。衡量一道算法题的好坏无非就是时间复杂度空间复杂度,所以我们要力求完美,就要把这两个降到最低,令他们相辅相成。

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

 3、挑战自己,跳出舒适区

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

但是,记住,前期你可以多刷这种题练手,提升自己的乐趣,但,我还是建议你慢慢跳出舒适区,去做一些自己不擅长的题,并且找段时间一直刷这种题。例如我觉得我在递归方面的题还是挺强的

但是,我对动态规划的题,很菜,每次都要想好久,每次遇到这种题都有点害怕,没什么信心。不过有段时间我觉得只刷动态规划的题,直接在 leetcode 选定专题,连续做了七八十道,刚开始很难受,后来就慢慢知道了套路了,一道题从两三个小时最后缩到半小时,简单的十几分钟就搞定。感觉自己对这类型的题也不惧怕的。

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

 4、再说数据结构重要性

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

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

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

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

4、队列、栈、矩阵。

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

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

三、从0基础小白,到ACM亚洲区域赛金牌

优秀博主分享

【算法基础三】算法如何入门?零基础入门算法应该学些什么?_第2张图片

 1、知识轮廓

首先我们要在大脑中初步建立算法与数据结构知识的结构,有助于我们后面学习到某一块知识,可以知道我们当前的学习的知识属于哪个模块,进而在脑中对知识点进行分类和总结,对后续的刷题和学习都十分帮助。

【算法基础三】算法如何入门?零基础入门算法应该学些什么?_第3张图片

 2、学一门基础的程序设计语言

这里推荐学习 C++/Java/Go/Python。这几个是目前比较主流的语言,如果你已经会其中的一种,学习算法与数据结构就够了。

会的意思是指: 会题目要求的基础的输出和输出,了解语言基础的语法,可以根据题目要求,能用语言实现自己的思路。

注意一点,如果目标是在学习算法和数据结构,不要对语言的细节进行过分的深入,耽误过多时间。只要会基本的语法可以实现算法的思路就可以了。

 3、选择一本适合自己的参考书

初学者从简入手,选择一本薄、相对容易、看得进去的书,建立学习算法的信心

这里推荐几本得到很多好评的两本书。

《算法红宝书第四版》

对每一个算法知识点讲得都很详细,同时不是很繁琐,比较容易上手。

【算法基础三】算法如何入门?零基础入门算法应该学些什么?_第4张图片

《图解算法》

图例很多,语言通俗易懂,学起来比较有意思。

《算法导论》

大家小学的时候肯定都有字典或工具书。

我们就可以把《算法导论》当做工具书来使用,在学完了基本的算法与数据结构,大家想对某一个知识深入学习或者复习的时候,这个时候可以查一查《算法导论》。

【算法基础三】算法如何入门?零基础入门算法应该学些什么?_第5张图片

 4、刷题实践

纸上得来终觉浅,绝知此事要躬行!

对于算法和数据结构,最好的检验学习成果的方式,就是刷题!

所以推荐大家学习一个知识点后,去刷一点对应知识点的题目巩固和加深一下理解

 5、如何正确做一道题

从简入手

有的时候一下想到时间复杂度最低的解法是很难的,就像一口吃不成胖子。

所以我们可以先从简单暴力(时间复杂度高)的方法入手,可以发现一些题目的线索,为后面想到时间复杂度最低的方法打下基础。

优化

思考如何在第一步的基础上,如何优化算法,这里可以学习常见优化的算法与数据结构来降低时间复杂度。比如: 哈希表、二分算法、动态规划等

构思代码

有了以上两步,我们此时应该已经有了一个正确的想法,此时我们应该构思代码,有那几部分,每部分实现什么功能,代码怎么写。而不是直接闷头去写代码,因为很多时候没想清楚,直接去写代码,会导致写了一半发现思路不对,之前写的代码前功尽弃。

写代码

实现第三步代码,写代码的时候要专注,写完要自己先检查一遍有没有手误,防止自己想的和写的不一致,最后写一个简单的样例,测试一下代码是否可以通过。测试通过了就可以提交啦。

Debug

如果代码通过了,可以直接看下一步。

如果我们的题目没有通过,应该检查代码是不是有bug、思路对不对。

有的时候肉眼看不出的时候,可以出几组复杂的测试样例,看看自己的代码是否可以输出正确的结果,若不能的话,可以根据样例看代码哪里有问题。

总结与反思

题目通过了,我们应该总结一下这道题考察的知识点、切入的角度、同类型的题目等,还要思考有没有更优的办法,代码还能不能更加简洁一些。

做到以上几点,一道题的就学习的很透彻了,遇到同类型的题目也可以举一反三。


总结

知识需要沉淀,不要想试图一下子掌握所有。在学习的过程中,一定会碰到“拦路虎”。如果哪个知识点没有怎么学懂,不要着急,这是正常的。因为,想听一遍、看一遍就把所有知识掌握,这肯定是不可能的。永远记住学习知识的过程是反复迭代、不断沉淀的过程

这句话是不是不太完整?学习知识的过程是反复迭代、不断沉淀、乐于分享的过程!

多谢前辈优秀文章!!!

1、时间复杂度(优秀博客)

2、如何正确学习数据结构、算法这门课?(应试)​​​​​​ ​​​​​

3、连续三年刷题(经验)

4、 从小白到ACM金牌大神 

【算法基础三】算法如何入门?零基础入门算法应该学些什么?_第6张图片

你可能感兴趣的:(算法与数据结构,算法,数据结构,c++)