欢迎来到算法的世界!

你好!欢迎来到计算机科学中最重要的一个章节。在这部分,我们将探讨如何将一个庞大且复杂的问题,转化为电脑能理解的一系列明确指令。这就是所谓的算法表示(representing algorithms)

如果刚开始觉得这听起来有点“技术性”,别担心。你可以把算法想象成制作蛋糕的食谱,或是组装 LEGO 模型时的说明书。只要说明书够清晰,任何人都能照着做!让我们马上开始吧。

1. 什么是算法?

简单来说,算法(algorithm)就是为了完成一项任务而遵循的一系列步骤。

重要区分:电脑程序(program)是在机器上运行的实际代码(例如 Python 或 C#)。而算法则是这些代码背后的逻辑或“计划”。
类比:算法就像是乐谱(纸上的音符),而程序则是实际的音乐演奏。

快速复习:算法 vs. 程序

算法:计划/步骤(与编程语言无关)。
程序:实现结果(以特定编程语言编写)。

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

有时候,一个问题太过于庞大,无法一次解决。分解(Decomposition)是指将复杂的问题拆解成更小、更容易处理的部分(子问题)。

每个子问题都应完成一项特定的任务。这些子问题通常可以进一步拆解,直到它们变得容易解决为止。

现实生活范例:如果你想“打扫房子”,你可以将其分解为:
1. 清洁厨房。
2. 吸客厅的地板。
3. 刷洗浴室。

3. 抽象化(Abstraction):专注于重点

抽象化(Abstraction)是指从问题中移除不必要的细节,让你能够专注于重要的部分。如果包含太多细节,算法就会变得令人困惑。

最佳类比:伦敦地铁图。
地铁图不会告诉你轨道在地下转弯的确切位置,或是轨道在地底有多深。它移除了这些“细节”(抽象化),只展示你需要知道的信息:车站以及车站之间的连接。

总结重点:

分解(Decomposition)是将问题拆成碎片抽象化(Abstraction)是去除杂质

4. 表示算法的方法

当我们建立一个算法时,我们需要一种方式将其记录下来,以便其他人(和电脑)能够跟随。AQA 课程大纲主要强调三种方式:

A. 流程图(Flowcharts)

流程图(flowchart)是算法的可视化图表。我们使用特定的形状代表不同的动作:

椭圆形:开始与结束点。
矩形:处理程序(例如:计算:总分 = 分数 + 10)。
平行四边形:输入与输出(例如:获取使用者名称输出“你好”)。
菱形:决策(例如:分数是否 > 50?)。这些通常有两条路径:是/否 或 真/假。

B. 伪代码(Pseudo-code)

伪代码(Pseudo-code)是一种编写指令的方式,看起来像编程语言,但使用的是简单的英文单词。它没有像真实代码那样严格的语法规则,但 AQA 有一套考试时会用到的“标准版本”。

范例:
IF 分数 > 50 THEN
   OUTPUT "你及格了!"
ELSE
   OUTPUT "再试一次。"
ENDIF

C. 程序代码(Program Code)

这是用 PythonC#VB.NET 等编程语言编写的实际代码。这是电脑最终执行版本。

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

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

1. 输入(Inputs):进入算法的数据(例如:使用者输入年龄)。
2. 处理(Processing):使用该数据进行的计算或决策(例如:检查年龄是否超过 18 岁)。
3. 输出(Outputs):算法产生的结果(例如:显示“允许进入”)。

你知道吗?你使用的几乎所有应用程序,从 TikTok 到计算器,都遵循这个基本的 IPO 模式!

6. 判断算法的目的

如果有人给你一个算法并问你“这是做什么的?”,有两种方法可以找出答案:

视觉检查(Visual Inspection)

这只是简单地观察代码或流程图,并从逻辑上“阅读”它,以了解其目标。

追踪表(Trace Tables)

追踪表(trace table)是用来追踪算法运行时变量值变化的工具。它能帮助你精确地看到每一步发生了什么事。

追踪表的步骤:
1. 为算法中的每个变量建立一列。
2. 为“输出”建立一列。
3. 逐行遵循指令,并在数值变动时更新表格中的数值。

避免常见错误:

使用追踪表时,千万不要跳行!即使某个变量在当前步骤没有改变,也要坚持逐行跟随逻辑,以确保不会遗漏任何决策(菱形)或循环

快速复习清单

算法:分步计划。
分解:将问题拆解。
抽象化:隐藏细节。
流程图:视觉地图。
伪代码:“模拟”代码。
追踪表:测试是否有效的工具。

做得好!你已经掌握了算法表示的基础知识。记住,算法只是逻辑路径——一旦你学会识别输入和决策的模式,你就能够解决任何问题!