搜读云

繁体版 简体版
搜读云 > 穿针:一部挂谷猜想的64重奏 > 第21章 第21章 噬嗑•咬合 数学与代码的啮合

第21章 第21章 噬嗑•咬合 数学与代码的啮合

章节错误,点此举报(免注册),举报后维护人员会在两分钟内校正章节内容,请耐心等待,并刷新页面。

回到剑桥市的第三天,悦儿收到了墨子的一封长邮件。邮件的主题只有两个字母:"Viz"。正文没有多余的话,直接贴了一段描述和一个附件。描述写的是:"我在想能不能把挂谷猜想的证明过程变成一个可以交互的模型。不是静态的图解,是动态的、可以缩放和旋转的。每一个引理对应一个视觉层级,用户从顶层往下钻,钻到管道几何的细节层。你愿意一起做吗?"

悦儿在书桌前读完了那封邮件。她喝了口茶,然后打开附件。附件里是一份草图,大概七八页的粗糙原型设计——用简笔画的界面布局、滑动条的位置、视角切换的示意箭头。墨子的草图风格跟他写代码的注释一样干净而直接:没有多余的装饰,每一个元素都有明确的标注,相邻元素之间的逻辑关系被箭头和短句写清楚了。她看着那份草图,注意到他在每一页的边缘都留下了空白的边栏,像是留给她填注释的位置。

她回复了三个字:"怎么做?"

墨子在两小时后发来第二条消息:"先做管道层。把你的多尺度归纳拆成'尺度'这个独立变量。每一层尺度对应一组管道。然后用户在界面上拨动尺度滑动条,从最粗的尺度一路缩到最细的尺度。中间所有的过渡是连续的。"

悦儿看着那行字,在脑子里想象他描述的那个画面。从宏观到微观。管道在每一个尺度上呈现出不同的密度、不同的重叠指数、不同的交叉模式。她用笔在草稿纸上画了一条线,从左到右标了"宏观"到"微观",然后在线的中间位置画了几个小圆圈,代表几个关键尺度。那些圆圈的大小不等,间距不等,但连接它们的线是连续的。

她拍了那张草稿的照片发给墨子。附了一句:"线是连续的,但中间的关键节点需要可标记。"

墨子回了一张截图——他在她的草图基础上用代码生成了一条带节点标记的连续曲线,每一个节点都对应一个可交互的按钮。节点之间的过渡是渐变式的,颜色从浅蓝渐变到深蓝再渐变到浅绿。悦儿看着那张截图,把两个显示器并排放好,一个显示墨子的代码界面,一个显示她自己的数学文档。她第一次感觉到这两个屏幕之间有一种可以被翻译的语法。

第一次碰头是在悦儿的公寓里。墨子带了两台笔记本电脑,他用自己的电脑开了三个窗口——代码编辑器、模型预览界面、版本控制终端。悦儿用她的电脑打开了一篇她新写的文档,里面列出了三维挂谷猜想证明的核心结构,按照层级分类:地基层(粘性情形)、中间层(阿苏阿德维数)、顶层(归约框架)。她把这三个层级画成了一个纵向的结构图,每一条引理都标注了编号和依赖关系。

"你的数学是线性的,"墨子看着那个结构图,手指在触摸板上滑动,把纵向的图旋转了九十度变成了横向的,"一行接一行。引理1依赖定义1,引理2依赖引理1,定理1依赖引理1到引理13。整篇论文是一条链。"

"对。"悦儿说。

"但在视觉里,不能一条链一条链地放。用户看到链的时候,记不住前面的节点。"墨子把横向图又旋转了一下,变成了一种放射状的结构——中心是最终结论"三维挂谷猜想得证",向外辐射出三个大圈,大圈里面又分成若干个小圈,每一个小圈对应一个引理。"你需要一种结构,能让用户从任何一个点进入,然后从内部向外走,或者从外部向里走。不能只有一种方向。"

悦儿看着那个放射状结构,沉默了一会儿。"你的意思是——同一组信息,需要多种入口。"

"对。数学论文只有一个入口:第一页第一行。但可视化需要有无数个入口。用户从任意一个引理点进去,向前走能看到它证明了什么,向后走能看到它依赖什么,向上走能看到它在整个证明里扮演什么角色。"

悦儿把那个放射状结构截图保存了下来。她重新打开自己的文档,把原本纵向排列的结构图改成了横向排列。每一层的引理被她重新编号,按照"依赖深度"分了五组。她写完之后把新的结构图发给了墨子。

墨子花了大概四十分钟把那张新的结构图翻译成了代码里的数据结构。他用一个嵌套的字典来存储每一层引理的信息,键是引理编号,值是依赖列表和被依赖列表。悦儿坐在他旁边,看着他敲代码的时候手指在键盘上移动的速度比她写字快得多。有些行她需要读两遍才看得懂,他只是敲过去,每敲完一段就缩进、分行、加注释。

"你写代码的时候在想什么?"悦儿问。

墨子的手指没有停。"在想怎么把你说的话翻译成机器能读的结构。"

"数学论文也是结构。但它是一种用来被人类读的结构。"

"对。"墨子的手指在回车键上敲了一下,新起了一行,"代码是另一种结构。机器读它的时候不关心美不美。它只关心行不行得通。"

悦儿看着屏幕上那些被缩进和括号组织起来的代码行。那些行跟她在纸上写的公式排布方式完全不同。公式是横向铺开的,从左到右,像河流在平原上流动。代码是纵向叠放的,一层嵌一层,像一座被挖开的地层剖面图。但它描述的东西跟她的公式描述的是同一个东西——依赖关系、层级结构、从宏观到微观的连续过渡。

"行得通吗?"她问。

墨子停下手指,转过屏幕给她看预览界面的第一次渲染。画面上出现了一个浅灰色的三维空间,空间里悬浮着几十根细长的彩色管道。管道从画面中心向外延展,像一朵被冻结在绽放过程中的金属花。颜色从中心的深红色渐变到边缘的浅蓝色,对应于从低尺度到高尺度的重叠指数。

悦儿凑近屏幕看了看。"方向数少了。"

"这是一个测试样本。实际数据集有几千根管道。渲染引擎要优化才能同时显示几千根还不卡顿。"

"那先测试一千根。"

墨子把代码里的数组长度从"50"改成了"1000",然后重新运行。画面卡了大约两秒,然后管道网络重新出现——比刚才密了二十倍,所有的管道交错、穿插、重叠,像一团被压缩过的彩色纤维在三维空间中展开。悦儿伸手用鼠标旋转视角,那团纤维在她的操控下缓慢转动,从各个角度展示着它的内部结构。

"你看到了什么?"墨子问。

悦儿把视角停在一个特定的角度上。在那个角度下,管道网络中出现了一条极细的空隙带——一根细线般的透明区域在所有管道的交错中贯穿了整个结构。"这个位置,"她用手指指屏幕,"在三维的证明里,这是我花了最长的时间去处理的那个坏管逃逸路径。它在视觉上是一条通道。"

墨子在那个位置加了一个标记点。标记点的颜色是金色的,在深红和浅蓝的底色中极为醒目。"好。那我把它单独摘出来,让用户可以点击这个标记点直接跳转到对应的引理。"

『加入书签,方便阅读』