非计算机专业的学生学算法,最常见的困难不是数学,而是不知道这些抽象过程和自己有什么关系。如果第一节课就进入复杂度分析和递推公式,很容易在一开始失去兴趣。

我倾向于把入门路径分成四步,每一步都保留一个可以立刻完成的小目标。

第一步:先把问题说清楚

算法首先是解决问题的步骤。开始写代码之前,先练习用自然语言描述:

  • 输入是什么,可能有哪些特殊情况?
  • 输出是什么,格式有什么要求?
  • 如果手工完成,我会怎么做?
  • 哪一步最重复,是否可以交给循环?

这一步看起来不像“算法”,但它决定了后面能否把问题转化成程序。很多错误并不是语法问题,而是问题没有被说清楚。

第二步:从线性结构和简单查找开始

先接触数组、列表、栈和队列,理解它们在什么场景下方便。然后练习顺序查找和简单的排序,观察“数据组织方式不同,操作效率也不同”。

这个阶段不需要证明复杂度,只需要建立直觉:为什么在有序数据里查找通常更快,为什么频繁在中间插入会让数组变慢。

第三步:用小题巩固,而不是追求题量

每个知识点配三到五道小题即可,重点是覆盖不同输入情况。做题后要求写一句复盘:

  • 这道题的关键步骤是什么?
  • 我一开始卡在哪里?
  • 如果数据规模变大,原来的做法还合适吗?

题量不是目标。能把一道题讲清楚,比机械完成十道同类题更有价值。

第四步:再引入复杂度

等学生已经见过具体做法,再引入时间复杂度和空间复杂度。此时复杂度不是抽象符号,而是用来比较“同样的问题,不同做法在数据变大时会发生什么”。

教学上的提醒

非计算机专业学生学习算法,重点可以放在问题分解、数据组织和基本效率意识上,而不必一开始追求竞赛难度。路径温和一些,反而更容易走远。