一套写给程序员的数学书,凭什么能畅销26万册!

图灵在陆续出版计算机图书的同时,便早早意识到数学对于程序员进阶和提升的重要性,因此这套《程序员的数学》便应运而生,到今天已经出版了4本,成为众多程序员手中必不可少的数学学习书。

整套书配上有趣易懂的图解教程,没有晦涩的公式,只有好玩的数学题,阐述编程需要的基础数学知识和数学思维,成为众多人的不二之选。累计已畅销26万册。

我们选取其中的一个章节:数学归纳法,一起来感受这本书的魅力吧!

来源 | 《程序员的数学(第2版)》

作者 | 日结城浩

译者:管杰 卢晓南

数学归纳法是证明某断言对于 0 以上的所有整数(0, 1, 2, 3, ···)都成立的方法。0 以上的整数 0, 1, 2, 3, ··· 有无穷个,但若使用数学归纳法,只需要经过"两个步骤",就能证明有关无穷的命题。

首先,我们以求出 1 到 100 之和为例介绍数学归纳法。接着会穿插几道思考题来看一下数学归纳法的具体实例。最后,我们会讨论数学归纳法和编程的关系,一起了解一下循环不变式。

1 高斯求和

思考题(存钱罐里的钱)

在你面前有一个空存钱罐。

  • 第 1 天,往存钱罐里投入 1 元。存钱罐中总金额为 1 元
  • 第 2 天,往存钱罐里投入 2 元。存钱罐中总金额为 1 + 2 = 3 元
  • 第 3 天,往存钱罐里投入 3 元。存钱罐中总金额为 1 + 2 + 3 = 6 元
  • 第 4 天,往存钱罐里投入 4 元。存钱罐中总金额为 1 + 2 + 3 + 4 = 10 元

那么,每天都这样往存钱罐里投入硬币的话,第 100 天时的总金额为多少呢?

思考一下

本题要求算出第 100 天时存钱罐的总金额。要求出第 100 天的金额,只要计算 1 + 2 + 3 + ··· + 100 的值就行了。那么,具体应如何计算呢?

一般来说,最先想到的肯定是机械地将它们逐个相加。1 加 2,再加 3,再加 4, ···,再加 99, 再加 100。只要这样加起来就能得出答案了吧。如果说笔算比较花时间的话,也可以使用计算器或编程来计算。

不过,德国数学家高斯在 9 岁时遇到了同样的问题,却马上得出了答案。当时他既没用计算器也没用计算机。那么,他究竟是如何做到的呢?

小高斯的解答

小高斯是这么考虑的。

1 + 2 + 3 + ··· + 100 顺次计算的结果和 100 + 99 + 98 + ··· + 1 逆向计算的结果应该是相等的。那么,就将这两串数字像下面那样纵向地相加。

如此一来,就变成了 101 + 101 + 101 + ··· + 101 那样 100 个 101 相加的结果。这样的计算就非常简单了。只要将 101 乘以 100 即可,结果为 10 100。不过 10 100 是要求的数的 2 倍,因此还得除以 2,答案为 5050。

答案:5050 元。

讨论一下小高斯的解答

小高斯的方法可谓绝妙非凡!

为了便于大家理解,我们将小高斯的方法用图来表示。求 1 + 2 + 3 + ··· + 100 的结果,相当于计算图 4-1 所示的排列成阶梯型的瓷砖块数。

图 4-1 将小高斯的方法图形化

小高斯则又做了一个一模一样的阶梯,并将两者合二为一,组成了一个长方形(图 4-2)。

图 4-2 将两个阶梯组合成一个长方形

由两个阶梯组合而成的长方形,纵向有 101 块瓷砖,横向有 100 块瓷砖。因此,该长方形由 101 × 100 = 10 100 块瓷砖构成。而所求的瓷砖块数就是 10 100 的一半,即 5050。

我们来说一说小高斯的计算效率。使用他的方法不需要花费力气逐个相加。只要将两端的 1 和 100 相加,结果乘以 100 再除以 2 就行了。

现在,假设我们不是从 1 加到 100,而是从 1 加到 10 000 000 000(100 亿)。这次我们就不能采用逐一相加的方法了。因为即使计算器 1 秒能完成 1 次加法计算,加到 100 亿也得花 300 年以上的时间。

不过,如果使用小高斯的方法,那么从 1 加到 100 亿也只要 1 次加法、1 次乘法、1 次除法运算即可完事。我们来实际计算一下。

高斯(Karl Friedrich Gauss,1777------1855)后来成为了历史上著名的数学家。

归纳

小高斯运用了以下等式。

这里,使用变量 ,将"1 到 100"归纳为"0 到 "。这样,上面的等式就变为如下形式。

那么,这个等式对于 0 以上的任意整数 都成立吗?即 为 100、200,或者 100 万、100 亿时该等式也都成立吗?如果成立的话,又如何来证明呢?

这种时候就要用到数学归纳法了。数学归纳法是证明"断言对于 0 以上的所有整数 都成立"的方法。

2 数学归纳法---如何征服无穷数列

本节,我们就来讨论一下数学归纳法的相关内容。首先,从"0 以上的整数的断言"开始学起,然后使用数学归纳法来证明小高斯的断言。

0 以上的整数的断言

"0 以上的整数 的断言",就是能够判定 0, 1,2 等各个整数为"真"或"假"的断言。这样说明或许难以理解,下面就举几个例子。

  • 例 1

    ,即" 为偶数"的断言。由于 为 0 时, 为偶数,所以 为真。

    又怎么样呢?因为 为偶数,所以 也为真。

    那是否可以说断言 ,对于 0 以上的所有整数 都为真呢?

    对!可以这么说。因为 0 以上的任意整数乘以 2 的结果都为偶数,所以对于 0 以上的所有整数,断言 都为真。

    • 断言 : 为偶数
  • 例 2

    那么,断言 又将如何呢?该断言对于 0 以上的所有整数 都成立吗?

    例如,假设 为 1,则断言 就是"1 × 3 为奇数",这个结果为真。但不能说对于 0 以上的所有整数 n,断言 都为真。因为假设 为 2,则 的值为 2 × 3 = 6。而 6 是偶数,所以断言 不为真(为假)。

    是推翻"断言 对于 0 以上的所有整数 都成立"的反例之一。

    • 断言 : 为奇数
  • 其他例子

    那么请思考一下,在下面 4 个断言中,对于 0 以上的所有整数 都成立的有哪些。

    断言 ,对于 0 以上的所有整数 都成立。因为若 为 0 以上的整数,则 肯定是 0 以上的整数。

    断言 ,对于 0 以上的所有整数 不成立。例如,断言 为假。因为 0 - 1 = -1,不是 0 以上的整数。 是唯一的反例。

    断言 ,对于 0 以上的所有整数 都成立。

    断言 ,对于 0 以上的所有整数 不成立。因为当 为奇数时, 的结果不是整数。

    • 断言 : 为 0 以上的整数
    • 断言 : 为 0 以上的整数
    • 断言 : 为 0 以上的整数
    • 断言 : 为 0 以上的整数

小高斯的断言

在讨论了"0 以上的整数 的断言"之后,我们将话题转回小高斯的断言。

可以使用下述有关 的断言形式来表现小高斯的观点。

  • 断言 :0 到 的整数之和为

接下来要证明的是," 对于 0 以上的所有整数 都成立"。可以通过描画前面的阶梯状的图(图 4-1)来证明,但是有人可能会有这样的疑问:0 以上的整数有 0, 1, 2,3 等无穷个数,而图中表现的只是其中一种情况。当 时也成立吗?

确实,0 以上的整数有无穷个。这就要通过引入"数学归纳法"来证明了。使用数学归纳法能够进行 0 以上的所有整数的相关证明。

3 什么是数学归纳法

数学归纳法是证明有关整数的断言对于 0 以上的所有整数(0, 1, 2, 3, ···)是否成立时所用的方法。

假设现在要用数学归纳法来证明"断言 对于 0 以上的所有整数 都成立"。

数学归纳法要经过以下两个步骤进行证明。这是本章的核心内容,请大家仔细阅读。

  • 步骤 1

    证明" 成立"

  • 步骤 2

    证明不论 为 0 以上的哪个整数,"若 成立,则 也成立"

在步骤 1 中,要证明当 为 0 时断言 成立。我们将步骤 1 称作基底(base)。

在步骤 2 中,要证明无论 为 0 以上的哪个整数,"若 成立,则 也成立"。我们将步骤 2 称作归纳(induction)。该步骤证明断言若对于 0 以上的某个整数成立,则对于下一个整数也成立。

若步骤 1 和步骤 2 都能得到证明,就证明了"断言 对于 0 以上的所有整数 都成立"。

以上就是数学归纳法的证明方法。

试着征服无穷数列

数学归纳法通过步骤 1(基底)和步骤 2(归纳)两个步骤,证明断言 对于 0 以上的所有整数 都成立。

为什么只通过两个步骤的证明,就能证明无穷的 呢?请作如下思考。

  • 断言 成立

    理由:步骤 1 中已经证明。

  • 断言 成立

    理由: 已经成立,并且步骤 2 中已证明若 成立,则 也成立。

  • 断言 成立

    理由: 已经成立,并且步骤 2 中已证明若 成立,则 也成立。

  • 断言 成立

    理由: 已经成立,并且步骤 2 中已证明若 成立,则 也成立。

这样循环往复,可以说断言 对于任意整数 都成立。无论 为多大的整数都没关系。因为即使设 为 10 000 000 000 000 000,经过机械式地反复执行步骤 2,终究可以证明 成立。

这种数学归纳法的思路可以比喻为"推倒多米诺骨牌"。

假设现在有很多多米诺骨牌排成一列。只要保证以下两个步骤,那么无论多米诺骨牌排得有多长最终都能倒下。

  • 步骤 1

    确保让第 0 个多米诺骨牌(排头的多米诺骨牌)倒下

  • 步骤 2

    确保只要推倒第 个多米诺骨牌,那么第 个多米诺骨牌也会倒下

推倒多米诺骨牌的两个步骤和数学归纳法的两个步骤一一对应。

数学归纳法并不像"推倒多米诺骨牌"那样关注所用的时间。数学归纳法和编程不同,往往使用的是忽略时间的方法。这就是数学和编程之间最大的差异。

用数学归纳法证明小高斯的断言

下面我们就以证明小高斯的断言 为例具体看看数学归纳法。首先讨论断言 。

  • 断言 :0 到 的整数之和与 相等

使用数学归纳法就需要通过步骤 1(基底)和步骤 2(归纳)来证明。

  • 步骤 1:基底的证明

    证明 成立。

    就是"0 到 0 的整数之和与 相等"。

    这可以通过直接计算证明。0 到 0 的整数之和是 0, 也是 0。

    至此,步骤 1 证明完毕。

  • 步骤 2:归纳的证明

    证明当 为 0 以上的任一整数时,"若 成立,则 也成立"。

    现假设 成立。即假设"0 到 的整数之和与 相等"。这时,以下等式成立。

    假设成立的等式

    下面,我们来证明 成立。

    要证明的等式

    的左边使用假设的等式 可以进行如下计算。

    而 的右边可以进行如下计算。

    的左边和右边的计算结果相同。

    由此,从 到 推导成功,步骤 2 得到了证明。

    至此,通过数学归纳法的步骤 1 和步骤 2 证明了断言 。也就是说通过数学归纳法证明了断言 对于 0 以上的任意整数 都成立。

求出奇数的和---数学归纳法实例

本节,我们使用数学归纳法来证明另一个断言。

通过数学归纳法证明

请证明以下断言 对于 1 以上的所有整数 都成立。

  • 断言 :

是比较有意思的断言。按从小到大的顺序将 个奇数相加,得到 ,即平方数 。这对吗?在证明之前,先通过较小的数 判断 的真假。

  • 断言 :
  • 断言 :
  • 断言 :
  • 断言 :
  • 断言 :

通过以上计算发现断言确实是成立的。

通过数学归纳法证明

下面我们来证明"断言 对于 1 以上的所有整数 都成立"。为此,需要通过数学归纳法的两个步骤进行证明。

虽然这次要证明的不是"0 以上的......",而是"1 以上的......",但只要将 0 换成 1 来进行基底的证明就可以使用数学归纳法了。

  • 步骤 1:基底的证明

    证明 成立。

    因为 ,所以确实成立。

    步骤 1 证明完毕。

  • 步骤 2:归纳的证明

    证明 为 1 以上的任意整数时,"若 成立,则 也成立"。现假设 成立,即以下等式成立。

    假设成立的等式

    下面证明 等式成立。

    要证明的等式

    的左边使用假设的等式 可以进行如下计算。

    而 的右边可以进行如下计算。

    的左边和右边计算结果相同。

    由此,从 到 推导成功,步骤 2 得到了证明。

    至此,通过数学归纳法的步骤 1 和步骤 2 证明了断言 Q(n)。也就是说,通过数学归纳法,证明了断言 对于 1 以上的任意整数 都成立。

图形化说明

断言 也可以用图来进行说明。下面我们来看看 的图示(图 4-3)。

图 4-3  的图示

1 块瓷砖、3 块瓷砖、5 块瓷砖、7 块瓷砖、9 块瓷砖可以构成 5 × 5 的正方形。这正好相当于断言 。

推荐阅读

《程序员的数学》(系列全四册)

机器学习、数据挖掘、模式识别基础知识,热销书程序员的数学系列套装,IT计算机编程基础数据教程书籍,掌握编程所需的基础数学知识和数学思维。

相关推荐
v:PLLucky201 小时前
眼部疾病智能检测系统
算法·yolo·机器学习·百度·facebook
Omics Pro1 小时前
00后大3休学创业!AI虚拟细胞
大数据·数据库·人工智能·算法·机器学习·自然语言处理
workflower1 小时前
从生成式模型开始的技术延伸
人工智能·机器学习·机器人·云计算·无人机
卷毛迷你猪1 小时前
快速实验篇(B11)用户 RFM 与聚类分群实战
机器学习·数据挖掘·聚类
patrickpdx2 小时前
dihedral group 二面体群
数学
言乐62 小时前
Python根据关联词搜索模型
开发语言·人工智能·python·机器学习·django
7yewh2 小时前
SLAM 非线性优化(5)
人工智能·机器学习
Rocky Ding*2 小时前
MaskGIT技术深度解析:图像生成如何从逐Token排队走向掩码并行预测
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·maskgit
Rocky Ding*4 小时前
Muse技术深度解析:用掩码并行生成图像,速度、语义与编辑能力如何同时成立
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·muse
唠点键盘之外的10 小时前
15 微调 vs RAG:到底怎么选
人工智能·机器学习·面试·aigc