欢迎来到算法的世界!

在本章中,我们将一起探索计算机科学的「蓝图」。你可以把算法想象成一份食谱:在烘焙蛋糕之前,你需要一份清晰的步骤清单。同样地,在电脑执行程序之前,也需要一套明确的指令。如果现在觉得这些概念有点抽象,别担心,我们会把它们拆解开来,逐一攻破!

你将会学到:
• 如何定义和解释算法。
• 如何将大问题拆解成小问题(分解 Decomposition)。
• 如何忽略不重要的细节(抽象 Abstraction)。
• 如何利用流程图和伪代码(Pseudo-code)来呈现这些步骤。
• 如何使用追踪表(Trace tables)来检查算法是否正确运行。


1. 什么是算法?

简单来说,算法(Algorithm)就是为完成某项任务而遵循的一系列步骤。无论你是系鞋带还是计算一个数字的平方根,你其实都在执行一个算法。

重要的区别:
算法是计划,而计算机程序则是行动。想象一下建筑师的蓝图与实际建成的房子:蓝图就是算法;而房子就是程序。

比喻:如果你告诉朋友如何泡一杯茶,你就是给了他一个算法。如果他走进厨房实际去泡茶,他就是在“执行”那个算法。

快速回顾:算法是一套指令;程序则是这些指令以计算机能执行的代码所写成的版本。


2. 拆解问题:分解 (Decomposition)

有时候,问题看起来太大,简直不可能解决。分解(Decomposition)的过程就是将复杂的问题拆解成更小、更易于处理的部分(子问题)。

每一个子问题都应该能完成一项特定的任务,你甚至可以将这些子问题进一步再细分!

例子:如果你的问题是“举办一个生日派对”,你可以将其分解为:
1. 建立宾客名单。
2. 购买零食。
3. 发送邀请卡。
4. 打扫屋子。

重点总结:将大型任务拆解成小型任务,解决起来会容易得多!


3. 简化视角:抽象 (Abstraction)

抽象(Abstraction)是从问题中移除不必要的细节,让你专注于重要部分的过程序。如果你加入太多细节,算法就会变得混乱。

例子:想想伦敦地铁图。它并没有显示轨道的每一个弯位,也没有显示地面上的树木位置,它只显示了车站和路线。这就是抽象——它移除了“杂讯”,让你更容易找到路。

你知道吗?没有抽象,电子游戏根本无法运行!开发人员隐藏了背景中数以百万计的复杂数学方程,只向你展示屏幕上移动的角色。


4. 呈现算法

一旦你有了计划,就需要把它写下来,让其他人(和计算机)都能明白。主要有三种方式:

A. 流程图 (Flowcharts)

这是一种视觉图表,使用不同的形状来展示算法的流程。常见形状包括:
椭圆形:开始或结束。
矩形:处理程序(例如计算)。
菱形:决策(是非题)。
平行四边形:输入或输出。

B. 伪代码 (Pseudo-code)

这是一种编写指令的方法,看起来有点像程序代码,但更容易让人阅读。它不像 Python 或 C# 那样有严格的语法规则,但 AQA 考试中会使用标准化的版本。

伪代码例子:
OUTPUT '输入你的年龄'
USERINPUT age
IF age >= 18 THEN
  OUTPUT '你可以投票!'
ELSE
  OUTPUT '年龄不足,不能投票。'
ENDIF

C. 程序代码 (Program Code)

这是最终版本,用特定的编程语言(如 PythonC#VB.NET)编写,计算机可以直接执行。

记忆小撇步:使用 FPP 来记住这三种方法:Flowchart(流程图)、Pseudo-code(伪代码)、Program code(程序代码)。


5. 输入、处理与输出 (IPO)

每一个简单的算法都可以用这三个阶段来解释:

1. 输入 (Inputs):进入算法的数据(例如:输入你的名字)。
2. 处理 (Processing):用来改变或使用该数据的步骤(例如:将两个数字相加)。
3. 输出 (Outputs):产生的结果(例如:在屏幕上显示总和)。

比喻:自动售货机。
输入:按下“可乐”按钮并投币。
处理:机器检查金额是否足够并定位饮料。
输出:饮料掉进取物槽。

快速回顾:观察任何算法时,请试着问自己:它要求什么?它在做什么?它显示了什么?


6. 确定目标:追踪表 (Trace Tables)

我们如何知道算法是否运行正常?我们使用追踪表 (Trace table)。这是一种通过手动记录每个步骤中变量的值来测试算法的技巧,通常被称为“干跑”(dry run)

追踪表的步骤:
1. 为算法中的每个变量建立列。
2. 逐行跟随指令。
3. 每当变量发生变化,就在表格的下一行写下新的数值。

常见错误:千万不要跳行!即使你觉得,自己知道答案是什么,逐行执行算法仍是找出“逻辑错误”(计划中的错误)的唯一方法。

重点总结:追踪表能帮助你“像计算机一样思考”,清楚看到算法在每一刻的具体行为。


总结:算法工具箱

算法:一步一步的计划。
分解:将问题拆解成碎片。
抽象:隐藏不重要的细节。
伪代码/流程图:绘制或编写计划的方法。
追踪表:检查计划以确保其运行正常。

继续练习吧!算法就像逻辑谜题。你“追踪”的次数越多,就越容易理解。