欢迎来到算法的世界!
你好!今天我们要深入探讨计算机科学历程中最重要的一个章节:跟随与编写算法 (Following and writing algorithms)。这是“程序设计 (Program design)”的核心。你可以把算法想象成计算机的“食谱”。就像厨师需要清楚的指示来烤蛋糕一样,计算机也需要明确的算法来解决问题。别担心一开始觉得有点抽象——看完这些笔记,你就会成为追踪和转换算法的高手!
1. 究竟什么是算法?
简单来说,算法 (algorithm) 是一连串为了完成任务而必须遵循的步骤。然而,要在计算机科学中被称为“正式的”算法,它必须具备一个非常重要的特性:它必须能够终止 (it must always terminate)。这意味着它不能无止境地运行下去;它必须有一个终点。
现实生活中的类比: 想象你正在教朋友如何泡一杯茶。你可能会说:
1. 把水烧开。
2. 将茶包放入马克杯。
3. 将开水倒入杯中。
4. 等待 3 分钟。
5. 取出茶包。
这就是一个算法!它有明确的开端、一连串的步骤,并且在茶泡好后结束。
你知道吗?
“算法 (algorithm)”这个词其实源自于 9 世纪波斯数学家花拉子米 (al-Khwarizmi) 的名字!他是最早写下解决数学问题之逐步规则的人之一。
快速复习:
一个算法必须是:
- 一连串的步骤。
- 能完成特定的任务。
- 保证会结束(终止)。
重点总结: 算法就是为了解决问题并最终停止而设计的逐步指令。
2. 伪代码:通往程序设计的桥梁
在我们使用 Python 或 C# 等语言编写实际程序代码之前,我们通常会使用伪代码 (pseudocode)。伪代码并不是计算机可以执行的“真正”程序语言,而是一种用类似英文的词汇写出程序逻辑的方法。它的好处是让你专注于逻辑,而不用担心漏掉分号或括号。
在考试中,你不会被要求从零开始编写伪代码,但你必须能够看懂它并跟随它在做什么。
常见的伪代码术语:
- OUTPUT: 向用户显示信息。
- USERINPUT: 从用户获取信息。
- IF / ELSE: 做决定(选择结构)。
- WHILE / FOR: 重复执行某项任务(迭代结构)。
记忆小撇步:“白话文”技巧
阅读伪代码时,试着像读一般句子一样把它念出来。例如:"IF score > 50 THEN OUTPUT 'Pass'" 指的就是“如果分数超过 50 分,就告诉用户他们通过了”。
重点总结: 伪代码是用于规划算法逻辑的“伪代码”,其设计目的是让人易于阅读。
3. 将伪代码转换为高级语言
你需要为 Oxford AQA 考试掌握的技能之一,就是将以伪代码编写的算法转换为高级语言程序代码 (high-level language program code)(例如 Python、VB.Net 或 C#)。
逐步转换指南:
1. 识别变量: 找出数据存储的位置。(例如:Count ← 0 变为 count = 0)。
2. 寻找选择结构: 将 IF/THEN/ELSE 转换为你所使用语言的特定语法。
3. 寻找迭代结构: 将 REPEAT/UNTIL 或 WHILE 循环转换为对应的程序代码版本。
4. 检查逻辑: 确保你的程序代码完全遵循与伪代码相同的步骤。
避免常见错误:
转换时不要试图去“优化”算法!即使你认为有更快的方法,你的任务是准确地将现有的算法转换为程序代码。
重点总结: 转换就像是把书从一种语言翻译成另一种语言;保持意义(逻辑)完全相同,但使用新语言正确的语法 (syntax)。
4. 手动追踪算法(追踪表)
如果你觉得算法很困惑,别担心!计算机科学家会使用一种称为手动追踪 (hand-tracing) 的技术。这涉及像计算机一样逐行执行算法,并随时记录变量的变化。
进行此操作的最佳工具是追踪表 (Trace Table)。追踪表为每个变量提供一栏,并为输出提供一栏。
如何建立追踪表:
1. 将所有变量列为栏目标题。
2. 新增一栏作为输出 (Output)。
3. 逐行跟随算法。
4. 每当变量的值发生变化时,就在该变量对应栏位的新列中写下新值。
示例说明:
想象这个简单的算法:
1. X ← 10
2. Y ← 5
3. X ← X + Y
4. OUTPUT X
你的追踪表看起来会像这样:
行数 | X | Y | 输出
1 | 10 | |
2 | 10 | 5 |
3 | 15 | 5 |
4 | 15 | 5 | 15
记忆小撇步:T.R.A.C.E.
T (Table) - 表格: 先把它画出来。
R (Read) - 阅读: 目前的程序行。
A (Action) - 动作: 变更变量或输出。
C (Check) - 检查: 循环结束了吗?
E (End) - 结束: 当算法终止时结束任务。
快速复习:
- 每次变化都使用新的一列。
- 永远不要猜测!严格按照写好的指令执行,即使它们看起来有错。
- 别忘了记录最终输出。
重点总结: 手动追踪是找出演算法中错误(臭虫/bugs)并准确理解其运作方式的最佳方法。
最后的鼓励
算法感觉就像谜题一样。有时需要尝试几次才能解开,这完全没问题!你练习手动追踪和转换伪代码的次数越多,操作起来就会越自然。记住,计算机聪明与否取决于你给它的算法——你才是真正掌控的那个人!
第 3.3.3 章总结:
- 算法是必须结束的逐步指令。
- 伪代码帮助我们规划逻辑,而无需担心严格的编码规则。
- 使用追踪表进行手动追踪是理解程序执行期间变量如何变化的“秘密武器”。