欢迎来到算法的世界!
你好!欢迎来到计算机科学中最重要的一个章节。在这部分,我们将探讨如何将一个庞大且复杂的问题,转化为电脑能理解的一系列明确指令。这就是所谓的算法表示(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)
这是用 Python、C# 或 VB.NET 等编程语言编写的实际代码。这是电脑最终执行版本。
5. 输入、处理与输出 (IPO)
每一个简单的算法都可以用这三个阶段来解释:
1. 输入(Inputs):进入算法的数据(例如:使用者输入年龄)。
2. 处理(Processing):使用该数据进行的计算或决策(例如:检查年龄是否超过 18 岁)。
3. 输出(Outputs):算法产生的结果(例如:显示“允许进入”)。
你知道吗?你使用的几乎所有应用程序,从 TikTok 到计算器,都遵循这个基本的 IPO 模式!
6. 判断算法的目的
如果有人给你一个算法并问你“这是做什么的?”,有两种方法可以找出答案:
视觉检查(Visual Inspection)
这只是简单地观察代码或流程图,并从逻辑上“阅读”它,以了解其目标。
追踪表(Trace Tables)
追踪表(trace table)是用来追踪算法运行时变量值变化的工具。它能帮助你精确地看到每一步发生了什么事。
追踪表的步骤:
1. 为算法中的每个变量建立一列。
2. 为“输出”建立一列。
3. 逐行遵循指令,并在数值变动时更新表格中的数值。
避免常见错误:
使用追踪表时,千万不要跳行!即使某个变量在当前步骤没有改变,也要坚持逐行跟随逻辑,以确保不会遗漏任何决策(菱形)或循环。
快速复习清单
• 算法:分步计划。
• 分解:将问题拆解。
• 抽象化:隐藏细节。
• 流程图:视觉地图。
• 伪代码:“模拟”代码。
• 追踪表:测试是否有效的工具。
做得好!你已经掌握了算法表示的基础知识。记住,算法只是逻辑路径——一旦你学会识别输入和决策的模式,你就能够解决任何问题!