上一篇文章里,我说了数学中的迭代法,并用编程实现了国际象棋发明者的那个麦粒的计算问题,这篇文章我们就来看看数学归纳法。通过数学归纳法,我们能直接从理论上证明某个结论,从而避免很多计算,节约大量的计算资源和时间。
平常我们说的归纳,就是从大量经验事实中找出普遍特征的认知方法。我在我的一篇文章里,介绍了模式识别和机器学习的区别,其中机器学习就是一种归纳的方法,是自下而上的,这也是人类的许多体系的构成方法。
但是日常生活中所讲的归纳,和数学中的归纳还是不一样的。它们的区别是什么?具体数学归纳法可以做什么?下面我就来解答这些问题。
什么是数学归纳法?
回到国际象棋的发明人和麦粒的故事。
传说,印度的舍罕国王打算重赏国际象棋的发明人——大臣西萨·班·达依尔。这位聪明的大臣跪在国王面敢说:“陛下,请你在这张棋盘的第一个小格内,赏给我一粒麦子,在第二个小格内给两粒,在第三个小格内给四粒,照这样下去,每一小格内都比前一小格加一倍。陛下啊,把这样摆满棋盘上所有64格的麦粒,都赏给您的仆人吧?”国王说:“你的要求不高,会如愿以偿的”。说着,他下令把一袋麦子拿到宝座前,计算麦粒的工作开始了。……还没到第二十小格,袋子已经空了,一袋又一袋的麦子被扛到国王面前来。但是,麦粒数一格接一格地增长得那样迅速,很快看出,即使拿出来全印度的粮食,国王也兑现不了他对象棋发明人许下的语言。
在棋盘上放麦粒的规则是,第一格放一粒,第二个放两粒,以此类推,每一格都比上一格多一倍的麦子,直到放满64个格子。
如果你站在国王的身边,看着这个棋盘,你发现从第一格到第八格的麦子数分别是:1、2、4、8、16、32、64、128。这个时候你突然灵机一动,发现了棋盘的规律,第一格是1粒,也就是21 - 1粒,到了第二格,这两格的麦粒数总和就是 22 - 1。然后你猜测,到第 n 格的麦子总数就是 2n - 1 粒,所以到了第64格,总共就需要264 - 1粒麦子。
这时候你拿出和你一起穿越到古印度的计算器,264 - 1 = 18446744073709551615
然后就可以提醒国王他拿出全国的粮食都不够了。
这个假设是否成立,我们有待验证,但是类似这种无穷数列的问题,我们通常可以采用数学归纳法(Mathematical Induction)来证明。
在数论中,数学归纳法用来证明任意一个给定的情形都是正确的,也就是说,用第一个、第二个、第三个,一直到所有情形,概不例外。
数学归纳法的一般步骤是这样的:
- 证明基本情况(通常是 n = 1 的时候)是否成立;
- 假设 n = k - 1 成立,再证明 n = k 也是成立的(k 为任意大于 1 的自然数)。
我相信只要大家对高中数学还有印象,就对这个步骤很熟悉。
现在我们就用数学归纳法来证明上面的例子。我将上面的命题分为两个子命题来证明。
第一个子命题是:第 n 个棋格放的麦粒数为 2n-1。
第二个子命题是:前 n 个棋格放的麦粒数总和为 2n - 1