原始人的除法引发的闲聊

现在有多少人知道乘法和除法是怎么一回事。Oh!NO!乘法口诀小学生都会,除法是乘法的逆运算,有超级详细的竖式演算规则,好像是小学三年级前的四则混合运算章节里教的...然而我要说的是,大错特错!你学会的仅仅是现成的规则而已,它只是告诉你具体怎么操作可能计算出正确的结果,仅此而已!专业化的学校教育使得每个人,包括老师和学生,都认为自己的专业就是运算本身,至于为什么那样做,并不感兴趣。写下本文的过程是一个吟唱的过程,唱给所有领域的科班出身的人,虽然我总是显得不合时宜又总是自嘲,嘲弄自己本人,嘲弄自己的职业。

加法的本质

加法最初的意义在于合并。一般被合并的两种东西都是实物,合并堆在一起便是了。原始的夫妻制之初,男人要把自己的工具,财产,牲口合并入女方家,最终合并的结果就是家庭的财产。与此同时,部落联盟也用这种方式来增加财富和战斗力。

乘法的本质

乘法最初的意义在于复制。用于早期的个人,家庭,部落以及部落联盟的计划,预算或者领地拓展。一般而言都是将现有的实物加倍或者多次加倍。注意,这种加倍得到的结果是虚拟的,并不是实际的。

除法的本质

除法最初的意义在于平均分割。用于实物的平均分配,一般在对等群体之间平均分配,和加倍不同,分配的时候受到总数的限制,因此,如何做到平均就是一个很大的问题。和乘法只是画了一张饼不同,除法的结果必须是实实在在的实物,并且每个人分得的量要是一样的。这就是除法和加法,乘法不同的原因,因此它也更加复杂

实施除法

要想做到公平,唯一可以信赖的东西就是“对折”,也就是一分为二!绳子作为最原始的计量物,将其中间对折,所有人都能看出来两边的两段是相同的,也许正是因为如此,绳子才作为最初的计量物的吧!绳子对折是唯一可以信赖的,你基本找不到什么东西能把绳子三等分...好吧,对折二等分是唯一可以利用的操作,那么必须想出一个操作序列可以利用对折二等分来实现一堆战利品的公平分赃!真可谓是:一生二,二生万物啊!
如果要等分3份,不妨先等分4份,然后再把其中1份按照相同的方式等分4份,取其中3份合并(注意,此处用到了原始加法)在每个人既有的数量上,剩下的1份继续切分,直到大家一致同意可以把剩下的贡献给神而不再继续切分!如果部落比较慷慨,那么就切割4等份,大家均分3等份,剩下1份供给神!实际上井田制也是采取了类似的思想而不是凭空想出来的。
注意,当时人们根本没有奇数偶数的概念,甚至没有数的概念,他们只有量的概念以及是否平均的判断,对于后者,只要拿出来比一下就知道了。如果一堆战利品要均分N等份,他们倾向于先均分N/2等份,也就是减少参与分赃机构的一半,这样就缩小了规模,简化了步骤。不要以为递归法是计算机的产物!但是如果没有办法将分赃者减半怎么办?那就将神也加入进来,这样就可以减半了,然后分完了之后,自私自利的巫师或者别的什么祭司之类的提出把神的那份也分了,于是重新开始分赃...步骤如下:
1.将N减半,如果N无法减半(即N是奇数),那就加入一个神参与分配;
2.物品减半;
3.如果当前参与分赃的人数为1了,或者不再继续分割承诺给神的东西了,那就把现有的物品作为度量,每人就分这么多;
4.如果当前参与分赃的人不是1,那么继续从步骤1开始,按照当前分赃人数规模分配完毕之后,如果有神的参与,并且要继续分割供奉物,那就按照相同的方法分割神的物品。

最终的结果是公平的分配战利品,期间仅仅用到了减半这种唯一可以信赖的均等分割操作。这就是除法的原始意义与本质。
也许你会觉得这和上小学时老师教的不一样,那是因为老师教给你的是阿拉伯数字以及10进制都发明出来后以及乘法口诀表被整理出来后的除法运算规则,有了乘法口诀表和小数之后,就不需要每次仅仅减半了,它的本质和以上是一样,万变不离其宗!
道生一,一生二,二生除法,然后生万物!有了除法的具体操作,求方根就不再话下了,它是实际上就是连续的除法!

无处不在的算法

千百年的人类文明,到处都是算法,都和除法一样,一系列的操作步骤。不管是你从词典查阅一个单词,还是按照一个地址实际找到它的经纬度,都是在执行一系列特定的算法。计算机诞生以来,在短短的几十年内重复了人类千百万年的算法,这些算法内化在芯片的门电路,稍瞬即逝地待在内存,或者驻留在磁盘中,比如以上的原始除法就可以用以下的计算机算法表示:
#include 
#include 

double calc(double unit, int slots)
{
        int od = 0;
        double result = 0;
        if (slots == 1 || unit == 0) {
                return unit;
        }
        od = slots%2;
        result = calc(unit/2.0, od?(slots+1)/2:slots/2);
        if (od) {
                result += calc(result, slots);
        }
        return result;
}

int main (int argc, char **argv)
{
        int slots = atoi(argv[1]);
        printf("result is:%lf\n", calc(1, slots));
}
在芯片中,它有更加高效的形式存在着。算法就是一系列特定的操作步骤,计算机是算法的高效执行者,你可以把计算机当成历史的浓缩,但是它却远不是历史的创造者!如果不是有一个除法算法驻留在计算机,它无论如何也想不出如何在N个人之间平均分配战利品(或者赃物)。

更容易理解的原始除法

平时的我基本上是不开电脑的,除了发邮件,写随笔,以及快速查阅一些历史人物。平时做的最多的就是研究一些超级原始又简单的问题,企图得到一些书上没有的东西。比如我会想原码和反码的设计,想古人如何计算面积,想原始人如何在没有数学的情况下平均分配战利品-除法,如果想到了比较巧的方法,我就会查阅资料证实我的想法原始人也想到了,从而间接说明我并不比原始人更笨。当然,这种思考是轻松的,然而你必须抛开所有你学到的东西,比如在理解均分战利品的时候,你不能想乘法口诀,也不能试图联系到解析几何,因为原始人根本就没有这些!
我如果生活在几万年前的石器时代,当我打猎完回到部落,我怎样为成员均分食物呢?我觉得绳子真的是一个创举,它实现了任意测量,而且质地柔软,可以随意曲直,正是这一点,它比棍子更伟大!然而我还需要两根棍子,为什么是两根呢?老酋长传下来的,反而“二”是一个很神奇的数字,现在想想,也是如此,亚当/夏娃,妻子/丈夫,公/母,天堂/地狱,善/恶,生/死,/恩格斯...
如果待分配的是一张圆饼(如果不是的话,也很容易用曹冲的方式等价下来,原始人其实比博士更聪明,因为博士不思考还是有吃有喝有人聘请,原始人不思考可能命都没了),分成N份,我的办法如下:
1.绳子绕饼一圈,截取周长。
2.绳子一端系在一根棍子上,另一根棍子并排放在旁边。
3.绳子绕过另一根棍子,再绕回来,如果分N份,就这样来回绕N次。
4.绳子的另一端不管还留下多长,都系在最后一次绕绳子后绕到的那根棍子上。
5.缓慢使得两根棍子远离,拉伸,直到绳子绷紧。
6.两根棍子之间的绷紧的绳子长度就是每一份的大小。

后来我翻阅了一些资料,发现北欧的原始人真的就是这么分东西的!原始人巧妙利用了重合全等的思想实现了平均分配。只是这种分配方式在稍微晚些的时候没有持续太久,因为有了祭司和占卜,你必须奉献牺牲,但奉献一整份显得神和人过于平等怕惹怒神灵,于是不得不采用更加有深度的分割方法。
值得一提的是,为何三等分角不可能,不是尺规的局限,而是希腊人的偏见!希腊人凭什么说直的和圆的是美的,恐怕只是他们的一厢情愿吧,这个和中国人认为方的和圆的是美的是一样的。两根棍子和一条绳子就不美吗?显然在希腊人严重这种弯弯曲曲的东西实在可恶,但是它们确实可以三等分角!

关于单位1-算法和数据

可以看到上面描述的除法中,并不存在总量的概念,也就是说,总量就是1,然后除法得到的结果就是均分量。是的,原始社会没有自然数的概念(更别提有理数,无理数了),然而数确实不是必须的,记住这一点很重要。原始的除法并不计总量,只是针对单位1操作,这样真的就够了吗?要想快速知道结果,把上面计算机程序的main函数改一下:
int main (int argc, char **argv)
{
        double data = (double)atof(argv[1]);
        int slots = atoi(argv[2]);
        printf("result is:%lf\n", calc(data, slots));
}
我将被除数改为可以自己定义的double类型了,除数依然是整型。然后运算的时候,输入:
test 9 3
得到了正确的结果 3.000000
甚至你可以输入小数:
test 2.1 3
得到了正确的结果 0.700000
可以证明,除数为小数的结果可以等价于将其扩大到整数时计算的结果!因此上述的原始除法可以计算任意的除式结果。也就是说,仅仅针对单位1的分割就够了,实际上,这种原始的计算方法可以推广到无理数运算。如果将单位1的依次分割制成一张表格,会发现这就是一张稀疏的除法表,之所以稀疏,是因为它仅仅表示了有限的自然数分割的结果。令人惊奇的是,竟然它是普适的!
可见,这种除法的本质是算法,而不是数据!这正是现代计算机的构建前提!现代计算机就是基于算法构建的,也就是说它内部实现了一系列的算法,即操作步骤,不管是什么数据,一旦进入操作流水线,最终都能得到正确的结果!这是一部全自动执行算法的机器,是人的奴隶,因为它对数据是无任何感知能力的。
然而,人脑却正好相反,它的本质是对数据的感知能力,而不是算法,事实上,人脑中没有任何的算法!人的神经系统靠的是对信号数据的感知和传导,进而引发某种动作的执行。神经互连成错综复杂的网络,结果由该网络上传递的数据决定,而不是网络本身决定。

计算机/算盘-人工智能

计算机和算盘的区别在于,计算机可以自动地执行整个算法本身,而算盘却只能执行算法的一个中间步骤,它只是加速了这种子运算,或者称微码运算而已。计算机的意义不在其速度快,而在于其自动化,因其自动化,它真正可以称得上一台自动的计算机器!之所以说自动,是因为它的操作步骤是内化的,即它的算法是内化的。如果形象点说,现代计算机内部都有一系列的加法器,乘法器之类的电路。
只有基于算法而不是基于数据的机器才能是自动的机器,这么看来,算盘实际上是基于数据的机器,它的计算结果以及计算步骤取决于它感知的数据,这种以数据为中心的机器或者设备(包括人脑本身)不会在内部固化任何的操作步骤,即不会内化任何的算法,算法本身和计算结果一样,根据输入数据临时生成,而 这个临时生成的过程则是我们熟知的创造
算法是精确化的,为了避免不确定性,计算机系统因此都会有所谓的“异常处理”机制,因为一旦出错,高度内化算法的计算机根本不知道如何去处理。因此计算机真的“笨到了连错误也犯不了”。即使再精致的计算机程序,它的运行结果也是形而上意义上的确定的,因为最终它们要落实到的是一堆具有确定行为的电路。虽然随机因素会影响计算结果,但是却影响不了计算过程本身!事实上,这个结论早在图灵时代就给出了...
不管怎样,我们现在所有的现实中的或者想象中的末来的计算机,不管其性能有多高,不管其有多么“智能”,其本质都是通用(U)图灵机!U图灵机就是计算机本身,而计算图灵机则是程序,U图灵机的运作依赖计算图灵机作为输入以及一个初始状态,所谓的输入也就是“那张无穷无尽的纸带”,正如停机问题一样,U图灵机无法输入自身,也就是说你必须从外部给它输入一部图灵机,用现代的语言就是,给它喂一个程序让它运行!如果有一天,U图灵机可以把自己喂给自己了,那它才算是完备的智能机器,否则智能永远存在于外部,也就是程序,而程序是人编写的,程序如果能编写自己了,智能就出现了,但是,你只能将一个图灵机输入给另一个图灵机,却永远不能输入给自身。类似《黑客帝国》里面的场景,如果使用图灵机模型,则永远不会出现。由于图灵机不能输入自身,所以智能一定存在于图灵机之外,我们看一下生物体。
生物本身并不是一个U图灵机,它从外部摄取的仅仅是能量,而能量在生物内部完成一件事:提供构成生物体的物质进而为信息的流动提供舞台,而构建生物体的算法是存在的,你可以理解为一个程序,一段代码或者说一部图灵机,那就是DNA!DNA不需要从外部获取!事实上,DNA和RNA便构成了一部通用图灵机,转运核糖核酸在DNA程序的指导下合成蛋白质构建生物体,然而仅此而已,图灵机的作用仅仅就是构建物理上的存在罢了, 智能是什么,智能是信息的流和交互,而不是一个物理存在!智能必须要构建于物理存在之上吗?其实未必。智能的本质构成就是信息,信息的流动体现在生命本身,信息的交互体现在进化和退化。
智能是如何突破IF-THEN-ELSE的呢?依靠环境!
有一天,一台电脑运行一个程序,将吸入的发、废料甚至仅仅是电能(物质和能量是等价的)转化为了基本物质,按照程序的指导先复制了程序本身,再运行它,那里存在基础物质,根据程序的指导,这些基础物质构建一个个的门电路...合成了电缆,这些合成过程全部都是IF-THEN-ELSE的,都可以靠图灵机解释,然后,一个小小的脉冲可以沿着电缆到达任意的地方,脉冲即信息本身,如果外部没有信息可以到达的环境,一切将终止于此,然而环境终究存在,智能来自于信息,来自于信息对环境的反馈,当信息到达一个不同的环境时,智能便出现了。正如水一样,根据容器的形状改变自身的形状,所有过程没有IF-THEN-ELSE,水和容器的交互,多么自然,上智若水!
聚集,抵触,相似相容,信息的反馈,怒放的智能...

查表,空间换时间

如果把常用的计算结果做成一张表,为何还要重复计算过程?!古人早就有了空间换时间的思想,很早就有人将比较复杂计算结果甚至比较复杂的计算过程做成了一句句的口诀或者一张张表格供随时查找,比如珠算口诀,乘法口诀,以及晚一些的对数表,三角函数表等。
我们的学校教育教的就是这些表格的使用方法。有多少人还会手工算开平方根?即使有被教过,教材上即使有,大多数也是选学的内容吧,就算不是选学的,考完试后也都忘了吧。由于教育,人们的大脑已经一定程度上(但不是全部)变成了自动计算的机器,已经完全基于固定算法而不再可能像以前那样很容易的临时生成算法了。人们固定的起床,看手机,上班,下班,吃饭,查表,哪里还能生成什么临时的算法,大部分的算法都是现成的。因此教育利用的就是人脑懒惰的本性!

持久化

逻辑即因果。所有的因果连成一张错综复杂的巨大网络,天生受制于时间和空间!此处的果即是彼处的因。只有持久化的因果才能突破时间和空间的限制。近期读了《信息简史》,深有感触。是文字早就了逻辑思维而不是相反!事实上,对于数据分析而言同样如此,否则你就很难进行事后分析,这个意义上,计算机和人脑是一致的,都无法突破自身的时间空间局限,这就是为什么同声传译那么值钱的原因!
持久化只是使分析和逻辑思维成了可能,但是却终结了游吟世代,比如荷马时代以及中国的诗经时代,在那个时代,所有的知识都是吟唱口传的,几乎不会留下任何记录。然而幸运的是计算还原了人类的历史,如今,互联网又一次将我们带回了那个浪漫的时代...

你能发明出弓箭吗

答案是,很难!几乎不可能,博士也无能为力!弓箭可能是真正意义上的第一件发明,至于陶罐,可能只是发现,因为雷火烧结的粘土可能会是第一个陶罐。弓箭也许也是由树枝弹射这种现象发展而来,真正的创举是通过弓弦,臂力转化为穿透力,削尖的箭头增大了接触时的压强。弓箭的发展促进了精细加工以及盔甲的发展,后者进一步引发了对牛,金属等财物的需求...原始人的发明是真正“没有站在巨人肩上”的发明,并且由于那时根本就没有文字记录,没有教育,没有力学,没有数表,没有公式,几乎什么都没有,如果把一群博士放生在北欧的森林,令他们世代繁衍于当地,与世隔绝,你可能会发现弓箭被发明的全过程,虽然这种可能性极低。

分裂的教育

现在,几乎所有的知识都没有必要非在学校里面才能学习到,相反,大多数的知识是学校里面学不到的,国外某些大学除外!因为大多数学校是就业为导向的,它教会你的就是一些执行算法的步骤而已。职业是高度专业化的,因此教育也成了高度专业化的,所以就有了你是搞数学的,他是搞建筑的,他女朋友是学医的,他女朋友的弟弟是修车的,我同事的姐夫是卖海鲜烧烤的,我是搞IT的,我外公是专业修铁路的,我姨夫是烧锅炉的。如今的学科已经和行会混杂,学科之间相互分裂,正如行会的排他性是一样的,人为的分类割断了彼此之间的关联。
当年戴克里先开了这个先例,没能挽救罗马帝国。今天,挑断主板上PCI卡的一根引脚,就能让精通程序设计的那帮人折腾不知几个通宵来修改和调试驱动程序!

你可能感兴趣的:(原始人的除法引发的闲聊)