为什么 “Easy / Medium / Hard” 是思考 DSA 的糟糕方式
Source: Dev.to
关于数据结构与算法(DSA)最具误导性的事情之一是难度标签。
Easy.
Medium.
Hard.
它看起来很有用,似乎客观。但随着时间的推移,我发现它带来的害处大于好处,尤其是当你真的想提升自己时。
难度感觉随机是有原因的
如果你曾有这种感觉,你并不孤单:
- 有些“简单”的题目感觉不可能完成
- 有些“困难”的题目瞬间就能领悟
- 你有时一天能解出中等难度题目,第二天却在另一道题上挣扎
起初,很容易把责任归咎于自己。也许你不够稳定,也许你不擅长数据结构与算法。但问题不在于你,而在于标签。
难度并不等同于复杂性
大多数人认为难度意味着:
- 更难的数学
- 更棘手的代码
- 更巧妙的想法
实际上很少是这样。实践中,难度主要取决于涉及了多少模式,以及这些模式是如何干净利落地组合在一起的。
根据我的经验:
- 简单题目通常只考察一种模式
- 中等题目会结合一到两种模式
- 困难题目通常使用两种模式,偶尔会出现三种
几乎不会超过这个数量。一旦你看到这一点,这些标签的意义就会开始减弱。
为什么“容易”的题目会感觉很难
- 你还没有掌握那个特定的模式
- 题目把模式隐藏在故事里
- 不变量并不立刻显现
它之所以不容易,并不是因为它很琐碎。它之所以容易,是因为一旦你识别出模式,解法就很直接。没有这种识别,即使是容易的题目也会让人感到痛苦。
为什么“困难”问题有时会感觉轻松
相反,当以下情况出现时,困难的问题可能会出乎意料地容易:
- 你以前已经见过这些底层模式
- 这些组合对你来说合情合理
- 你能够独立地推理不变式
此时,你并不是在解决一个“困难”问题,而是仅仅在协调熟悉的想法。标签已经不再反映你的体验;而是你的准备在起作用。
难度是主观的,模式不是
这是我希望早些有人告诉我的内容。
难度标签包括:
- 主观的
- 相对的
- 受流行度和平台启发式影响
模式包括:
- 稳定的
- 可复用的
- 可在不同问题和公司之间迁移
当你专注于模式时,你的进步是可衡量的。当你专注于难度时,感觉会很嘈杂且不一致。
我现在如何处理问题
我不再问:
“这个问题难吗?”
我会问:
- 这涉及多少种模式?
- 我是否已经分别理解了它们?
- 它们是相互作用的,还是仅仅是顺序的?
这种框架把模糊的东西变得具体。一个“难”的问题就变成了:
“两个我已经了解的模式,稍微尴尬地组合在一起。”
这就成了一个不那么可怕的问题,值得去做。
为什么在学习时这很重要
如果让难度标签驱动你的学习:
- 你会过早回避“难”题
- 你会过度重视“易”题,时间过长
- 你把进度与外部标签绑定,而不是内部的清晰度
如果让模式驱动你的学习:
- 你能准确知道自己的薄弱点
- 你知道接下来该练什么
- 进步感觉是有意的,而非偶然的
这种差异会随时间累积。
这也是面试的工作方式
- 这测试了哪些概念?
- 候选人能识别结构吗?
- 他们能清晰地推理约束条件吗?
难度标签是给平台使用的。模式才是面试实际评估的内容。
我想表达的
这种先关注模式、后给标签的思考方式,是我在自己的学习和构建中尝试明确的。一旦你不再害怕“难”,而是开始剖析结构,数据结构与算法(DSA)就会变得平静许多。仍然有挑战,但不再让人望而生畏。
接下来会有什么
在下一篇文章中,我想写为什么仅仅掌握数组就能让你走得比大多数人预期的更远,以及为什么数组在大量数据结构与算法(DSA)之下悄然存在。
如果难度标签影响了你的信心,尝试暂时忽略它们。专注于模式本身。这会改变一切。
我一直在把模式及指向它们的信号进行索引,集中在一个地方:indexedcode,主要作为给自己的参考。在这里写下来有助于我完善这种思考。
