📄 一句话概括
算法=解决问题的明确步骤——源自 9 世纪数学家花拉子米名字的熟语,本章用七个要点把它讲透。
📝 本节和前面几节的关系
第四章讲了流程的【形状】(三种结构),本章讲流程的【内容】——怎么把解决问题的思路写成好算法。八个标题合起来正是一张算法入门地图。
一、算法这个词从哪来
Algorithm 源自 9 世纪波斯数学家花拉子米(al-Khwarizmi)的名字——他写的解题书流传欧洲,解题步骤被称作【花拉子米的做法】,年深日久变成了 algorithm。 一个词流传千年,说明【把解法写清楚】这件事有多古老、多根本——程序只是它的现代载体。
二、算法是程序设计的熟语
教材把 algorithm 译作【熟语】:圈子里人人会用、含义高度浓缩的说法。 回忆第三章的老公式:程序=指令和数据的集合。到了算法这一层,说法升级为:程序=算法(指令的组织方式)+数据结构(数据的组织方式,第六章的主角)。 所以本章与下一章是一对:一个管【步骤怎么排】,一个管【数据怎么摆】——两样合起来才是完整的程序设计。
三、七个要点怎么读
5.2~5.8 每节一个要点:明确且有限、机械执行、用典型算法、借机器速度、用技巧提速、找数字规律、先在纸上想。 它们不是并列的知识点,而是写算法的顺序:先想清楚问题(要点 1、2),再套经典(要点 3),再权衡快慢(要点 4、5),再优化(要点 6),最后落笔(要点 7)。
四、动手 Demo:把泡茶写成算法
拿一件日常小事验证算法的三要素:步骤明确、步骤有限、有结果。
# 泡茶待客的算法(伪码)
steps = ["烧水", "放茶叶", "冲水", "等 3 分钟", "端给客人"]
for i, s in enumerate(steps, 1):
print(i, s)
print("结束: 茶到了客人手里")
实跑输出:
--------------------------------------------------------------------
算法是熟语——把日常事写成明确步骤
--------------------------------------------------------------------
【算法】(algorithm) 这个词来自 9 世纪波斯数学家花拉子米的名字,
如今是程序设计的熟语:**解决问题的步骤**。拿【泡茶待客】练手,
把一件日常事写成算法级的明确步骤:
步骤 怎么算完成
---------------------------------------------
1. 烧水 水开为成功
2. 放茶叶入杯 一勺为标准
3. 水开时冲入杯中 水量到杯八成
4. 等待 3 分钟 计时, 不可省
5. 端给客人 结束条件: 茶在客人手里
注意这三点:每步**明确**(没有【适量】【一会儿】这种模糊词)、
步骤**有限**(5 步必然结束)、有**结果**(茶到了客人手里)。
满足这三点的步骤描述,就是算法。程序=算法+数据(第三章说过)。
注意没有【适量】【一会儿】这种模糊词——模糊词是算法的天敌,机器没法执行【适量】。 三个要素缺一个就不是算法:不明确(没法执行)、不有限(死循环)、没结果(白干)。
30 秒实验
- 把【刷牙】写成不超过 6 步的算法——体会【明确】两个字有多难。
- 查一查还有哪些词与花拉子米同源——algebra(代数)也是他的书名。
常见误区
- 以为算法是高深的数学——泡茶的步骤写合格了就是算法,起点很平易。
- 以为算法专属于计算机——菜谱、说明书、操作规程都是算法思想的体现。
自测三问(点开对答案)
1. algorithm 一词的来历? —— 源自 9 世纪波斯数学家花拉子米的名字。 2. 程序、算法、数据结构的关系? —— 程序=算法(步骤的组织)+数据结构(数据的组织)。 3. 本章七个要点的阅读顺序像什么? —— 像写算法的流程:想清楚→套经典→权衡快慢→优化→落笔。- ☐ 下一节(5.2 要点1:算法中解决问题的步骤是明确且有限的)
相关笔记
- 画流程图来思考算法 — 上一章的画图法,本章处处在用
- 🔵 计算机基础 · 索引 — 那边也有算法的初步介绍
- 💻 计算机是怎样跑起来的 · 索引