《尘世之外》

第二卷-大学时代 · 第 041 章

第四十一章 数据结构

老师在黑板上画二叉树。粉笔从最上面的圆圈开始,往左下画一条斜线,往右下画一条斜线。左线的尽头画一个圆圈,右线的尽头也画一个圆圈。粉笔在黑板上走的时候吱吱地响,像指甲划过硬纸板。他的手腕每转一个弯就抖一下,抖的时候粉笔灰弹出来落在深蓝色的羽绒服袖口上。画完了,他在最上面的圆圈里写了一个字——根。

"根节点。左子树。右子树。"粉笔点在三个圆圈上,每点一下黑板弹一小片白灰。"二叉树的每个节点最多有两个子节点,不多不少。往左走到底是一片叶子,往右走到底又是一个叶子。前序遍历先看根,中序遍历先看左,后序遍历最后才看根。三种走法走同一棵树,看到的顺序不一样。"

我坐在第四排靠窗。窗外的白杨树叶子全掉了光——十一月的哈工大校园,树干灰白色像一行行竖在路边的铁管,枝丫从主干分出去,往左一根往右一根,和黑板上那棵二叉树一个骨架。阳光照进来把桌面切成一格一格的光块,光块的边缘锐利得像裁纸刀。笔记本翻开在数据结构那一页——上个月的图已经画满了,链表的箭头、栈的方块、队列的长条,页边空白处写着一行字:管网就是一棵树。

那个理解是对的。但不够。

老师接着在黑板上写了三种遍历的结果。前序:1-2-3-4-5。中序:2-1-4-3-5。后序:2-4-3-1-5。三行数字像三条路,起点是同一棵树,终点是不同的出口。我盯着黑板上的二叉树看——根在上面,枝往下分,叶子在最底下。顺着任何一条枝走出去,只有一条路。从根到任何一片叶子,路线唯一。

城市管网不是这样的。

我在笔记本上翻到上个月画的那张管网示意图。哈尔滨的给水管网——水源出来之后分出两条干管,沿东西走向横穿城区。两条干管之间有六条联通管把它们接在一起。联通管的意思是:水从左边走不通,可以从右边绕过来。左边断了,右边还在。有回路,有选择,有冗余。

树的分支走到尽头就停了,没有回路。树断了一条枝,那一片叶子就断了,再也到不了。图断了一条边,还能从另一条边绕过去,照样到达终点。

树没有回路。图有回路。

上个月我把管网理解成树——水源是根,干管是树干,支管是树枝。那只对了一半。没有联通管的管网是树。加了联通管之后,管网不是树了——是图。

我拿橡皮把上个月画的树状管网图擦了。橡皮在纸上刮过的时候留下一层灰,灰被指腹抹开,半页纸像下了一场小雪,字迹和线条的残影在灰底下若隐若现。我在擦干净的地方重新画了一张图——不是树,是图。水源是顶点,管段是边,流量是权重,联通管是回路。然后在图论示意图旁边画了一张管网平面图。两幅图的骨架重合了:顶点对节点,边对管段,权重对流量。我用蓝色圆珠笔在两幅图之间画了一个大圈,圈里写了一个字:图。


程序从两百行变成了三百七十行。

原来只有树状遍历——从水源出发沿干管到支管到用户,一级一级往下走,每一条路只有一个方向。加了联通管之后,树变成了图。到达每个分叉口要选择:走左边还是走右边?两条路通向同一个终点,但阻力不一样。

深度优先搜索。从水源出发,走一条路尽量走到底。走不动了——遇到死胡同或者走过了的节点——退回来换一条路。退回来的时候在走过的路上标上记号,不走回头路。然后把达西公式加在每条边上算水头损失,每条边走一遍就多一个loss值。搜索结束之后比较所有路径的总loss,最小的那条就是最优路径。

程序跑出来的结果排成一个表:每条管段的流量、流速、水头损失排成行,最下面一行是总水头损失——0.41兆帕。比上个月手算的0.47低了0.06。联通管加进去之后,水走了一条更短的路。

屏幕上的数字排出来的时候,日光灯的嗡嗡声在寝室里显得更安静了——不是灯更响了,是人停下来的时候才听得到那声音一直在。

王强站在我身后看了一眼。他刚修完阿杰的台灯——灯座里的线松了,用螺丝刀拧紧接线柱的螺丝,线就不闪了。手指上还有铁锈渍,在屏幕的蓝光下发暗。

"你这是画水管还是画树?"

"都是。"

他又看了两秒。指甲在裤缝上刮了一下。

"管网不是树,是图。"我说。"树只有一条路,图有回路。回路就是备选方案。"

他停了两秒。"修车也是。发动机皮带断了一条还有备用一条。不停机。"

他回上铺了。翻身的时候弹簧咯吱响了一声,像暖气管里水拐弯的声音。


赵启明的信来了。信封比上学期的薄——上次两面写满写了两张,这次一张半。他写字的力气比上学期大,笔画压得深,纸背有印子,像刻上去的。

"之宇:最近听了一个词——有效市场假说。简单说就是:市场价格已经反映了所有公开信息。你看到一条消息的时候,已经有几千个比你快的人看过了并且行动了。市场像一个管网——信息是水,价格是龙头。龙头流出来的不是水,是整条管网的形状压出来的结果。

"你的管网程序算管道的最优路径——市场也在不断给价格找位置。你选管径、流速、压力系数,市场里有人选买价,有人选卖价。参数不同,但都在比较、筛选、成交。

"上海比我想象的快。食堂排队三分钟,课堂占座提前两小时,走路比别处快半步。买了围巾没用——围巾还没围好人已经走到图书馆了。"

信纸空白处他画了一条横线,线上标了"价格",线下画了几个箭头。箭头从各处汇聚到横线上,像管网里支管的水汇入干管。箭头旁边写了三个字:"信息流。"

我在笔记本上写了三行字:

管网=图。
市场=图。
流动=流动。

写完看了一遍。笔尖停在"流动"两字上。三行字,三组概念。管网里的水从高压流向低压,市场里的资金从信息多的地方流向信息少的地方。管道有直径有压力,市场有成交量有波动率。方向不同,但都需要先看清节点。

合上笔记本。封面上名字旁边多了一道划痕,是蓝色钢笔在口袋里蹭的。赵启明送的那支。刻的"方向对了"四个字被手指摸得发亮,刻痕的棱角圆了。

窗外十一月的太阳很低。光斜着照进来,在笔记本封面上拉出一条长影。影的边缘摸上去是凉的——笔记本靠近窗户那面冷得像贴了一片铁板。远处暖气管咕噜咕噜响了一声,是水在管子里拐弯的声音。水拐弯的时候也有选择——阻力小的弯多走,阻力大的弯少走。管网不像树。管网像图。图里的路不止一条。

方向对了。但路径不止一条。