计数的难题——对应、顺序和递归分解

        日常生活离不开数字,除了刚学会的孩童和数学家,恐怕没有哪个人会把数数(计数的通俗说法)当做一件令人惊讶的事情,就连牙牙学语的孩童都时常忘不了向见面的人介绍自己“今年几岁了”。每个人每时每刻都在数数,有时候一分钟一分钟的数(比如约定见面时间),有时候一天一天的数(比如重大节日和农耕节气的确定),还有的时候一年一年的数(比如历史事件)。小到个人的日常作息、聚会出行,大到农耕时令、祭祀活动、军队出征,自从人类开启文化时代,人类的每个活动都有了数字的印记。

        早在人类的石器时期,人们只有锋利的石头作为工具,便在动物的骨头上刻划一道道的整齐的痕迹,这可能是人类最早的记录数字的活动了。到了农耕时代,丈量土地修建房屋,兴修水利种植农产品,发明工艺生产农具器械,形成市集买卖交易,吃穿住行,每一样都离不开数字,人们逐步发展出成熟的记数(即记录数字)系统。

       也许父母们对小学生学不好算术很困惑,甚至迁怒于孩子, 数数这件事有那么难吗?答案是肯定的。

      现在让我们来试着算算集市上的一群羊或鸡。在阿拉伯数字没有通用之前,如果数数的是个中国人,他可能会数一、二、三、四……十,然后记下“十”这个汉字(一个简单的符号);如果数数的是个英国人,他可能会数one,two,three,.....,ten,然后记下ten这个单词(也可以简单的把这个单词当作一个符号)。这其实就是将若干只鸡或羊对应(映射)到一个数目的过程,这个过程当然也隐含着数目大小的问题。比如5只鸡和6只羊,在为每只鸡都指定一只对应的羊后,还余下一只羊,羊比鸡多,对应的结果就是6比5大。数目和数目大小的观念就是这样慢慢形成的。

      如果数目只有几个,是不难的;如果有好几个,就会比较复杂;但要是有成百上千个,那困难就更大了。

      从1到2,从2到3,再从3到4,......,最后数到10,这个看似简单的过程,其实涉及一个叫“序”的数学概念。1之后是2,2之后是3,3之后是4,......,乃至无穷。有了顺序,人们才不会对这么多的符号感到混乱,才能对一个符号所代表的数是大还是小有感觉。这样我们就不难理解为什么古代汉语中“三”也有“很多”的意味了。如果没有一点顺序的概念,数到三,人们就开始觉得很难了。同样的,我们也不难理解生活中较多的使用12进制的原因,因为比十根手指头多太多(比如超过3)就数不过来了。顺序的观念是人类对数的认识的一次飞跃。甚至可以说,没有顺序,就谈不上数学。

       但是,光有顺序的概念还是不够的,顺序提供了产生数字的方法,可是并没有解决记录数字的问题。要记录数值为十几的数字是比较容易的,要记录数值上万的数字就有难度了。如果数目很大,那不仅数数的过程就会相当的漫长,而且还要约定同样数目的符号来记录这些数字。发明新的符号难不倒我们(想想婴儿拿起笔就到处涂鸦的天性),但是记住每个新产生的符合及其代表的数值会很困难。记住这些符号是必须的,否则人们无法在交流中取得对这个符号的共识。只有取得人们共识的符号才能在历史中保留下来,并在为人们实际使用。符号的演化也涉及自然选择的过程,这是后话,以后在涉及自然的专题里讨论。

       现在试着想象你是怎么记录多于10的数字的。如果11不是记作两个按顺序并列排放的1,12也不是记作个按顺序并列排放的1和2,你会用什么符号来记录这个数呢?更进一步,如果这个数不是11,也不是12,是100,1000,10000,....,你又该怎么办? 

       我们试着来重现这个过程。你从一数到十(假设用中文来记录数字),接着数11,你可能再也想不出可以使用哪一个单独的符号来记录它了,于是你把它记为“十一”,然后是“十二”,一直到“十九”。当你数到20时,你会写下什么呢?是“十十”,还是“二十”呢?数到21的时候,你又可能用什么方法来记录这个数呢?是“十十一”,还是“二十一”?如果你继续数到99,100,101,你会怎样记录呢?现在我们试着把一些数字和它们对应的中文列在表格里,方便我们观察。

数字中文观察与思考较规整的记法使用“0”的记法
1随便写个符号吧。11一
9随便再写一个符号吧。99一
10已经有10不同的符号了!十,规整为:1十1十0一
11十一再多符号就记不住了,用十和一凑在一起用吧。十1,规整为:1十11十1一
19十九 十9,规整为:1十91十9一
20二十十十,这样凑合用吧。2十2十0一
21二十一十十一,这样也还方便。继续,十十十一(31),十十十十一(41),十十十十十一(51),有点不方便了。2十12十1一
99九十九十十十十十十十十十九,太不方便了,写成九十九吧。9十99十9一
100一百,这样记录可以吗?先试一下。十十,规整为:1十十1十0十0一
101一百零一一,看起来很奇怪,看起来也像是10个十和10个一。十十1,规整为:1十十11十0十1一
111一百一十一十一一(先数到一百,再数十一,写成“十十十一”,比101的写法更乱了。还是十个十个数吧,共11个十,再多一。幸亏之前已经有了11的写法“十一”!)十1十1,规整为:1十1十11十1十1一
201二百零一二十一(20个十,再多一。幸亏之前已经有了20的写法“二十”。)2十十12十0十1一
999九百九十九九十九九(99个十,再多九。幸亏之前已经有了99的写法“九十九”。)9十9十99十9十9一
1000一千十十(是10个十十吗?“十十”是什么东西,看晕了,还是当做100个十吧。)十十十,规整为:1十十十1十0十0十0一
2010二千一十二十十一(十个十个数吧,共有201个十。先把201写出来,之前写过的——二十十一,再写十。)2十十1十2十0十1十0一
2111二千一百一十二十一十一一(已经找到规律了,211个十,先把211写出来,再写十,再多一)2十1十1十12十1十1十1一

       上面这个表极其简单的模拟了人类的计数观念及相应的记数方式发展的历程。在这个漫长的过程中,至少发生了三次重大飞跃。一是把数字(比如表中的“十”)当做像鸡和羊一样可以数的对象,只有这样看待数字才有可能把很大的数字按照量级分解开来。二是把数字看作像积木一样可以组合和分解的结构体(比如表中把11分为1个“十”和1个“一”),这种想法也是加法(运算符+)产生的基础。我们接下来会谈到。三是利用递归操作为这个结构体确立了进位制,一种分不同层级(数量级)的记数方法。比如表中把2111归约为211个“十”和1个“一”,然后把211归约为21个“十”和1个“一”,再进一步把21归约为2个“十”和1个“一”,直到规约后的数字为1到9。通过递归操作不断进行数值分解,任何一个数都可以分解为若干个、若干十、若干百、若干千、若干万,......,而且这些数位(即,十、百、千、万、.......)上的数目都不会超过10,然后再把这些分解出来的数值对应的数字符号组合起来,就可以得出这个数字的写法了。这些数字其实就是自然界中常见的自由尺度(scale free)模型的实例。自由尺度模型的详细内容,以后讨论自然的时候再介绍。

        使用“0”来帮助记数无疑是自然的,也是伟大的想法。使用“0”之后,数字的变得很规整,比如表中“十”和“一”成了数位的标志,仅仅起到了分隔0到9这几个阿拉伯数字的作用,完全可以省略了。去掉数位标记的的做法是高效的,但是它也掩盖了不同数位之间的顺序关系。下面的表格展现了数位之间的顺序关系,将这个顺序关系和自然数(的顺序)对应起来,便有了对数(对数函数)。对数隐含了一种更快的计数方式,对于数值比较大的数字,对数是非常高效的。

对数(顺序对应的自然数)01234......
十进制的数位......
10的乘方(10倍10倍的数)110100100010000......
二进制的算法十六......
2的乘方(翻倍的数)1

2

2×22×2×22×2×2×2......

        如果采用翻倍的方法数数,每数一次,就从还没数过的数目中拿出和已经数过一样多的数目。这样,只要数10次,我们就可以得到1024这么大的数字了。现在我们来试一下。最开始,我们只有1,所以数一的时候,我们拿出1个来凑在一起,现在我们总共有2了;数二的时候,我们再拿出2个来和之前数过的数目放在一起,现在我们总共已经有4了;数三的时候,我们再拿出4个来凑在一起,现在我们已经有8了;数四的时候,我们再拿出跟现在一样多的数目,凑再一起我们就有16了;......;如此操作,继续数下去,我们就会发现不用多久就可以得到一个数值很大的数字。如果使用十进制,我们同样可以数得很快,不同之处只是每次数出10倍已数的数目。

       关于数数的事情我们就讨论到这,下面我们要讨论人们是如何操作和运用这些数的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值