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

14天阅读挑战赛


系列笔记链接

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

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

《趣学算法(第2版)》读书笔记 Part 3 :贪心算法基础(理论)

《趣学算法(第2版)》读书笔记 Part 4 :贪心算法基础(操作)


如何高效学习算法

对应图书前言部分及挑战赛开营直播


文章目录

    • 系列笔记链接
    • 如何高效学习算法
      • Flag
      • 写在前面
    • 阅读挑战赛直播
      • 直播回放
      • 直播内容
    • 图书和作者
    • 为什么要学算法
    • 学习算法的好处
    • 如何高效学习算法
      • 高效学习算法的三个层次:
      • 高效学习算法的步骤:
    • 如何进行刷题训练
      • 什么时候刷题
      • 在哪里刷题
      • 提交结果类型
      • 提交不通过怎么办
      • 如何判断超时
      • 记录坑点
    • 如何准备算法面试
    • 直播答疑(选录)
    • 总结
      • 学习方法:费曼学习法
    • 大佬营友们的笔记(持续更新)
      • Day 1
      • Day 2


Flag

任何时候都不要等待,先迈出第一步。
Step by Step.
希望整本书坚持读完再回头看笔记时,我能庆幸自己不仅仅是参与过、努力过,而是真正学有所获。

写在前面

直播流水账不能水,是小白最后的倔强。

这竟然是我在 CSDN 写的第一篇博文…(战战兢兢,如履薄冰)…阅读挑战赛开营的前夜还在捣腾着学Markdown和HTML基础语法…
学识尚浅,笔记难免会有错漏和不足,欢迎评论指出。随着后续的学习,只要有时间,前期的博文也会仔细做增补、修改。
希望这些笔记对正在学习算法的你也有所帮助,一起学习,一起进步。

The real purpose of books is to trap the mind into doing its own thinking.书籍的真正目的在于诱导头脑自己去思考。
—— Christopher Morley 克里斯托弗·莫利

还在直播间探讨有没有签名时,购买的纸质图书就已寄出…好吧,我决定打印一张签名截图固定在图书扉页里。这里附上作者老师的亲笔签名:

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

相比预告的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 备注
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. 平时积累
    用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年,美国物理学家理查德·费曼获诺贝尔物理学奖。费曼写有一本自传《别闹,费曼先生》,正是在这本书中,他总结出了 “费曼学习法”。

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

《趣学算法(第2版)》读书笔记 Part 1 :如何高效学习算法_第2张图片
费曼学习法的核心观点:目标、理解、输出、回顾、简化。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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

你可能感兴趣的:(#,趣学算法2版,算法,学习)