学算法要读《算法导论》吗?

大家好,我是 方圆。这篇文章是我学习算法的心得,希望它能够给一些将要学习算法且准备要读大部头算法书籍的朋友一些参考,节省一些时间,也为了给经典的“黑皮书”祛魅,我觉得这些书籍在大部分互联网从业者心中已经不再是进步的阶梯,而是恐惧的阴影了,因为当一些学习路线中列出这些书目时,评论区多是调侃少是交流和讨论。在这之前我也这些书抱有读起来很困难的看法,但是在我参考过《算法导论》之后,我觉得它更像是一杯“鸡尾酒”:正文学习起来相对容易,能帮大家建立基础,后续的习题和实验,能帮助有需要的人进行深入学习,扩展的高级数据结构和数论等章节也能进行探索,就看大家怎么来利用了。

开始学习算法的契机是23年初参加《Hello 算法》开源项目的内容贡献,发现自己算法基础知识匮乏,索性准备系统地学习一下算法相关的知识,在这前后一共读了4本书:《Hello 算法》、《数据结构与算法之美》、《算法(第四版)》和《算法导论》(参考了前16章),学习期间在朋友的建议下实践了艾宾浩斯学习法,觉得收货良多。所以,本文会分两部分,分别介绍算法的学习指南和学习方法,希望对大家能有启发:

算法学习指南

我采用的专题阅读学习,以《算法》为主要参考书目,逐章阅读,每学习完一个章节都会再去阅读其他书籍的对应章节作为内容补充,并结合章后的习题练习(我觉得没有练习的算法学习都是空架子,因为大多时候看会了很可能还是写不出来,但是官方给出的参考答案补全,可以参考《算法(第四版)》参考答案开源项目)。但是事实上并不是这些书中所有的内容都值得参考,所以可以参照下面的学习方法:

《算法》的第二章排序介绍了时间复杂度为O(n^2)和O(logn)的排序算法,它并没有直接介绍时间复杂度为O(n)的桶排序、计数排序和基数排序,而是将它们放在了第五章的字符串排序中,我认为这部分并不好,所以在完成这一章的学习后,需要参考《Hello 算法》的第十一章或者《算法导论》的第八章,我认为参考前者更合适一些。

《算法》的第三章在介绍红黑树时,它写的是左倾红黑树(与2-3查找树同构),该数据结构是这本书的作者先前发表的一篇论文,它是经典红黑树的变体,实现相对容易。不过,在Java语言中TreeMap的实现采用的经典红黑树(与2-3-4查找树同构),我认为如果要扩展学习经典红黑树的话需要结合《算法导论》的第十三章和TreeMap的源码,除此之外,暂时没有发现参考学习经典红黑书更合适的材料。

除此之外,《算法》中没有对动态规划和贪心算法的介绍,这一部分在《算法导论》的第十五章和第十六章有讲解,不过动态规划和贪心算法类的Leetcode题目在我看来还是比较难的,需要结合大量的练习才行。

以上,对于 基础的算法学习 就比较全面了,下面我们来讨论一些问题作为补充:

《算法导论》需要读吗?

我认为《算法导论》真的是非常合适的算法学习参考书,由于之前我也带着“黑皮书”读起来比较困难的想法,所以只把它作为了补充阅读,没有以它的内容为准,如果现在让我重新选择,我会把它作为主要参考书而其他作为补充阅读。

《算法导论》它不局限于语言,其中的代码内容是伪代码实现,所以任何语言的学习者都是合适的。而且,它会用单独的章节来介绍算法中常用的策略,如分治法等,此外在数据结构中创建哨兵节点的技巧也在链表章节中也描述。我认为它的前十六章加上第二十二章用来学习基础的算法已经足够了。开篇我说这本书像鸡尾酒,因为 它还扩展了高级数据结构和更加深入的算法知识,如斐波那契堆、van Emde Boas 树、数论算法和NP相关的知识等,所以,它的知识更加全面,面向的读者范围更广。我认为作为普通的算法学习者,一定要把握好学习的度,因为算法本身相对更加耗费脑力和时间,钻牛角尖式的学习在工作和生活间协调起来是不容易的,而且在算法导论中确实有一些复杂的证明和推导存在,可以选择性的跳过,因为我们的学习并非研究和探索,这样降低了难度也提高了学习效率。

《Hello 算法》是怎样的一本参考书?

《Hello算法》是一本基础的算法书,它的作者是也是Leetcode上剑指Offer系列题解的作者,这本书的知识基本上覆盖了刷LeetCode所需要的知识,它在内容深度上没有做扩展,像红黑树这些,也正如它的前言所述:它是一本能够让你避免读大部头便具备基本刷题能力的书,如果大家在短时间内想补足算法知识的话,参考这本书足够了,但是深入的学习是必要且无法被替代的。

对于只想刷题的同学该怎么学习?

我觉得可以直接参考高频题目的题单 分类 先刷起来,然后根据题目,发现缺少的知识进行补足。这样相对更加高效,因为Leetcode具有技巧性和规律性,结合大量的题目练习是最好的方式,反而如果先啃完大部头再回过头刷题可能效率不够高,而且这样也不能得到预期的收益,因为这些书它并不是教你如何刷题的。


以上内容对于找到适合自己的算法学习路线我认为已经足够了,接下来是我在算法学习中实践过的学习方法:

艾宾浩斯学习法

我认为学习某项技能,不仅局限于算法的学习,最终目的在于形成对它的长期记忆,并不是仅仅保留印象,而形成长期记忆的方法也非常简单:即频繁而有效的重复刺激,像我们的母语和一些生活习惯(刷牙、打扮和系鞋带等)之所以不会忘记是因为我们每天都在反复的刺激大脑如何运用,乃至最后都形成了肌肉记忆。总之,学习结合规律的复习,并归纳总结,便可以克服遗忘,达到温故知新的结果

艾宾浩斯遗忘曲线,即人对于知识的遗忘速度遵循 “先快后慢” 的原则。学得的知识在一天后,如不抓紧复习,很快就只剩下原来的 25%,而随着时间的推移,遗忘的速度会减慢,遗忘的数量也随之减少。

WechatIMG120.jpg

如果想有效抵抗遗忘,最好的办法就是进行规律的复习(每 5 分钟、30分钟、12小时、1天、2天、4天、7天、15天、1个月、3个月、6个月)。

艾宾浩斯遗忘曲线是大家都熟悉的概念,但是我几乎没有发现我的同学采用类似的学习方法。如果不是在朋友的推荐下,我也不会去改变自己的学习方式,在我实践过之后,收获很大,所以也分享给大家,下面是部分我用来记录学习和复习的艾宾浩斯表格:

image.png

我并没有完全照搬它的复习时间,而是采用了2小时、12小时、2天、7天、15天、1个月和3个月这样的时间间隔,其中表格中记录的是学习日期,绿色表示按时完成复习,红色表示没有按时复习。

采用这个学习方法我认为需要始终坚持 “循序渐进,按部就班” 的学习理念,不能一时图快而在短时间内学习过多知识,否则它会带来长时间的复习压力,也不能采取断断续续学习几天就休息一阵子的方式,而是真正地让学习成为一种习惯,慢慢地积累达到知识稳步增长的目的,这更像是投资的复利。

这种学习方法完全打破了我之前“从来不复习,永远看新的”的学习方式,而且不复习经常会带来“这个东西我看过,但是我忘了”的困扰,导致最后学完什么都没有剩下的局面,并且从采用这个学习方法之后,以“手写线段树”为例,真得可以信手拈来,像“肌肉记忆”一样,所以规律的学习和复习是很有必要的。需要注意的是:这种学习方式需要耐心、毅力和自制力的辅助,并根据自身记忆情况进行合理的调整,达到合适的学习和复习模式,否则很容易在遇到长假休息时导致学习计划夭折。

Over

所有内容到这里就已经结束了,学习算法这件事情起于23年3月,可能由于算法本身比较耗费脑力,需要协调大块的时间和精力,所以它几乎占据了我去年大部分休息时间,文末是一些优秀的参考文章和题单,其中Github - LeetCode题单是我自己花时间整理的,希望能帮助大家在算法学习上少走一些弯路,最后祝大家学得开心~


巨人的肩膀

  • 《Hello 算法》

  • 《算法(第四版)》

  • 《算法导论》

  • 《数据结构与算法之美》

  • GitHub - algorithms-sedgewick-wayne

  • GitHub - LogicStack-LeetCode

  • Github - LeetCode题单

  • Leetcode - 论如何 4 个月高效刷满 500 题并形成长期记忆

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/411180.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP中的飞碟运算符、取反运算符、对比非ASCII字符串、对比浮点数操作

对比浮点数 在电脑里存储的浮点数可能会和输入的值有些许差异,比如输入的是10.0,但存储的是10.00001. 在比较两个浮点数是否相等时可以计算下两个数的差值,然后查看下两数之差是否小于可以接受的阈值,如果要求精度在小数点后5位的…

如何实现固定公网地址远程访问内网Wagtail管理界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

【总结】Maxwell学习笔记

1.Maxwell简介 Maxwell 是一款用Java编写的MySQL变更数据抓取软件,它会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变更数据以 JSON 格式发送给 Kafka、Kinesi等流数据处理平台 官网地址:M…

代码随想录算法训练营第四三天 | 最后一块石头的重量 II、目标和、一和零

目录 最后一块石头的重量 II目标和一和零 LeetCode 1049. 最后一块石头的重量 II LeetCode 494. 目标和 LeetCode 474.一和零 最后一块石头的重量 II class Solution {// dp[j] 容量为j 的背包,最多可以背最大重量为dp[j]。// dp[j] Math.max(dp[j], dp[j - sto…

索引学习以及索引原理

有时候,建索引并不一定会加快查询效率。但是,有时候,表的数据量是大数据量的话,还是要看下是否能使用索引优化查询效率。 1、建索引的几大原则: 1.1、最左前缀匹配原则非常重要的原则,mysql会一直向右匹配…

猫头虎分享已解决Bug || AttributeError: ‘Sequential‘ object has no attribute ‘session‘

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

大数据开发项目--音乐排行榜

环境:windows10,centos7.9,hadoop3.2、hbase2.5.3和zookeeper3.8完全分布式; 环境搭建具体操作请参考以下文章: CentOS7 Hadoop3.X完全分布式环境搭建 Hadoop3.x完全分布式环境搭建Zookeeper和Hbase 1. 集成MapReduce…

猫头虎分享已解决Bug || Error: Maximum update depth exceeded in React

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【Crypto | CTF】BugKu 简单的RSA

天命:这题也不算简单了,要反编译,要灵活一点 首先收到pyc文件,拿去反编译出来,可以用在线反编译,也可以用工具反编译 在线:python反编译 - 在线工具 工具:https://download.csdn.n…

【算法小讲堂】#1 贪心算法

引入——关于贪心算法 我们先来做一个小游戏——现在假设自己是一个小偷,桌上有一些物品,包括一台iPhone15、一个充电宝、一个眼罩和一个溜溜梅。此时,你听说警察即将到来,那么你会先带走哪个东西呢? 一般来讲&#xf…

c++数据结构算法复习基础--1

一、大体复习内容 复习思路; 二、数据结构算法-常见复杂度汇总介绍-性能对比-图表展示 数据结构: 相互之间存在一种或者多种特定关系的数据元素的集合。在逻辑上可以分为线性结构,散列结构、树形结构,图形结构等等。 数据结构说的是组织…

x-cmd pkg | g - 功能和交互更为丰富的 `ls` 替代方案

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 g 是一项用 Go 开发的、功能和交互更为丰富的 ls 替代方案。它拥有 100 多个功能选项,主要是通过各式图标、各种布局选项和 git status 集成来增强视觉效果,并且支持多种输出格式,如…

话题——计算机专业必看的几部电影

1. 计算机专业必看的几部电影 《黑客帝国》(The Matrix):这部电影讲述了一个虚拟现实世界和现实世界之间的概念,对计算机编程和人工智能有着深刻的思考。它涉及在线/离线、递归、循环、矩阵等概念,挑战了观众对现实的…

TextCNN:文本分类卷积神经网络

模型原理 1、前言2、模型结构3、示例3.1、词向量层3.2、卷积层3.3、最大池化层3.4、Fully Connected层 4、总结 1、前言 TextCNN 来源于《Convolutional Neural Networks for Sentence Classification》发表于2014年,是一个经典的模型,Yoon Kim将卷积神…

功能测试用例,需要详细到什么程度?

这些天招了新人,新项目紧张的测试告一段落,我也开始为功能写用例。 一段时间不写了,写起来有点生疏,但是思路还很清楚。写到一半收到新人写完发过来的用例。 我一看就懵了,哥您这用例根本就是直接拷策划案啊&#xf…

如何交叉编译

1、需要安装对应交叉编译工具链用来在宿主机上编译能在arm开发板上运行的代码 树莓派交叉编译工具链下载地址: https://github.com/raspberrypi/tools下载好后用FileZilla将压缩包传到宿主机(不会用自己百度) 解压编译工具链 unzip tools-m…

Sovit3D数字孪生平台 助力智慧海上风电场项目加速

我们常说地球是蓝色星球,那是因为海洋约占地球面积的71%。如今,我国正在向“双碳”目标不断奋斗,海上风电也作为一种潜力清洁能源,迸发出前所未有的活力,海上吹来的风成为未来清洁能源新方向。 2024年海上风电项目加速…

市场复盘总结 20240226

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 昨日主题投资 连板进级率 二进三&#xff…

数据安全治理实践路线(中)

数据安全建设阶段主要对数据安全规划进行落地实施,建成与组织相适应的数据安全治理能力,包括组织架构的建设、制度体系的完善、技术工具的建立和人员能力的培养等。通过数据安全规划,组织对如何从零开始建设数据安全治理体系有了一定认知&…

Kuniverse 回归!重温阿圭罗的代表性瞬间,了解这一体验的创作过程!

Kuniverse 活动不仅仅是一次传统的聚会,它是为我们的用户提升 The Sandbox 体验而设计的一种方式,其中包括两个标志性体验:Kuniverse 和“世界冠军”。 Kuniverse 是一款单人游戏,包含与足球和阿圭罗相关的任务。“世界冠军”则更…