算法入门:从问题开始,而不是从公式开始

这一篇试着用「排序」和「搜索」两类普通问题,来感受算法的思路:不是背几种套路,而是学会权衡时间和空间。

在纸上推演算法流程图

一、先问清楚:到底要解决什么问题?

很多算法书一上来就是大段伪代码和复杂符号,让人很快失去耐心。 但真实世界里的算法,其实都是从「一个很具体的问题」开始的。

一个简单的例子:给你一堆无序的数字,怎样更快地找到其中第 K 大的那个?——这是典型的排序 / 选择问题。

二、排序:从「一张一张看」到「折半思维」

冒泡排序、插入排序、快速排序……名字很多,其实可以先只记住两个层次:

  • 朴素做法:每次只比较相邻两个,慢但容易想;
  • 分治思路:拆成更小的子问题,再合并结果,比如快速排序。
便利贴被分成不同区域,比喻分治算法
「分而治之」的直观形象:先分区,再在小范围内解决。

三、搜索:顺藤摸瓜 vs. 一分为二

搜索问题也类似:线性搜索、二分搜索、图的 BFS/DFS,本质上是「沿着不同路径顺藤摸瓜」。

🔍 一个训练小习惯

每次刷到一个新题目,先别看答案,试着自己总结两件事: 1)输入和输出是什么;2)可以用哪些不同的思路去接近答案。 把这两点写在纸上,比直接记别人的解法更有用。