用语言来表达算法会自然而然地运用到与数学有关的对象上 。其实,人类的一切活动中都有算法的身影,算法概念涉及到方方面面 。但我们要先解决一个关键问题:如何描述算法?
假设我们想从巴纽火车站到达位于卡尚镇的巴黎萨克雷高等师范学院 。几十个学生和教师每天早上都走同一条道路:首先沿着杜邦皇家大道走,接着是布里昂城堡大道 。在不知不觉中,他们可能就用到了算法——一种从火车站到校园的程序 。
谷歌地图提供了这个算法的图形形式:
文章插图
如果我们给一个大学生解释这个算法,用一个简明扼要的方式就能表达清楚,但如果要给一个小孩子解释,就需要更详尽的细节 。因此,讲解算法的方式是一个社会学问题,取决于谈话对象和谈话对象拥有的常识水平 。
同样,欧几里得算法也可以用文字形式表达:
计算 a 除以 b 的余数 r,
当 r 不为 0 时,
用 b 替代 a,
用 r 替代 b,
继续计算 a 除以 b 的余数 r,
当余数 r 为 0 时,b 即为所求 。
维基百科又提供了一种图形表达式:
文章插图
所以,一种算法可以有不同的语言表达形式 。然而,有一种表达形式不依赖于语言 。一名学生没睡醒就去了校园,走起路来晃晃荡荡,就像在梦游,他运行的这个随机算法没有任何语言表述 。还有一个例子能更好地说明这一令人困惑的现象 。蚂蚁寻找食物时,使用了非常复杂的算法,在空间里进行定向 。侦察蚁开始随机浏览蚁穴四周 。当其中一只蚂蚁发现食物的时候,便会在返回自己蚁群的一路上留下跟踪信息素 。受到跟踪信息素的指引,其他路过此区域的蚂蚁会沿着这条路径前行 。当蚂蚁带着食物返回蚁穴时,也会一路留下自己的跟踪信息素,以增强轨迹信息 。
文章插图
蚁群算法是一种用来在图中寻找优化路径的机率型算法
如果有两条路径都能到达同一个食物源,那么在同一时间内,沿最短路径行走的蚂蚁往返蚁穴与食物之间的次数将比沿着长路径走的蚂蚁更多 。于是,前者也会留下更多的跟踪信息素 。这时,最短路径的信息将会更强,也越来越具有吸引力 。跟踪信息素是有挥发性的,如此一来,被冷落的最长路径最终会消失 。
蚁群利用一个复杂的算法确定了最短路径 。早在蚁学家用语言记下这种现象之前,蚂蚁就很好地运用了这个进程 。
确切地说,人与蚂蚁之间的区别在于,我们会尝试用语言表达、存储、传输、理解和改进算法 。然而,我们有时也会用到不知该如何用语言表达的算法 。比如,我们很容易就能辨认出猫和狗,却难以解释是如何做到的:是计算腿和耳朵的数量呢?还是观察头的形状或毛发的纹理呢?
我们的大脑和身体会用很多算法来思考、运动、做事,但不管是符号算法,还是其他算法,我们并不总知道如何解释 。
指令序列之外从巴纽火车站到高等师范学院的算法可以表示成一个包含四个基本动作的逻辑序列:“取道东南方,向上朝着兰斯街的杜邦皇家大道”“然后……”“接着……”“再然后……” 。欧几里得算法表达式中也出现了一些基本指令,比如赋值:“用b 替代a” 。此外还有将这些指令封装成逻辑序列的句法结构,比如“这样做,然后那样做”,以及循环体,比如“当某条件为真时,重复此操作” 。我们还可以添加条件测试语句:“如果此条件为真,那么这样做 。”
这种方式听起来有点不寻常 。事实上,只要很少的句法结构,就足以表达所有的符号算法,例如上述四个句法结构:赋值、逻辑序列、循环体、条件测试语句 。算法的宝贵之处并不在于其组成有多么复杂,而恰恰在于这种将几个简单成分封装在一起的方式 。
这就好比化学分子:数十亿个化学分子组成了我们所熟知的几十种化学元素;而这些化学元素本身仅由三种基本粒子——质子、中子和电子组成 。
然而,尽管构建算法的基本元素在理论上非常充足,人们却很少从头开始构建算法:算法往往由其他一些已知的算法构成 。例如,我们用算法描述了从巴纽地铁快线站到高等师范学院的路线 。如果我们现在想从卢森堡公园到达校园的话,那么一个简单的算法就是:先乘坐地铁快线从卢森堡站到巴纽站,然后再运用先前的算法——这个算法被看成是一个整体 。此时,一个全新的算法就这样形成了 。我们并不清楚先前算法的细节,而是把它视为一个新的基本指令 。
- 牛顿运动三大定律背后那些传说和伟大人物|伟大的数学公式巡礼
- 计算进化史:改变数学的命运|古老的起源
- 跨越三个半世纪的智力探险:费马大定理
- 「不可能的数字:复数」-图解数学
- 你不知道的祖冲之-科学史沙龙
- 自然常数 e 的故事
- 灵签占卜:四个阳台选一个,测你50岁之后的福气有多少!
- 熬到明天,祥云天上绕,财运大发,苦日子不见的3大属相
- 灵签占卜:睡午觉,哪一个地方最合适?测你的苦日子啥时候到头
- 灵签占卜:选一条你最爱的裙子,测你“哪个优点”最吸引异性?