发布于: 2024-12-23最后更新: 2026-5-3字数 892阅读时长 3 分钟

type
Post
status
Published
date
Dec 23, 2024
slug
算法学习思考
summary
看了一篇 ACM Queue 的文章,又刷到一个抖音讲链表插入的视频,两件事撞到一起,让我回头反思自己学算法走过的弯路——原来差别不是天赋,是有没有人帮你把那层窗户纸捅破。
tags
思考
算法
category
心情随笔
icon
password
synced
paired_with
3551d487-a2a1-8126-be02-da06f789067c
source_hash
74f2570993d08dab473a51803efa75ed606eaf964c12833f7f004ee37d71dc4e
translation_locked
translation_locked
💭
前几天读到 ACM Queue 上的一篇文章《Teaching Algorithmic Thinking》,里面有一句话戳到我了——学算法这件事,培养思维远比记下解法重要。巧的是这几天刷抖音,又刷到 @数字游牧人Samuel 老师讲链表插入,他的讲法跟那篇文章说的几乎是同一件事。两件事撞到一起,我就想把这点感触写下来。

一道题,两种讲法

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

我以前是怎么学错的

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

我现在怎么学新东西

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

一张图记住二叉树

写在最后

我越来越觉得,没有什么"算法天赋"这回事。差别只在于有没有人帮你把那层窗户纸捅破。
如果你正卡在算法上、刷题刷得没感觉,别急着接着硬刷——去找个能讲清楚思路的老师或视频,或者自己在白板上把题画两遍。比闷头刷十道题管用得多。

📎 参考文章


Loading...
聊天界面的内容自动跟随,怎么做才不烦人

聊天界面的内容自动跟随,怎么做才不烦人

做 AI 聊天产品最容易翻车的细节之一,是「自动滚到底部」那个小逻辑。看着两行代码搞定,实际上踩坑能踩半年。这篇聊聊我做这一类功能时的几次反复。


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

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

玩游戏时看到「正在编译着色器」那个进度条,里面到底在干什么?这篇用人话讲讲着色器是什么、为什么要编译、为什么这么慢。


公告
网站持续更新中…