浅谈学习方法(待续)

文章发布时间:

最后更新时间:

文章总字数:
2.3k

预计阅读时间:
7 分钟

本文是在看完 一个金牌选手的信竞攻略 后有感而发写的,更多的是对视频内容的总结。

我们不谈怎么搞OI,而是希望找到一套更本质、更通用的一套学习方法,但会以OI为例。

其他领域在具体实现上略有差异,但核心想法是一样的。

本文提到的方法主要适用于需要对外输出的工具性学习(精神性学习也可以,只是把其中与对外输出的有关的部分去掉就行)。

学习方法

知识有体系

有教科书或老师指导(累积学习法)

例:所有的课内学习(从小学到大学)

这种方法下,学习是自底向上的一个演示过程。我们需要做的是了解理解运用

无教科书或老师指导(渗透学习法)

这种情况下,我们默认只有网络上的开源资源可供使用。

我们会遇到一些问题:

  • 我如何知道有哪些知识?
  • 我如何知道知识之间的依赖和捷径?
  • 我如何知道知识的学习路径?

对于一个具体的知识点(以视频中的FFT为例):

  • 先知道它叫什么:有个算法叫FFT
  • 再知道它的地位:FFT在多项式计数里很重要
  • 再知道它的用途:FFT可以快速计算多项式乘法
  • 再知道它的核心原理:FFT的核心原理是求值-插值 法、基于单位根的奇偶分治、一点线性代数
  • 最后知道它的具体原理:如此如此⋯⋯这般这般⋯⋯

因此,「有哪些知识」是最首要的知识。

例如OI,我们有OI WikiNOI大纲这些被总结好了的资料,这是非常理想的情况。

但假如一个领域没有任何的总结性资料,我认为只能通过自己的各种了解,包括但不限于看论文、向该领域的经验者请教等方法(真有这种领域肯定都是科技最前沿了吧)。

知道地位,我们就可以根据它的知识深度来规划学习路径。

知道用途,可以跳过它,继续渗透后面的知识。例如FFT,我们知道了它能快速计算多项式乘法,我们就可以把FFT当成一个黑盒,先去渗透后面的计数,规划好学习路径后再具体学习原理。

知道核心原理,就能知道要学什么前置知识,大概以什么框架去学,在看具体原理的时候也容易顿悟。

所以这个方法的核心就是:自顶向下,构建知识树,将其转化为累积学习法

当然也不一定是树,因为可能有环,不过这其实不太重要,一块学就行了。

知识没有体系(归纳学习法)

如何应对陌生的知识:

  • 化归」:尝试将其规约到我们熟悉的理论体系当中。
  • 粘附」:尝试联想它和熟悉知识的相关性,关联越多, 我们越能稳固地掌握它。

如果化归和粘附都失败,表明我们发现了一个孤立的新知识,即「初见」。这会给人带来很大困惑。

你需要判断:这个初见重要吗?它是孤例?还是背后有一套值得学习的体系?

如果决定了,它是重要的初见,你就应该放下疑惑和恐慌, 不管它长得多么奇怪,都应该记载它,学习它,现在看太不懂,无法解释也没所谓。等待下一个例子来与它印证即可。等到见的东西足够多以后,可能就会发展出一个新的体系。

更积极的进行粘附:对于无体系的知识,粘附就是我们能做到的最好组织形态。

即使没有理解障碍,也应该思考粘附的可能,它使我们的知识更加牢固,让我们能从多种视角看问题。

这其实是一个很重要的做法,例如高中数学,经常提倡一题多解,这应该也是一种粘附的过程,它能提供多角度思考的思考模式,我觉得这也是我欠缺的。

其他

知识学习的准则

关于知识的学习顺序,前面已经介绍了如何打通道路。然而,选手可能会转向另一种担忧:

  • 如果我在一条路上走得太深,耗费时间太多,导致没有学习基础知识,该怎么办?

狂战士准则:如果你学的很爽,进度很顺,不管这个知识名义上多难多后期,接着学。学到学不懂为止。

越级学习能为你带来下一阶段的思维方式,且显著增加你的「复杂抗性」,是你能承受更复杂的思考。 一般情况下,稍微越级就会很快遇到障碍,如果没有障碍, 说明抽到宝了,赶紧学啊。

这一块我是典型反面教材。

OI时期我很喜欢数据结构,然后就使劲往深里学,什么LCT,ETT,Top Tree,猫树分治,底层分块……反正各种高科技都整,但其实都没有理解很深,只是能机械地敲个板子。而其他基础知识就学的特别烂,比如基础DP我都场切不了。

所以劝大家越级需谨慎,超出能力范围太多就该停了。

越级还容易手癖(

好记性不如烂笔头

为你学过的每个知识体系写一篇笔记。

  • 用你自己的语言记载,方便复习
  • 你可以不断迭代对知识的理解,剔除过于熟悉的,整合臃肿多余的,最终精炼出关键的几句话。如果没有文字作为载体,这很难完成。

这个更新迭代我很有体会,高中数学和物理搞得错题本,第一次错的时候写解析都会写的非常详细,但后面再看的时候就会发现有很多是冗余的,这时候就会把解析改的更精练一些。

关于摸鱼

如果进行的是高强度的集训式训练的话,摸鱼是必然的。

此时,多开策略仍然重要,保留一个易上手的未完成任务, 它帮你从摸鱼状态中快速恢复过来。

如果强度不是很大你还摸鱼说明就是不想学,这是态度上的问题。

训练策略

高效刷题

核心思路:以“质量“换效率

做法:放弃独立思考,找一堆优质题解,将目标改为:看懂题解,并独立写出代码。并用你自己的语言,写一份尽量详实的题解。

注意事项:

  • 你应该显著提高题目的难度。同时,也要认清自己的实力。
  • 借助题解,可以大大加速题目的筛选,更有效地利用开源资源。
  • 依赖题解,常有懒于思考,一知半解的情况。需要某种手段保证自己完全理解了解法,并进行一定的挖掘归纳(这样能回收一点思维锻炼效果),就是写题解。

这个方法适用于学新知识点而不适用于锻炼思维,适合前期使用(这里的知识点不只指最基础的知识点,一些小trick也是算的)。

用这个方法也有一部分是因为只考虑开源资源,如果像是高中这种有各种习题册的可以不这样干。因为这样做的好处是可以自己进行题目筛选。

多分支开题

维护三个题目池:

  • A: 来自较好的题源,有待筛选。
  • B: 已经筛选出的好题,需要看题解。
  • C: 已经看懂题解,并写完了自己的题解,需要写代码。

有意将任务并行,不一定要将题目一口气做完,可以做一阶段就放回池子里。在每个题目池维持一定的题量。

任何一环卡住,可以随时切到手头上另一个简单任务。

如果你一直保持线性流程,单线程开题,卡题的时候就无其他事可做了。

学习的三个阶段

  • 前期:学习知识
  • 中期:思维,优化赛场表现
  • 后期:稳定性提升

前期的主要任务:尽量快、完成度尽量高地学习主干知识。

常见误区:

  • 在主干知识有显著缺陷的情况下,投入大量时间学习冷门知识。(这就是我犯的错)
  • 过早关注比赛表现,在生涯前期投入过多时间打简单比赛,拖慢学习进度。

中期的核心任务:

  • 增强赛场输出能力
  • 熟悉比赛,研究赛场策略
  • 尽量收集不成体系的知识

后期的主要任务:练熟练度