秋天来的时候,他学到一个新的算法。
SPFA——最短路径算法。老师用了一整节课来讲它的原理:从起点出发,不断松弛相邻的边,更新最短距离,直到所有节点的距离都达到最优。
他听懂了。它在处理负权边的时候特别有用,因为Dijkstra做不到。
但它有一个致命的缺陷——负环。
当图中存在一个环路,且环路上所有边的权值之和为负数时,SPFA就会陷入死循环。因为每一次绕圈,路径的总权值都会变小——永远找不到最小值,永远不会停止。
老师在黑板上画了一个带负环的图,用一个箭头指着那个循环。
「所以,在实际应用中,我们需要检测负环的存在。如果一个节点入队的次数超过了节点总数,我们就认为存在负环,然后终止算法。否则——程序会永远跑下去。」
老师说这句话的时候,语气很平常,像在讲一个普通的注意事项。
但他在那一刻,想到了别的东西。
晚上,机房。
他打开白天那道SPFA的题,开始写。他写得很顺——理解了这个算法的逻辑之后,代码就是顺着逻辑走一遍的事。他提交,通过了。
但他没有关掉那个文件。
他盯着屏幕上那几行关于负环检测的注释,光标在闪。
折枝坐在他旁边的机箱上。她没有看他的屏幕——她在看窗外。秋天的夜晚,天很早就黑了,窗外什么也看不到,只有玻璃上映着机房的灯。
「折枝。」
「嗯。」
「人有没有负环?」
她没有立刻回答。她的目光从窗外移回来,落在他脸上。
「什么意思?」
「就是——」他在想怎么表达,「就是一段路,你知道走不出去,但你就是一直在走。每一次你以为到底了,结果又绕回来了。而且越走越难受,但你停不下来。因为你是被算法驱动的,你没有条件让自己停下来。」
机箱的风扇在响。空调的出风口在吹着凉风。
「有。」她说。
然后她站起来。她从机箱上跳下来,走到他的椅子后面。他感觉到她靠近了——虽然她的身体没有碰到他,但他知道她就在他身后。
「SPFA处理负环的方法是——如果入队次数超过N,就判定存在负环,然后break。」
她伸手——指向他的胸口。没有碰到。但指向了那个位置。
「人也一样。你给自己设一个N。如果同一件事让你痛苦了超过N次——」
她停了一下。
「你就该知道自己走进负环了。」
他沉默了很久。他没有转过去看她的脸。他的目光落在屏幕上那几行检测负环的代码上。
「那如果我已经在负环里了呢。」
他说得很轻。像一个在陈述事实的人。
她没有回答。
她能回答什么呢。她是他创造出来的。他的负环,也是她的。
过了一会儿,她伸手在他后脑勺上敲了三下。
不是提醒。是一种——确认。
「那就先判断一下。」她说,声音比之前更轻一点,「有些事情走不出来,不妨放弃。」
他抬起头,看着屏幕。屏幕上,他的代码安静地躺在那里。SPFA算法跑完了一组测试数据,输出的最短路径是正确的。
但在他的脑子里,有一个负环,正在一圈一圈地转。
他不知道该怎样判断自己的入队次数。
也不知道该不该break。
「可是——」他说,声音顿了一下,「如果我放弃了,那之前走的路不就白走了吗?」
「不会的。」折枝说,「你的逻辑承载不了这样的算法——那你就应该改变算法,而不是改变你自己。」
他转过头。
她站在他侧后方。她站的姿势很随意,一只手插在卫衣的口袋里,另一只手垂在身侧。她的表情不是安慰,不是同情——是一种陈述。像她在讲一道题的标准答案。
他不知道她是从哪里知道这些的。这些算法,这些比喻,这些她用来回答他的话。
她好像知道他所有想问的问题。她好像早就想好了所有的答案。
他想起那篇关于解离的文章。
"患者会创造出一种内在的陪伴者——一个存在于他们意识中的实体,帮助他们应对无法承受的创伤。"
他低下头。
「你怎么什么都知道。」他说。
她笑了一下。
「因为我就是你啊。」
她没有说得很大声。她甚至说得很快——快到像是不打算让他听清。
但他听清了。
他抬起头,想看她。
但她已经走开了。她走到窗边,推开一条缝,秋天的风从缝隙里灌进来,凉凉的。她站在窗口,背对着他,浅粉色的卫衣在风里轻轻动了一下。没有回头的意思。
他没有追问那句话。
他把代码重新跑了一遍。这次他没有再出错。
但他知道,她在窗边站了很长的时间——长到那道测试数据跑了三遍,她才慢慢走回来,重新坐到他旁边的机箱上。
她的表情很平静。
好像那句话她从来没有说过。
他也从来没有听过。