系列笔记链接
《趣学算法(第2版)》读书笔记 Part 1 :如何高效学习算法
《趣学算法(第2版)》读书笔记 Part 3 :贪心算法基础(理论)
《趣学算法(第2版)》读书笔记 Part 4 :贪心算法基础(操作)
如何高效学习算法
对应图书前言部分及挑战赛开营直播
文章目录
Flag
任何时候都不要等待,先迈出第一步。
Step by Step.
希望整本书坚持读完再回头看笔记时,我能庆幸自己不仅仅是参与过、努力过,而是真正学有所获。
写在前面
直播流水账不能水,是小白最后的倔强。
这竟然是我在 CSDN 写的第一篇博文…(战战兢兢,如履薄冰)…阅读挑战赛开营的前夜还在捣腾着学Markdown和HTML基础语法…
学识尚浅,笔记难免会有错漏和不足,欢迎评论指出。随着后续的学习,只要有时间,前期的博文也会仔细做增补、修改。
希望这些笔记对正在学习算法的你也有所帮助,一起学习,一起进步。
The real purpose of books is to trap the mind into doing its own thinking.书籍的真正目的在于诱导头脑自己去思考。
—— Christopher Morley 克里斯托弗·莫利
还在直播间探讨有没有签名时,购买的纸质图书就已寄出…好吧,我决定打印一张签名截图固定在图书扉页里。这里附上作者老师的亲笔签名:
相比预告的11月30日出版时间,能提早拿到纸质图书,还是要感谢出版社的老师们。阅读时如果能在实体书里勾画、标注,感觉更有利于学习、理解。
阅读挑战赛直播
直播回放
-
直播时间:2022.10.17 20:00
-
直播主题:如何高效学习算法
-
直播平台:
异步社区(微信视频号)
CSDN(微信视频号) -
直播简介:
直播全程由作者老师 陈小玉 主讲。
主要结合图书前言部分介绍新版《趣学算法(第2版)》的特点和建议阅读方法、对算法学习和面试的建议、直播答疑等。
更多直播细节可参考微信视频号的 直播回放 。 -
直播回放地址:
错过直播的同学可以打开微信视频号,右上角搜索用户异步社区或CSDN关注。
然后,在对应视频号的 直播回放 里可找到此次直播的完整回放视频。
直播内容
图书和作者
- 《趣学算法(第2版)》
豆瓣评分8.9 。
已成功申请到国家十四五规划教材(五年才可申请一次)。
新版图书精简了部分内容,增加实用性更强的第八章,增加实际应用算法,增加高频面试算法。随书配有源代码、课件、配套视频、在线答疑、在线测试等丰富的立体化教学资源。 - 图书内容提要
全书按照算法策略分为8章。
第1章以算法之美、趣味故事引入算法,讲解算法复杂度的计算方法。
第2-7章经典算法,包括贪心算法、分治算法、动态规划、回溯法、分支限界法、网络流。
第8章实际应用中的算法和高频面试算法,包括启发式搜索、敏感词过滤、LRU算法、快慢指针、单调栈、单调队弘、零钱兑换、股票交易。
每一种经典算法都有4-8个实例,按照问题分析、算法设计、完美图解、算法详解、算法分析及优化拓展进行讲解。 - 陈小玉
作者老师。
著作有《趣学算法》、《趣学算法(第2版)》、《趣学数据结构》、《算法训练营:海量图解+竞赛刷题》(入门篇、进阶篇)。
B站个人主页有部分数据结构与算法教学视频。
为什么要学算法
如今小学四年级学生就开始学算法了,为什么大家都在学习算法?
冲击高薪、算法是程序设计的基本内功、提升核心竞争力
学习算法的好处
思维清晰、学习力强、视野开阔、心智成熟
如何高效学习算法
N.Wirth教授:数据结构+算法=程序。
从基础算法学起,宽基础,精技术。
本书涉及三个方面的算法:①经典算法②实用算法③面试算法
先系统的学习数据结构与算法基础知识,然后进行刷题实战,循序渐进。
高效学习算法的三个层次:
- 会数据结构的基本操作和经典算法
- 会利用数据结构与算法,解决实际问题
- 熟练使用和改进数据结构,优化算法
高效学习算法的步骤:
- 看书+视频
学经典,多理解。选择图解较多的入门书,结合视频先理解,再自己动手运行。
结合视频学习,可以帮助理解抽象的问题分析过程。 - 题解+刷题
看题解,多总结。在刷题网站进行专项练习。总结题目类型,最优解法。
首先,每次专门针对一种算法进行练习,专攻。
其次,不会的题目先自己独立思考再去看题解,然后按自己的理解思路敲一遍代码。靠多次练习加深记忆,杜绝复制粘贴和死记硬背。
最后,每次刷题一定要作总结和反思。 - 刷题+总结
快速,bug free。通过专项刷题,总结常用的算法模板,灵活运用,举一反三。
总结刷题常用的算法模板,让你的代码最终尽可能一次就达到 bug free(无缺陷)的效果。
如何进行刷题训练
什么时候刷题
看书学完一种算法之后就去找相关的简单题目开始刷题,注意从易到难。
刷题时,先在编译系统中编译通过、测试用例通过,检查无误后再提交。因为比赛中,多次提交会罚时。
在哪里刷题
使用在线测试系统OJ(Online Judge)刷题,推荐的刷题网站:
推荐用Vjudge,注册一个帐号即可使用三十多个OJ网站题目资源。
- 打比赛:Vjudge,POJ,HDU,Code Forces,洛谷
Vjudge
Virtual Judge,集成了32个OJ(Online Judge系统,即在线判题系统)网站的门户平台。
地址 <https://vjudge.net/>
vjudge使用指南 <https://blog.csdn.net/weixin_52341477/article/details/122063233>
Virtual Judge使用介绍 <https://blog.csdn.net/fymx203/article/details/89343782>
POJ
Peking University Online Judge 北京大学程序在线评测系统
地址 <http://www.poj.openjudge.cn/>
官方简介(链接) <https://center.pku.edu.cn/zxts/pojxt/index.htm>
百度百科简介 <https://baike.baidu.com/item/POJ/3812218?fr=aladdin>
HDU
Hangzhou Dianzi University Online Judge 杭州电子科技大学在线评测系统
地址 <http://acm.hdu.edu.cn/> (经测试,该地址已404)
HDU杭电ACMOJ训练指南 <https://blog.csdn.net/weixin_45333934/article/details/108814279>
Code Forces
简称CF,是一家为计算机编程爱好者提供在线评测系统的俄罗斯刷题网站。由萨拉托夫国立大学的一个团体创立并负责运营。
地址 <https://codeforces.com/problemset>
Codeforces的使用 <https://blog.csdn.net/weixin_43715214/article/details/89142596>
全世界最强的算法平台codeforces究竟有什么魅力? <https://blog.csdn.net/TechFlow/article/details/108842133>
codeforces 刷题指南 <https://blog.csdn.net/cmershen/article/details/83996514>
Codeforces科学刷题指南 <https://blog.csdn.net/qq_16964363/article/details/79224776>
最新codeforces的rating评级 <https://blog.csdn.net/weixin_45529716/article/details/105913804>
Codeforces游玩攻略(入门)<https://www.sohu.com/a/245025892_100201031>
Codeforces快速精通(进阶)<https://www.luogu.org/blog/ezoixx130/codeforces-advanced-tutorial>
VSCODE codeforces 插件 <https://blog.csdn.net/CQUWEL/article/details/117710216>
洛谷
洛谷Online Judge,是基于网页形式的信息学在线评测系统。
官方简介 <https://www.luogu.com.cn/blog/luogu/about-luogu>
知乎简介 <https://zhidao.baidu.com/question/1436293475539527979.html>
(入门系列)洛谷功能全解 <https://blog.csdn.net/rrc12345/article/details/122500057>
洛谷百科全书(一) <https://blog.csdn.net/Y_bluefat/article/details/115592598>
洛谷-各个评测状态 <https://blog.csdn.net/mengdicfm/article/details/82963581/>
- 找工作:LeetCode
LeetCode
力扣,是一个为用户提供编程训练的OJ网站。源自美国硅谷,致力于为全球程序员提供专业的IT技术职业化提升平台。
地址 <https://leetcode.cn/>
官方简介 <https://leetcode.cn/brand/?utm_source=main-footer&utm_medium=footer-link>
LeetCode Cookbook(LeetCode中文刷题手册) <https://github.com/halfrost/LeetCode-Go>
- 其它刷题网站参考:
程序员专用刷题网站大全 <https://blog.csdn.net/python2021_/article/details/124400768>
超好用的ACM刷题网站 <https://blog.csdn.net/qq_43929617/article/details/105917026>
ACM团队队员常用训练网站 <http://coi.hzau.edu.cn/info/1183/4730.htm>
提交结果类型
简称 | 全称 | 中文释义 | Action | 备注 |
---|---|---|---|---|
AC | Accepted | 通过 | 常见 | |
WA | Wrong Answer | 答案错误 | 冷静分析算法逻辑,易错点,特殊情况判断等。 | 较常见。 |
TLE | Time Limit Exceed | 超时 | 选择的数据结构和算法是否合适,是否有死循环 | 较常见,指代码运行时间超过限制。 |
MLE | Memory Limit Exceed | 超内存 | 很少见。 | |
OLE | Output Limit Exceed | 超过输出限制 | ||
RE | Runtime Error | 运行时错误 | ||
PE | Presentation Error | 输出格式错误 | ||
CE | Compile Error | 编译错误 |
提交不通过怎么办
测试用例通过了,但提交不通过是很正常的,因为测试用例仅仅是一两组数据,而后台有大量测试数据。遇到提交不通过,要冷静的根据错误类型分析原因。
- WA答案错:冷静分析算法逻辑,易错点,特殊情况判断等。重新梳理一遍所写代码、算法逻辑,找到错误点。
- TLE超时:数据结构和算法是否合适?是否有死循环?写代码前一定要注重问题分析,特别留意所选算法的时空复杂性,避免写好的数据结构和算法最后因不适用于当前程序而产生TLE超时。
如何判断超时
看题目时要看数据规模、时间限制和空间限制,设计算法时是否超时超限,心中有数。
如果限制时间为1s,则问题规模和时间复杂度之间的关系为:
问题规模 | 时间复杂度 |
---|---|
n<=11 | O(n!) |
n<=25 | O(2n) |
n<=5000 | O(n2) |
n<=106 | O(nlogn) |
n<=107 | O(n) |
n>108 | O(logn) |
记录坑点
在刷题的过程中,将坑点记录下来,避免下次踩坑。把常犯、易犯的错误都用笔记的形式记录下来,类似错题本。
下面是一些例子(基于C++语言):
int a[1000];//静态数组
memset(a,0,sizeof(a)); //清零 memset(a,-1,sizeof(a));//初始化-1
memset(a,0x3f,sizeof(a)); //无穷大0x3f3f3f3f
动态数组不可以直接用sizeof测量空间:
const int maxn=10000;
int *a = new int[maxn]; //动态数组
memset(a,0x3f,maxn*sizeof(int));//无穷大
fill(a,a+maxn, 0x3f3f3f3f);//使用fill函数
如何准备算法面试
- 平时积累
用1-2年的时间学习数据结构与算法、竞赛刷题。
算法竞赛获奖。
学算法的前提是先学会一门编程语言,推荐C++,通常零基础1-2个月就能学会。先花较少的时间掌握一门编程语言的基础语法,高级语法在后续的算法学习中会逐渐接触,再逐步学习。 - 面试准备
1-3个月leetcode刷题。
刷企业面试题库。
在达成第一点基本功积累的基础上,提前1-3个月在leetcode刷题做面试准备。 - 模拟面试
检验学习情况。
查漏补缺。
检验应对面试题的代码快速提交、Bug free等。 - 其它知识准备
针对某个企业的常见面试问题准备。
直播答疑(选录)
-
问:没有数据结构和算法基础可以学《趣学算法(第2版)》吗?
答:可以,先开始看《趣学算法(第2版)》,遇到有需要数据结构知识的部分再去查阅视频、博文、书籍等相关资料。
因为本书在讲解算法过程时,大多是使用图解的方式展示。另有配套视频和作者在线答疑支持学习。 -
问:比赛刷题和面试刷题有什么区别?
答:有很大的区别。
比赛刷题主要考察你解决复杂问题的能力,取算法最优解。算法比赛含金量较高,不管是什么层次、类型的比赛,尽可能去拿金牌,保证含金量。
面试刷题则相对简单,主要考察你的算法复杂性,即同样问题下你能不能给出更好的算法。
总结
学习方法:费曼学习法
参考文献资料:
《费曼学习法》:世界公认最好的高效学习方法
If you can’t explain it simply, you don’t understand it well enough. 如果你不能简单说清楚,那就是你没完全明白。
—— Albert Einstein 阿尔伯特·爱因斯坦(1879-1955)
-
传统的学习方法,是死记硬背的输入模式,通过机械背诵,让大脑在短时间内被动记忆新的知识点。容易忘、效率低、比较难转化为自己的知识体系。
-
费曼主张的以教代学输出模式,是用最简洁、直白的语言去阐述知识点,此时大脑会从记忆库中自动提取那些熟悉的信息,让新旧知识主动产生关联,从而使新知识容易得到大脑彻底的理解。
1965年,美国物理学家理查德·费曼获诺贝尔物理学奖。费曼写有一本自传《别闹,费曼先生》,正是在这本书中,他总结出了 “费曼学习法”。
费曼学习法 “以教促学”:把你学到的,讲给别人听,最好是完全不懂的人。
费曼学习法的核心观点:目标、理解、输出、回顾、简化。
目标
为了通过学习建立自己行之有效的思维框架,并运用知识解决生活和工作中的实际问题。必须要有清晰的目标,有高效能的学习计划,带着强烈的兴趣去思考,还要遵循一些必要的原则。
理解
首先是“学习的方法论”,其次才是学习的具体技能。
方法论的核心是系统化,即对要学习的知识点进行归类对比,系统理解这些内容,建立筛选和学习的原则。
建立思维导图,复盘一次思路,加深对学习内容的理解。
输出
从学习方式与内容留存率分析可以看出,输出是最强的学习力,这种“以教代学”模式是费曼学习法的核心。输出,是一个强化提升的过程。当要输出这些知识时,才清楚自己究竟掌握了多少,发现那些还需要强化和加深理解的内容。
回顾
回顾是一个查漏补缺、消除盲维的纠错过程。就像海中冰山隐藏在海面以下的部分。
回顾的过程,是主动地查找与总结、反思和修正。
简化
学习要尽可能地简化,只学习需要的、重要的、知识之中“最核心的知识”。
“费曼学习法”四个步骤:
-
第一步,确定一个要学习的概念,然后尽可能多的搜集阅读与其相关的资料,并在此过程中做好笔记。
-
第二步,尝试把这个概念教给他人。把你学到的东西通俗易懂的讲出来。
-
第三步:发现教学过程中的缺陷并解决它,重新教给他人,直到零基础的听众也能轻松理解。 在第二步中,你不可避免地会卡壳,忘记重点、无法合理解释、无法将重要的概念联系起来。此时,就再回过头去阅读和理解那些资料,搞清楚问题所在并解决它。
-
第四步:去掉专业术语,将语言条理化并简化,让5岁的小朋友也能马上理解你所讲述的概念。
当这四步完成之后,你就真正吃透了所学的概念。
实际运用中,也可使用文字语言把所学的知识点写清楚。
使用“费曼学习法”需把握的几个要点:
- 勤记笔记,不能光是埋头学习。
- 一定要用自己的语言讲出来,至少也要写出来。
- 确保简单直白,最好能够用一两句话就讲得非常清楚。
大佬营友们的笔记(持续更新)
子曰:三人行,必有我师焉。
Day 1
- 破晓之翼 https://ghdata.blog.csdn.net/article/details/127356151
- 小冷coding http://t.csdn.cn/FMifi
- 小冷coding http://t.csdn.cn/eefmb
Day 2
- Long_xu https://blog.csdn.net/Long_xu/article/details/127317486?spm=1001.2014.3001.5501
- uniquewonderq https://yunhe.blog.csdn.net/article/details/127292463
- 重邮研究森 https://blog.csdn.net/m0_60524373/article/details/127383863
- 随风飘絮 http://t.csdn.cn/ljg9o
- 柠檬味的榴莲 http://t.csdn.cn/4q17U
- 愿&空 http://t.csdn.cn/p05sD
- Lq@@ https://blog.csdn.net/flq18210105507/article/details/127387932?spm=1001.2014.3001.5501
- 颹蕭蕭 https://blog.csdn.net/itnerd/article/details/127394221
- 破晓之翼 http://t.csdn.cn/WwSBP
- @小默同学 http://t.csdn.cn/nuqqC
- Thomas.杨 https://blog.csdn.net/QENGFENG/article/details/127397102?spm=1001.2014.3001.5501
- 跟着飞哥学编程 https://blog.csdn.net/weixin_36754290/article/details/127305965?utm_source=app&app_version=5.2.0
- IT从业者张某某 https://blog.csdn.net/m0_38139250/article/details/127377451
- 周小末 http://t.csdn.cn/ki6F8
- 冯运山 http://t.csdn.cn/dXezF