缘起
我第一次接触到“算法”这个词,大概要追溯到高中时代的数学必修三。那本课本虽然以概率统计为主纲,却又穿插了一章名为“算法初步”的章节。彼时我从未写过程序,更不知算法为何物,自然对这新鲜事物充满了好奇。
等着盼着,数学课的进度也终于来到了这一章。框图,语句,伪代码……这些在数学的体系里从未见过的名词,为我带来了无限的渴望和向往。仍记得当时最常出现的考题是给定框图,求解若干步之后变量的值。虽然对于如今从事计算机行业的我来说,这已经是如同1+1=2般无需思索的事情了,但这些逻辑带来的美感,着实令当时的我不胜赞叹。
在那沉浸于题海而难以脱身的日子里,算法意味着几行简单的,却又令人心驰神往的逻辑碎片,它们如锁链般连结在一起,勾勒出我心中计算机科学的最初模样。
确定与不确定
我本科的专业是通信工程,一个融合了计算机与数学之精粹,并将之应用在信息传输与编码方面的学科。为了提升信息系统的效能,计算机科学中的数据结构与信息论中的编码理论自是必不可少。
在数据结构中,算法被用来解决各种难以在短时间内用暴力穷举实现的疑难杂症:初等的冒泡排序,进阶的最短路,高阶的旅行商问题,等等。随着学习和认知的不断深入,算法仿佛与规划,搜索这样的关键词牢牢绑定在了一起——仿佛它正是为离散数学而生的一样。
而另一方面,编码领域又存在着许多被称为“算法”的编码方法,如本科阶段反复使用的Huffman编码,以及常用的算术编码,游程编码,LDPC码,Turbo码等等。这些算法以减小信息熵或抗干扰为目的,性能依赖于概率分布,而并不像时间复杂度,空间复杂度那般仅与数据规模呈线性或非线性关系。在确定与不确定之间,算法仍旧以它通用的定义而广泛存在着。
浪潮之巅
读研以后,我回到了心心念念的计算机行业,不过所处的环境却有所不同:借着“人工智能”与“机器学习”的名号,以深度学习为核心的“算法热”席卷了整个行业。直到今天,仍有从业者将“算法”一词与深度学习方法直接划上等号,各行各业开始感受到深度学习带来的改变,也纷纷开始招揽“算法”人才。
但算法的定义,其实正如数据结构书中所述:算法是解决特定问题求解步骤的描述,在计算机中表现为有限的操作序列。也就是说,算法一词的本意即为处理问题的方式方法。不管你在意或是不在意,算法总在我们身边发挥着各式各样的作用。
如今对“算法”的重视,正是我们过去对“算法”意识的缺失带来的反弹——在信息爆炸,万物互联的今天,我们终于希望机器在各行各业能够发挥替代人力的效果。不管这种希望最后通向的是所谓“人工智能”还是其他,我们对实际上的算法的期待正在一步步萌芽。
算法之外
而纵观算法的发展史,可以很快地发现算法和其他环境条件的相互作用:没有并行专用计算的进步,今天的深度学习仍然只是泡影;没有足够的数据支撑,大规模的信息检索仍然需要对现实世界进行更充分的探索,方能得出有用的规律。如果要让算法走得更远,或许在埋头专攻算法本身之余,还要多留心算法之外的风景。
唯物辩证法是这样告诉我们的:“相互作用是事物运动、发展的真正的终极原因,因为它使事物的原有性质和状态发生改变。离开相互作用就无法理解运动。”