💻 第五章 与算法成为好朋友的七个要点
📄 一句话概括

算法=解决问题的明确步骤——源自 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 秒实验

  1. 把【刷牙】写成不超过 6 步的算法——体会【明确】两个字有多难。
  2. 查一查还有哪些词与花拉子米同源——algebra(代数)也是他的书名。

常见误区

  1. 以为算法是高深的数学——泡茶的步骤写合格了就是算法,起点很平易。
  2. 以为算法专属于计算机——菜谱、说明书、操作规程都是算法思想的体现。
自测三问(点开对答案) 1. algorithm 一词的来历? —— 源自 9 世纪波斯数学家花拉子米的名字。 2. 程序、算法、数据结构的关系? —— 程序=算法(步骤的组织)+数据结构(数据的组织)。 3. 本章七个要点的阅读顺序像什么? —— 像写算法的流程:想清楚→套经典→权衡快慢→优化→落笔。

相关笔记