《趣学算法(第2版)》读书笔记 Part 1 :如何高效学习算法

14天阅读挑战赛


系列笔记链接

《趣学算法(第2版)》读书笔记 Part 1 :如何高效学习算法

《趣学算法(第2版)》读书笔记 Part 2 :算法入门

《趣学算法(第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关注。
    然后,在对应视频号的 直播回放 里可找到此次直播的完整回放视频。


直播内容

  1. 图书和作者
  2. 为什么要学算法
  3. 学习算法的好处
  4. 如何高效学习算法
  5. 如何进行刷题训练

图书和作者

  • 《趣学算法(第2版)》
    豆瓣评分8.9 。
    已成功申请到国家十四五规划教材(五年才可申请一次)。
    新版图书精简了部分内容,增加实用性更强的第八章,增加实际应用算法,增加高频面试算法。随书配有源代码、课件、配套视频、在线答疑、在线测试等丰富的立体化教学资源。
  • 图书内容提要
    全书按照算法策略分为8章。
    第1章以算法之美、趣味故事引入算法,讲解算法复杂度的计算方法
    第2-7章经典算法,包括贪心算法、分治算法、动态规划、回溯法、分支限界法、网络流。
    第8章实际应用中的算法和高频面试算法,包括启发式搜索、敏感词过滤、LRU算法、快慢指针、单调栈、单调队弘、零钱兑换、股票交易。
    每一种经典算法都有4-8个实例,按照问题分析、算法设计、完美图解、算法详解、算法分析及优化拓展进行讲解。
  • 陈小玉
    作者老师。
    著作有《趣学算法》、《趣学算法(第2版)》、《趣学数据结构》、《算法训练营:海量图解+竞赛刷题》(入门篇、进阶篇)。
    B站个人主页有部分数据结构与算法教学视频。

为什么要学算法

如今小学四年级学生就开始学算法了,为什么大家都在学习算法?

冲击高薪、算法是程序设计的基本内功、提升核心竞争力

学习算法的好处

思维清晰、学习力强、视野开阔、心智成熟

如何高效学习算法

N.Wirth教授:数据结构+算法=程序。

从基础算法学起,宽基础,精技术。
本书涉及三个方面的算法:①经典算法②实用算法③面试算法
先系统的学习数据结构与算法基础知识,然后进行刷题实战,循序渐进。

高效学习算法的三个层次:

  1. 会数据结构的基本操作和经典算法
  2. 会利用数据结构与算法,解决实际问题
  3. 熟练使用和改进数据结构,优化算法

高效学习算法的步骤:

  1. 看书+视频
    学经典,多理解。选择图解较多的入门书,结合视频先理解,再自己动手运行。
    结合视频学习,可以帮助理解抽象的问题分析过程。
  2. 题解+刷题
    看题解,多总结。在刷题网站进行专项练习。总结题目类型,最优解法。
    首先,每次专门针对一种算法进行练习,专攻。
    其次,不会的题目先自己独立思考再去看题解,然后按自己的理解思路敲一遍代码。靠多次练习加深记忆,杜绝复制粘贴和死记硬背。
    最后,每次刷题一定要作总结和反思。
  3. 刷题+总结
    快速,bug free。通过专项刷题,总结常用的算法模板,灵活运用,举一反三。
    总结刷题常用的算法模板,让你的代码最终尽可能一次就达到 bug free(无缺陷)的效果。

如何进行刷题训练

  1. 什么时候刷题
  2. 在哪里刷题
  3. 提交结果类型
  4. 提交不通过怎么办
  5. 如何判断是否超时
  6. 记录坑点

什么时候刷题

看书学完一种算法之后就去找相关的简单题目开始刷题,注意从易到难。
刷题时,先在编译系统中编译通过、测试用例通过,检查无误后再提交。因为比赛中,多次提交会罚时。

在哪里刷题

使用在线测试系统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备注
ACAccepted通过常见
WAWrong Answer答案错误冷静分析算法逻辑,易错点,特殊情况判断等。较常见。
TLETime Limit Exceed超时选择的数据结构和算法是否合适,是否有死循环较常见,指代码运行时间超过限制。
MLEMemory Limit Exceed超内存很少见。
OLEOutput Limit Exceed超过输出限制
RERuntime Error运行时错误
PEPresentation Error输出格式错误
CECompile Error编译错误

提交不通过怎么办

测试用例通过了,但提交不通过是很正常的,因为测试用例仅仅是一两组数据,而后台有大量测试数据。遇到提交不通过,要冷静的根据错误类型分析原因。

  • WA答案错:冷静分析算法逻辑,易错点,特殊情况判断等。重新梳理一遍所写代码、算法逻辑,找到错误点。
  • TLE超时:数据结构和算法是否合适?是否有死循环?写代码前一定要注重问题分析,特别留意所选算法的时空复杂性,避免写好的数据结构和算法最后因不适用于当前程序而产生TLE超时。

如何判断超时

看题目时要看数据规模时间限制空间限制,设计算法时是否超时超限,心中有数。
如果限制时间为1s,则问题规模和时间复杂度之间的关系为:

问题规模时间复杂度
n<=11O(n!)
n<=25O(2n)
n<=5000O(n2)
n<=106O(nlogn)
n<=107O(n)
n>108O(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. 平时积累
    用1-2年的时间学习数据结构与算法、竞赛刷题。
    算法竞赛获奖。
    学算法的前提是先学会一门编程语言,推荐C++,通常零基础1-2个月就能学会。先花较少的时间掌握一门编程语言的基础语法,高级语法在后续的算法学习中会逐渐接触,再逐步学习。
  2. 面试准备
    1-3个月leetcode刷题。
    刷企业面试题库。
    在达成第一点基本功积累的基础上,提前1-3个月在leetcode刷题做面试准备。
  3. 模拟面试
    检验学习情况。
    查漏补缺。
    检验应对面试题的代码快速提交、Bug free等。
  4. 其它知识准备
    针对某个企业的常见面试问题准备。

直播答疑(选录)

  • 问:没有数据结构和算法基础可以学《趣学算法(第2版)》吗?
    答:可以,先开始看《趣学算法(第2版)》,遇到有需要数据结构知识的部分再去查阅视频、博文、书籍等相关资料。
    因为本书在讲解算法过程时,大多是使用图解的方式展示。另有配套视频和作者在线答疑支持学习。

  • 问:比赛刷题和面试刷题有什么区别?
    答:有很大的区别。
    比赛刷题主要考察你解决复杂问题的能力,取算法最优解。算法比赛含金量较高,不管是什么层次、类型的比赛,尽可能去拿金牌,保证含金量。
    面试刷题则相对简单,主要考察你的算法复杂性,即同样问题下你能不能给出更好的算法。


总结

学习方法:费曼学习法

参考文献资料:
《费曼学习法》:世界公认最好的高效学习方法

If you can’t explain it simply, you don’t understand it well enough. 如果你不能简单说清楚,那就是你没完全明白。
—— Albert Einstein 阿尔伯特·爱因斯坦(1879-1955)

  • 传统的学习方法,是死记硬背的输入模式,通过机械背诵,让大脑在短时间内被动记忆新的知识点。容易忘、效率低、比较难转化为自己的知识体系。

  • 费曼主张的以教代学输出模式,是用最简洁、直白的语言去阐述知识点,此时大脑会从记忆库中自动提取那些熟悉的信息,让新旧知识主动产生关联,从而使新知识容易得到大脑彻底的理解。

1965年,美国物理学家理查德·费曼获诺贝尔物理学奖。费曼写有一本自传《别闹,费曼先生》,正是在这本书中,他总结出了 “费曼学习法”。

费曼学习法 “以教促学”:把你学到的,讲给别人听,最好是完全不懂的人。

在这里插入图片描述
费曼学习法的核心观点:目标、理解、输出、回顾、简化。

目标
为了通过学习建立自己行之有效的思维框架,并运用知识解决生活和工作中的实际问题。必须要有清晰的目标,有高效能的学习计划,带着强烈的兴趣去思考,还要遵循一些必要的原则。

在这里插入图片描述

理解
首先是“学习的方法论”,其次才是学习的具体技能。
方法论的核心是系统化,即对要学习的知识点进行归类对比,系统理解这些内容,建立筛选和学习的原则。
建立思维导图,复盘一次思路,加深对学习内容的理解。

在这里插入图片描述

输出
从学习方式与内容留存率分析可以看出,输出是最强的学习力,这种“以教代学”模式是费曼学习法的核心。输出,是一个强化提升的过程。当要输出这些知识时,才清楚自己究竟掌握了多少,发现那些还需要强化和加深理解的内容。

在这里插入图片描述

回顾
回顾是一个查漏补缺、消除盲维的纠错过程。就像海中冰山隐藏在海面以下的部分。
回顾的过程,是主动地查找与总结、反思和修正。

在这里插入图片描述

简化
学习要尽可能地简化,只学习需要的、重要的、知识之中“最核心的知识”。

“费曼学习法”四个步骤:

  • 第一步,确定一个要学习的概念,然后尽可能多的搜集阅读与其相关的资料,并在此过程中做好笔记。

  • 第二步,尝试把这个概念教给他人。把你学到的东西通俗易懂的讲出来。

  • 第三步:发现教学过程中的缺陷并解决它,重新教给他人,直到零基础的听众也能轻松理解。 在第二步中,你不可避免地会卡壳,忘记重点、无法合理解释、无法将重要的概念联系起来。此时,就再回过头去阅读和理解那些资料,搞清楚问题所在并解决它。

  • 第四步:去掉专业术语,将语言条理化并简化,让5岁的小朋友也能马上理解你所讲述的概念。

当这四步完成之后,你就真正吃透了所学的概念。
实际运用中,也可使用文字语言把所学的知识点写清楚。

在这里插入图片描述

使用“费曼学习法”需把握的几个要点:

  1. 勤记笔记,不能光是埋头学习。
  2. 一定要用自己的语言讲出来,至少也要写出来。
  3. 确保简单直白,最好能够用一两句话就讲得非常清楚。

大佬营友们的笔记(持续更新)

子曰:三人行,必有我师焉。

Day 1

  1. 破晓之翼 https://ghdata.blog.csdn.net/article/details/127356151
  2. 小冷coding http://t.csdn.cn/FMifi
  3. 小冷coding http://t.csdn.cn/eefmb

Day 2

  1. Long_xu https://blog.csdn.net/Long_xu/article/details/127317486?spm=1001.2014.3001.5501
  2. uniquewonderq https://yunhe.blog.csdn.net/article/details/127292463
  3. 重邮研究森 https://blog.csdn.net/m0_60524373/article/details/127383863
  4. 随风飘絮 http://t.csdn.cn/ljg9o
  5. 柠檬味的榴莲 http://t.csdn.cn/4q17U
  6. 愿&空 http://t.csdn.cn/p05sD
  7. Lq@@ https://blog.csdn.net/flq18210105507/article/details/127387932?spm=1001.2014.3001.5501
  8. 颹蕭蕭 https://blog.csdn.net/itnerd/article/details/127394221
  9. 破晓之翼 http://t.csdn.cn/WwSBP
  10. @小默同学 http://t.csdn.cn/nuqqC
  11. Thomas.杨 https://blog.csdn.net/QENGFENG/article/details/127397102?spm=1001.2014.3001.5501
  12. 跟着飞哥学编程 https://blog.csdn.net/weixin_36754290/article/details/127305965?utm_source=app&app_version=5.2.0
  13. IT从业者张某某 https://blog.csdn.net/m0_38139250/article/details/127377451
  14. 周小末 http://t.csdn.cn/ki6F8
  15. 冯运山 http://t.csdn.cn/dXezF
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰.封万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值