无穷是存在的,但是我们能到达那里吗?如果要做的工作无穷小的话,我们是否能做无穷多的工作?在我们搞清楚这些问题之前,让我们先考虑一些看起来非常大,似乎要接近无穷的事物,以及一些看起来我们几乎是在做着无穷的工作的情况。
有一个关于在国际象棋棋盘上放米粒的古老难题。这个难题的背景是这样的:一个人被要求在国际象棋棋盘的第一个方格里放上一粒米,在第二个方格里放上数量翻一番的米,在第三个方格里,米粒数量再翻一番,以此类推,直到棋盘上的每一个方格都被放满,一旦他完成这项工作,他将得到整张棋盘上的米。问题是,最终他能得到多少粒米?简化版的答案是,非常多。但是准确地说,到底一共有多少粒米呢?
原则上讲,这不是一个困难的问题。
你只要不断乘以2,然后将所有得到的答案加在一起,直到你计算完所有的64个方格就可以了。然而,如果你尝试这么做,你会发现数字增大的速度快得惊人。在正常情况下,这个数字会比你的计算器甚至普通模式下的计算机所能处理的最大的数字还要大。除非你有一些特殊的计算工具,否则你是无法算出这个数字的。
有一些窍门可以帮助你加快计算,但是你最终还是需要处理一个非常非常大的数字——18446744073709551615粒米。
当然,我们通常不会以粒来计量米,除非在听起来有点儿荒谬的数学问题里。(我第一次在数学课堂里听到这个问题时,曾经试图通过手工计算来得出答案。事实证明,我算错了。)那么上面那个米粒的数量在实际情况中相当于多少米呢?我们仅需要称量出1克重的米,然后数出粒数——1克米大概有50粒左右——然后我们就可以近似地进行下面的计算:
1克 = 50粒米
1碗 = 100克 = 5000粒米
1人 = 每天4碗米 = 20000粒米
全世界 = 70亿人 = 140000000000000粒米
1年 = 大约500天 = 70000000000000000粒米
我们最后得到的数字有16个零。我们曾经计算出的米粒数量为18446744073709551615,近似于在2后边有19个零。这个数字比我们算出来的够全世界所有人吃一年的米多出来3个零,换言之,大约是其1000倍。
所以这么看起来,这些米可以养活全世界人口大约1000年。(当然在这里我们没有考虑到的真实情况是,世界人口每年都会增长很多。)我的计算是非常粗略的,但是我相信你能明白我的意思:只不过是在一个棋盘上移动,做着一些平淡无奇的数量翻倍,但是很快,你就拥有了无法计量的米粒——比世界上现有的所有的米还多。
千层酥的制作依赖相同的原理,即重复做乘法使事物以极快的速度增长。
千层酥里具有惊人数量的薄层,它们是通过将面团折三折这个步骤重复6次制成的。第一步,把一层厚厚的黄油夹在面团中间。当黄油的用量刚刚好时,黄油可以在你擀面团时恰好平铺在夹层里。第二步,将面饼折三折,然后冷却。这样所有层都会保持一定的硬度,而不会和其他层粘在一起。第三步,再一次擀面,将面饼再次折三折,然后冷却。如此操作6次。重复“×3”使得层数增长得非常快。
接下来,当你烘烤千层面团时,薄薄的黄油层融化了,黄油的液体部分蒸发并产生蒸汽,这将层与层相互推离。因此除了抽象数字的增长以外,你还能看到千层面团在烤盘中有形地变大。
这是我最喜欢的关于指数增长的实物演示。一般情况下,人们说事物正在呈指数型增长,仅仅是想表达它们增长了很多。这基本上是正确的,但其正式的数学定义是事物一直以相同比例的速率增长。如果我在第一次将面团折三折,第二次折四折,第三次折五折,第四次折六折,这样层数会增长得更快,但它就不是指数型增长了,因为增长的速率发生了变化。
我喜欢指数增长能够直接对应于美味的千层酥这个事实。千层酥的多层次不仅仅是为了引人注意和美观。当薄薄的一层层酥皮在口中融化的时候,它能够带来精妙的口感。千层酥以难以制作闻名,但是我认为使用指数增长的天才方法重复折三折的步骤,实际上大大降低了制作那些千层酥薄层的难度。毕竟,单独擀出这样的薄层是非常困难的。数学的主旨就是将复杂的事物变得简单一些。不幸的是,不知怎么,它反而往往会创造出莫名其妙的复杂问题。
我记得当iPod(苹果公司发布的便携式数字多媒体播放器)刚刚问世的时候,我在地铁上看见了它大大的广告标语——“240首歌曲,100万种不同的方式”。这个广告的核心理念是希望让人们记住一件事,那就是就算只有240首歌曲,如果你不是在播放列表中从头播到尾而是用随机的顺序来播放它们,那么你将有100万种不同的播放方式。
事实上,100万是一个极大的低估。出于好玩的目的,我坐在火车上计算了一下为了获得100万种不同的播放方式,你最少需要多少首歌。
如果你有两种歌,那么你只有两种播放它们的方式:从一首开始然后播放另一首,或者反过来。假设你有三首歌。对于第一首歌,你有三首歌可供选择;对于第二首歌,你只有剩下的两首歌可供选择;对于第三首歌你将不再有选择。
(这里有一个前提假设是一首歌你只想听一次,虽然在现实中我经常重复播放同一首歌曲几个小时。)我们要再画一张树状图。与之前不同的是,这一次每一层的枝杈会越来越少,因为你不想重复播放,所以我们可供选择的歌曲数量就会越来越少。
所以在这里我们有6种可能的播放顺序,从树的最上层到最下层的每一条路径都代表了一种播放顺序。根据每一级可供选择的路径的数量,我们可以把可能的播放顺序总数计算为3×2×1。现在假设我们有4首歌,我们会得到一个树状图:或者通过下面的方式计算:第一首歌有4种可能性,第二首歌有3种可能性,第三首歌有2种可能性,最后一首歌有1种可能性。
我们可以计算出,总的可能性的数量为4×3×2×1。(事实上我们并不需要在最后写上1,因为乘以1并不会改变任何事。)这在数学中被称为阶乘。“4的阶乘”写为“4!”。一般来说,n的阶乘为:n×(n – 1)×(n – 2)×…×4×3×2×1。
我们也可以用归纳法来定义这个概念。这看起来有点儿像我那个“你好”小程序里面的循环:l 1! = 1 l (n + 1)! =(n + 1)×n!所以,如果我们有n首歌,可能的播放顺序总数就是n!。因为第一首歌我们有n个选项,第二首歌有n – 1个选项,第三首歌有n – 2个选项,以此类推,倒数第二首歌有2个选项,最后一首歌只有1个选项。
现在,我们可以回到最初的那个问题:为了获得100万种不同的播放方式,你至少需要多少首歌?以数学的方式来说,这意味着我们要寻找一个最小的n值,并使这个n!大于100万。我们可以依次写出阶乘的值,直到我们找到这个数字。记住,从一行到下一行计算下去的时候,我们只需要用这一行的结果乘以下一个n的值:
1!= 1
2!= 2
3!= 3×2 = 6
4!= 4×6 = 24
5!= 5×24 = 120
6! = 6×120 = 720
7! = 7×720 = 5040
8! = 8×5040 = 40320
9! = 9×40320 = 362880
10!= 10×362880 = 3628800
好极了,我们已经突破了100万!我们只需要10首歌曲,就能用超过300万种顺序播放它们了。
我们现在可以问另一个问题了。如果有240首歌,我们能有多少种播放它们的方式?我们需要做如下的计算:240×239×238×…×3×2×1。
如果不使用特殊工具,这个计算几乎是不可能实现的。因为这个数字会变得非常非常大。简单地使用普通计算机电子表格尝试了一下之后,我发现在采取近似之前它只能计算到17!。于是我们得到:17!= 355687428096000。
我高兴地发现我的手机计算器能计算得更多:18!= 6402373705728000。我的手机计算器可以用近似的方法计算接下来的阶乘,但是它最多只能告诉我:103!≈ 9.9×10^163。之后就完全没指望了。如果再进行更大数据的计算,它只会提示我出现错误。如果采用近似计算的话,我的计算机电子表格能一直算到170!:170!≈ 7.3×10^306。接下来它也没指望了。
这是因为我的旧而脆弱的计算机是使用内存来储存大的数据的,而171!是它碰到的第一个因为太大而无法处理的阶乘。
计算统计学家里克·维克林(Rick Wicklin)编写了一个计算大数阶乘的程序。他最近恰好在他的博客里公布了200!的数值。他解决大数字存储问题的方式是让计算机把大的数字当作一个长长的字符串来处理。然后他让计算机像人类手算一样进行乘法计算,一位一位地做并且在需要的时候进位。他计算200!
得到的答案就是一串超乎寻常的数字,它有375位数字,比广告中描述的“100万种方式”要大非常、非常、非常多个数量级。而事实上,这还不是240!。在摆弄这些大到荒谬的数字时,我还想看看,你的iPod里需要有多少首歌才能让它们的播放方式多于那个棋盘上的米粒。答案是,21。这就告诉我们,翻倍数字能使它们变大得非常快,而阶乘能让它们变大得更快。
你也许想知道在那个数字的末尾有那么多0是否是一个奇怪的巧合。
事实上,上面那个数一共有49个0。大数的阶乘结果注定会在末尾有大量的0,即使不知道阶乘的答案,我们也能算出它的末尾会有多少个0。最终答案中的每一个0都来自一个因子10,而每一个10都来自阶乘数字中的一个因子2和一个因子5。由于存在的因子2要比因子5多,因此我们只需要数出从1到我们所计算阶乘的数字之间有多少个5的倍数。记住,有些数字具有多个因子5,因此会贡献多个0。
小时候,孩子们会长得非常快。因为他们实在是太小了,所以看起来会比实际长得更快一些。假设一个孩子在最初的几年里一年大约长高10厘米,对于一个婴儿来说,这个增长量显得非常大,因为10厘米占婴儿总长的比例很大。当然,孩子们的生长速度是不同的。有些孩子在小时候比较矮,但是未来某段时期会出现一个急剧的增长,并开始超越周围的所有人。
在数学中,我们也会考虑事物增长得多快,是否有些事物会比其他事物增长得更快这些问题。例如,在米粒的例子里,我们用2^n来表示数量,这里n是稳定增大的。在歌曲播放的事例中,我们用n!来表示数量,这里n是稳定增大的。在这两种情况下,数字都会非常快地增长到难以置信的大小,虽然它们仍然是有限的。在数学上,我们说“当n趋于无穷时,2^n趋于无穷”。在这里,我们非常谨慎地避免了直接宣称某些事物“是”无穷的。
同样,当n趋于无穷时,阶乘n!也趋于无穷。但是我们会感觉到n!比2^n增长得“更快”一些。这又是什么意思呢?
搞清楚这件事的一个方式就是把二者构建成一个分数:
从这个分数中,我们可以观察随着n的增加谁会“赢”得比赛。如果分数数值持续变大,就意味着n!胜利了。如果分数数值持续变小,那么2^n就胜利了。如果分数保持不变,就表示这是个平局。现在我们可以再次耍一个小聪明,将这个分数写成:
接下来,我们可以像这样将它分解成一个个单独的分数相乘:
现在,我们可以看出这是一大堆分数的乘积,它们几乎都是头重脚轻的。除了最末尾的。此外,随着n越来越大,分数的乘积逐渐包含越来越多的项,同时新项将会比之前的项更为头重脚轻,因为其顶部的分子将越来越大,而底部的分母则始终是2。最终的结果就是顶部明显胜过底部。
在这里,我们只考虑n的正数次幂。因为负数次幂通常根本不会带来增长。随着n的增大,n的负数次幂通常越来越小。
有个东西比所有可能的n的幂都要增长得慢,那就是log n。你也许还记得,对数是与指数相反的。如果我们以10为底来做对数,那么log n就是“将10增大到n所需要的指数”。所以log 100就是2,因为你计算10的2次幂就能得到100。而log 1000就是3。
然后100到1000之间任意数的对数都位于2和3之间。以10为底数取对数基本上就是在计算一个数在以10为基数的情况下包含多少位数字。所以当n增大时,log n也会持续增大,但其增大的速度很慢。当n已经增大到100万时,log n才仅仅增大到6。
这就是对数有用的一个原因。它可以将大数字转换成小数字,这样我们就能较方便地处理这些数字了。
有这样一个理论,当数字增大到超过某个特定点的时候,我们的大脑就无法真正处理这个数字了。所以我们转而使用对数的方式思考,观察这个数有多少位而不是看它有多大。你可能也会这么做,即使你没有意识到你是在“取对数”。这就是为什么在之前的例子里我会告诉你200!所得到的数字有375位,因为375是一个我们能处理的数字。换言之,我刚刚从对数的角度对这个数字进行了转换。
当一个数字大到这个程度时,与数字的数量级相比,你基本上已经不会在乎在这个数的某一位上加上或者减去一个1了。这就是为什么在米粒的例子中我如此随意地假设一年中有500天。我知道相对于这个事件的宏伟性,500与365之间并没有什么重要的区别,我真正需要做的就是选择一个与365具有相同位数的数字。这儿,我就使用对数的方式进行了思考。
总而言之,对数比n的任意确定的幂都要增长得慢。
有可能你增长得非常缓慢,以至于虽然你还在增长但是已经看不出来了。想象一下你正在节食,你决定只吃一块蛋糕的1/2。但蛋糕太美味了,你决定再吃这块蛋糕的1/3。接下来,由于你像我一样控制不住地想要更多但是又真的不想变胖,所以你决定再多吃一点点,但是这次只吃这块蛋糕的1/4。接下来1/5,再接下来1/6,一直继续下去。最终你将吃下多少蛋糕呢?经过一段时间之后,你每次吃的蛋糕将基本上不存在了。
因为在100万轮之后,你只能再吃这块蛋糕的百万分之一,这基本上就等于什么都没吃,对吧?
错了。如果你持续这样吃下去直到永远,你最终将会吃下无穷量的蛋糕。事实上,你吃的蛋糕量是呈对数增长的。它的增长速度确实很慢,而且会越来越慢,但仍会不可阻挡地趋于无穷。
从图中你可能无法判断这个曲线最终是否会完全变平,但我来告诉你,它真的不会。这个曲线是无边界的,这表示无论你想到哪个数字,最终它都会超过那个数字。无论你想要它变成多大,最终它都会变得比你预想得更大。
本期我们送这本书。本期话题:前段时间媒体报道:一道数“一亿粒米”的小学数学作业,在网上引起了诸多争议,你有什么办法可以“数”出这一亿粒米吗?欢迎大开脑洞留言分享给我们。
截止到9月26日中午12点,精选留言点赞前5名的幸运读者们,大院er将为你送上《超越无穷大:一次跨越数学边界的冒险之旅》一书。本期文章正是选自此书。