每当你打开谷歌地图,寻找去某地的路线,你都会用到一点点数学。你打开应用软件,输入目的地,短短几秒钟内,就会自动出现几条可选路线。谷歌之所以能实现这一点,完全是靠对数学的巧妙应用。
想象一下,谷歌疯狂到请了一堆擅长读地图的人来帮你规划路线。每当你搜索路线的时候,这些人就会出来干活儿。这样做不但花费的时间很长,而且很没有效率。谷歌的“读图工”不得不为我这样的人反复规划同样的路线,因为我总是记不住从自己家到朋友家要花多长时间。更好的办法是,他们应该提前规划好所有可能的路线,以防某天可能有人需要它们。
但这又能好到哪儿去呢?另一个人需要的路线恰好和你之所需完全相同的概率并没有那么大,比如说,你住在一栋学生公寓里,正在寻找去大学的最佳路线。而我的邻居肯定不会去拜访我的朋友或者出版商;我之所以在软件上搜索我朋友或出版商的地址,是想再次确认自己能按时赶到。除非谷歌能预测我要去哪儿,否则它总是需要“读图工”来规划新的路线。还有,我们还是承认吧,无论他们有多擅长读图,这都需要花费大量时间。
这就是我们会把读地图的任务交给数学的原因。计算机帮你选出最佳路线,但它采取的方式不同于人工。计算机使用的数学不会识别卫星照片上的街道,也无法根据地图的比例尺计算距离。导航系统眼里的世界是一大堆用线条连接起来的小圆圈。虽然这听起来可能有点奇怪,但只要你见过地铁线路图,那你应该对此很熟悉。
对谷歌地图来说,如果你只需要乘坐地铁出行,那就很理想了,因为地铁线路图的设计本身就能适配它所使用的数学。计算机可以假装自己正沿着连接圆圈的线条前进,就像一列虚拟的地铁。对计算机来说,唯一的问题是,它看不到整体的路网。如下图所示,如果你想规划一条从A站到B站的路线,你很快就能找到答案。①线和②线有一个交集点C站,就在B站前面。所以最快最好的路线是顺着①线先坐到C站,然后换②线,再坐一站就到了B站。
地铁线路示意简图
从另一个方面来说,计算机必须通过更复杂的程序才能找到最短路线。它不知道A站和B站的相对位置,所以它的虚拟列车只能随机前进,直至最后抵达正确的目的地。此外,计算机需要知道列车从一个小圆圈开往另一个小圆圈需要花费多少时间。正如我们大家都知道的,地铁线路图上的距离并不代表站与站之间的真实距离,它只起到一种示意作用,经常会出现地铁线路图上从甲站到乙站比到丙站的距离看着更远,但其实花费时间却更少的情况。
这个问题的解决方案是,在路网内连接站点的每根线条旁边设置一个数字,标明列车行驶这段路程需要多久。然后计算机就能利用这些数字来寻找最佳路线。最简单的导航系统会检视从A站出发的所有不同路线,从最短的可能路线开始,然后是第二短的,以此类推。
所以在这个例子里,计算机从A站出发,寻找最近的站点。D站和E站都只需要1分钟就能到达,所以这两个站都可以作为第一个选项。接下来,计算机是会从E站出发前往F站,还是从D站去G站?都不是,它会做出次一级的尝试,朝H站的方向前进,因为这段路程比去F站和G站都短。接下来它会检验距离A站3分钟车程的I站。只有在检查了所有这些选项后,计算机才会继续前往从A站到B站方向的第二个站点。
以这种方式,计算机需要花好一阵子功夫才能走过7个站、历时22分钟的车程最终抵达B站。走到终点之前,它已经去过了地图正下方只有19分钟车程的J站,和正上方的K站,这个站的车程更短,只要17分钟。但它最后还是抵达目的地,而且只要找到了B站,计算机就能确保它算出的第一条路线就是最短的。这一切听起来很没有效率,人类的方向感和把握全局的能力似乎能让事情简单许多。但计算机还是比我们快,原因很简单:它每秒能计算的次数比我们多得多。
谷歌地图的工作方式大体也是这样。地图上的那些小圆圈不是地铁站,而是路口,例如环岛或者快车道交口。对数学来说,一条线代表的是快车道还是小巷子,它们的意义不一样。和地铁线路图一样,所有区别最终都会落实到反馈给你的行程时间上,这个时间就是基于谷歌地图标在每条线旁边的数字算出来的。一条快车道和一条小巷的长度可能一样,但你在小巷里开得肯定慢得多,所以在系统里,小巷旁边标的数字要比快车道旁标的大得多。这些数字还能帮助我们在考虑交通堵塞的情况下调整行程时间。如果预期会堵车10分钟,谷歌只需要调整堵塞路段旁边标记的时间,比如从10分钟调整到20分钟。然后,如果你重新计算路线,这段延迟会被自动纳入新的旅途时间。你可能会被重新指引到支线道路上以避开堵车,或许你现在走的路线比原来更长,但畅通无阻。
路途若近,这种数学方法则十分有效,但要是你想去更远的地方,它便不再适用了。如果你想从纽约驱车前往芝加哥,谷歌地图首先会把从纽约出发、车程小于12个小时(这段旅程花费的时间)的所有路线跑一遍。计算机能以极快的速度计算,但即便是现代计算机,也无法在短时间内完成这么多计算。所以,谷歌地图会使用许多数学技巧来减少计算量。我们不知道这些技巧到底是什么,谷歌也没有公开自己的方法,但我们会在第七章中更详细地探讨这件事。
正如我们已经看到的,导航系统推荐的路线是通过数学筛选出来的。但这种数学不一定比我们聪明。计算机不顾一切地寻找最终目的地,这个过程往往很没有效率。数学没有让问题变得更简单,因为到头来,计算机必须完成比我们更多的工作,但计算机的确让我们的生活变得更简单了,它能更快找出最佳路线,因为它每秒能完成的计算量大得惊人。