《尘世之外》

第三卷-职场沉浮 · 第 068 章

第六十八章 地图

十五楼的窗。北京从这扇窗看出去是一个方格——东西向的路横着,南北向的路竖着,横竖交叉成格子。格子有大有小,二环内的格子密,五环外的格子松。从高处看,它像一张网。节点是路口,线是路。

路上的车在动。从十五楼看,车很小,白的黑的红的灰的,密集的地方堵在一起不动,稀疏的地方一辆接一辆顺畅地走。二环堵得最厉害,路老,车道少,车多。

七月。北京的七月热——不是哈尔滨那种干热,是闷热,空气像湿毛巾捂在脸上,喘气的时候嘴里是潮的。玻璃幕墙隔了外面的热,空调吹出来的风是干的,冻胳膊。太阳晒在玻璃上,玻璃发烫——手放在窗台上能感觉到温度。窗台是金属的,金属的导热比混凝土快——和铸铁管的导热比PVC管快一样。材质决定温度的传递速度。

Dijkstra的代码写到第三版了。

第一版照搬了管网优化的框架——邻接表存图,优先队列找最短路径,时间复杂度O((V+E)logV)。V是节点数,E是边数。北京路网六万多个节点,十几万条边,在这个规模上跑一遍要几秒。几秒不行。用户在开车,车在动,路线必须几百毫秒内算出来。

第二版加了双向搜索——从起点和终点同时往中间搜,两头碰上了就是最短路径。时间砍了一半。这个思路我并不陌生,只是以前用在另一套图上。

第三版加了预处理——把北京路网按区域切成子图,子图之间用边界节点连接。查询的时候先定位起终点在哪个子图,子图内部用Dijkstra,子图之间用预计算的距离矩阵。大图切成小图,查询终于快下来。

时间从几秒降到了四百毫秒。

四百毫秒。比设计院算一组水压快了四千多倍。但也不是一个量级——设计院算的是静态水压,算一次管一辈子;百度算的是实时路线,每秒要算几百次。静态和动态的区别不是速度——是频率。管子埋了不动,路每天都在变——修路、封路、事故、高峰期。频率高了一切都不同——算法要快,数据要新,系统要稳。


提交代码。代码审查过了。上线。

服务器日志开始刷——每一行是一个查询:用户ID、起点坐标、终点坐标、计算耗时。几百毫秒一个查询,一秒几百个查询。黑底绿字一行一行往上翻,速度快得让人眼睛有点跟不上。

下午三点。路线规划的平均耗时从七百毫秒降到了四百毫秒。降了百分之四十。

刘洋站在我后面看了一会儿。"不错。"

就两个字。不错。在百度,"不错"是最高评价——不是"很好",不是"优秀",不是"牛逼"。"不错"的意思是:行了,能用,不用改了。就像在设计院,老方说"没问题"——意思是你算的对了,可以签审核了。两套评价体系,一样简洁。


晚上九点。办公室里还剩十几个人——屏幕的荧光把脸照得发青。外卖盒子堆在垃圾桶旁边,溢出来了,一个白色塑料袋挂在桶边上,袋子里装着骨头和纸巾。空调嗡嗡响,比设计院的日光灯声音大——日光灯是电流通过气体发光的声音,空调是压缩机压缩制冷剂的声音。两种嗡嗡,两种频率。

站起来。走到窗边。窗台还是烫的——七月的北京,太阳落山了但热量还在玻璃上。

北京的夜从十五楼看——灯。路是线,灯是点。路灯照着路面,路面是灰色的带,带上有车灯在动。白的是大灯,红的是尾灯,近处刺眼,远处只剩一点暗红。

管网和路网。

闭上眼。脑子里浮现的是CAD上的管网图——蓝色的线条、黑色的标注、节点J-1到J-12。每根线的粗细代表管径,每个节点旁边的数字代表水压。我画了两年这样的图——画的时候眼睛盯着屏幕,鼠标咔咔响,线条一段一段从节点连到节点。

睁开眼——北京的路网。线条换成了路,标注换成了路口名,节点J-1换成了"中关村南大街与知春路交叉口"。从高处看,形状确实很熟:中心,环路,连接线。只是这一次,线上的不是水,是车。

家是起点,公司是终点。红绿灯调控,路口分流,路宽决定车流量。


电话响了。赵启明。

"你在百度做什么?"

"路线优化。"

"和你的管网优化一样?"

"一样。都是图。都是找最短路径。"

他在那头笑了一声。笑声从上海传过来——两千公里,和从上海到哈尔滨的距离差不多,但信号比当年好,没有电流声了。大三那年他用信纸写过"输入不同,算法一样"——八个字,蓝墨水,写在横格纸上。现在他不再把话说得那么满,只说有些方向可以互相照一下。

"我们两个——一个在管子里找水,一个在K线里找钱。方向其实一样。"

"你怎么找?"

"找不对称。"他的语速比大学时候慢了一点——不是思维慢了,是更稳了。稳是什么——是每个字后面跟着三个字的余量,说出来的是一个字,没说出来的是三个。"市场就是一个巨大的信息不对称系统。有人知道的多,有人知道的少。我的工作就是找到不对称的地方,然后下注。"

"不对称。"

"对。你知道得多,别人知道得少,中间就有价差。我做的就是把这种差变成钱。"

听筒里安静了两秒。他的呼吸声很轻。背景里有键盘声——他在边打电话边看什么。和刘洋一样——做金融的人和做技术的人有一个共同点:同时做两件事。

"你呢?你在百度找到了什么?"

"路网和管网有些地方很像。"

"很像。"他重复了一遍。两个字的间隔拉得很长,像在嚼这个词。

"你什么时候来北京?"我问。

"不一定。上海挺好的。"

"北京大。"

他笑了一声。"王强说的?"

"嗯。"

"王强说得对。北京大。但大不是最重要的。方向对了,大城市小城市都一样。"

挂了电话。窗外的北京还在亮——路灯、车灯、写字楼的灯。几十万个光源,像几十万个节点,每两个之间有边——路、线、管道、光缆。光在管道里走。信号在管道里走。水在管道里走。车在管道里走。四种流,四种管道。

从设计院的九张桌子到百度的开放式工位——换了地方,换了题目,没换算法。

坐回工位。打开笔记本。翻到"管网→算法→?"那页。蓝色钢笔在问号后面写了一行:

管网→算法→路网

然后画了一条竖线,竖线右边又写了一个箭头:

路网→?

新的问号。旧的问号填上了,新的冒出来。一个接一个,永远有下一个。终点也不一定是终点,它可能只是另一段路的起点。

笔放回口袋。继续看日志。四百毫秒。路线规划在跑。北京在窗外流动。灯在亮。车在走。灰色的路面上,无数红白光点往前挪。