发布于: 2024-12-23最后更新: 2026-7-21字数 799阅读时长 2 分钟

NoIndex
date
Dec 23, 2024
icon
password
Featured
Evergreen
LastVerified
synced
synced
paired_with
3551d487-a2a1-8126-be02-da06f789067c
RedirectFrom
UpdateType
NotificationPolicy
TechVersions
type
Post
Series
category
心情随笔
NotificationVersion
source_hash
md:v1:a01b1083bc09f7fa0c1f747ae22061be9a859708f6199dd6ca605b6037aad47c
slug
算法学习思考
RelatedProjects
translation_locked
translation_locked
status
Published
summary
学算法要先画结构、模拟过程、讲清不变量,再把思路写成代码。
tags
思考
算法
NotifyAt
ContentType
💭
前几天读到 ACM Queue 上的一篇文章《Teaching Algorithmic Thinking》,深有感触。学算法这件事,培养思维远比记下解法重要。巧的是,这几天刷抖音,又刷到 @数字游牧人Samuel 老师讲链表插入,他的讲法跟那篇文章说的几乎是同一件事。

一道题,两种讲法

链表插入这个题,传统讲法是直接用两行模板:
但如果下次题目换成「在第 k 个位置插入」「双向链表插入」「带哨兵节点的插入」,你又懵了,因为根本没去细想这两行为什么这么写。
Samuel 的讲法不一样。他先把链表画在白板上,节点用箭头连起来;然后让你动手改箭头:哪根先断、哪根后接、顺序反过来会怎样、断错一根会丢掉哪一段。你自己画完再回头看那两行代码,会发现"哦,原来如此"。
差别就在于是把代码当成结论给你,还是把代码当成思考过程的最后一步,带你走一遍。

遇到过的问题

讲点自己踩过的坑。学二叉树遍历的时候,我是把前中后序分开背的:
记住"中序就是左→自己→右,前序把访问提到最前面,后序放到最后面",刷题是能过,但一碰到图的遍历就完全用不上,因为我从头到尾没意识到这三种遍历是同一件事
后来才反应过来:它们的本质都是「递归地走一遍整棵树」,区别只是你打算在哪个时刻和当前节点打个招呼。一句话能讲清楚的事,我背了大半年。

新的学习方法

不说什么"系统思维”,"知识体系",就三件具体的改变:
  1. 先动手画,再看代码。 学新数据结构,第一步是拿张纸把它画出来,自己模拟一遍 insert / delete / search 怎么走。
  1. 逼自己讲一遍。 讲给同学、讲给空气都行。能讲清楚就是真懂;讲到某一步卡壳,那一块就是没懂。
  1. 把题归类,不背单题。 二叉树遍历和图的 DFS 是一回事;链表反转和栈是一回事;滑动窗口和双指针是一回事。看到新题先问自己——「这像我做过的哪一道?」

一张图记住二叉树

写在最后

如果你正卡在算法上、刷题刷得没感觉,别急着接着硬刷。去找个能讲清楚思路的老师或视频,或者自己在白板上把题画两遍,比闷头刷十道题管用得多。

📎 参考文章

继续关注

通过开放 Feed 获取新文章、研究和重要更新。


Loading...
游戏里的“着色器正在编译”是什么意思?

游戏里的“着色器正在编译”是什么意思?

Shader、GPU 机器码、图形 API 和缓存失效。为什么过程怎么慢?


AI 聊天界面自动滚动:如何判断用户意图

AI 聊天界面自动滚动:如何判断用户意图

AI 聊天界面的自动滚动不是两行 scrollTop,而是用户意图识别、跟随状态机、虚拟滚动和移动端边界的组合。


公告
网站持续更新中…