微程序搜索器(MPS)。
听着像上个世纪的产物,但对江临来说,这就是个愿意把所有蠢办法都撞一遍,而且永远不会嫌烦的赛博苦工。
在量化这头,它现在已经能帮江临干不少脏活了。
帮他揪出那些藏在系统里,单次不起眼但每天被循环几千万次的热路径。
它还是个冷酷的质检员,新找出来的每一套做法必须和旧流程逐项比对,只要有一项输出对不上,立刻判死。
今天是五个数排名,明天可能是十六个数分桶。
而且,江临很快意识到,这玩意儿最有价值的地方还不是快那么一点点。
而是它在逼着自己变得更加严谨。
因为他在使用这个搜索器的时候,想要让它工作起来更加顺利,就必须明确告诉它。
什么算对,什么算错,什么边界绝对不能碰,什么动作看似捷径,实则是把未来的债挪到了现在?
这简直就是最硬核的自学过程。
以往他学个新概念,总得在脑子里左右互搏。
一个状态压缩会不会丢信息?
一个递推是不是偷偷混进了未来数据?
一个看起来精妙无比的证明,会不会在某个极端边界上一脚踩空?
现在,相当于身边多了一个没有智商,但体力无限的死脑筋助教。
江临在终端里敲下一行测试:“这个说法在十个元素以内有没有反例?”
MPS不懂为什么,它只会把所有情况像翻抽屉一样全倒出来。
如果没有,它告诉你在这个小范围里没找到。
如果有,它会把那个血淋淋的反例直接拍在你脸上。
足以让江临省下大把时间,去验证自己的直觉是不是错的。。
五个数的排序,代码跑得欢快。
六个数,后台打印的痕迹开始变得杂乱。
等到八个数,以及更大的数时,为了找出那条最短、最稳、最不容易出错的动作串行,它必须在海量比较顺序里试探。
机箱里的风扇一下子开始狂转,发出沉闷的嗡嗡声。
任务管理
路太多了。
所有可能的动作串行像决堤的洪水一样漫出来,直接把这个体力无限的工人淹死在了内存里。
靠剪枝撑出来的生机,在指数级的爆炸面前不值一提。
江临听着机箱的轰鸣,捏了捏眉心。
这是结构性的绝症。
已经不是多挂机几个小时能解决的问题了。
要让这套工具链成为内核,他必须解决更底层的逻辑。
哪些状态可以合并?
哪些死路可以提前砍掉?
以及砍掉之后,怎么在数学上证明自己没有误杀真正的最优解?
江临切回日志文档,敲下几行字。。
写完,他停了一下。
光标在末尾有节奏地闪铄。
他又补上一行。
需要数学语言:局部规则,状态转移,全局约束。
这几个词,不知怎么地,就在他脑子里意外置上了另一条线。
让他想起了一个更老的问题。
如果一块型状的物理边界,就是一种天然的局部规则?
如果两次图形的严密拼接,就是一次状态转移?
错误接法会自动走进死路,而正确接法会被迫像长晶体一样,蔓延成越来越宏大的结构。
这跟他在机箱里让MPS疯狂试错,本质上没有什么区别。
江临重新把光标放回搜索框。
这一次,他没搜代码,而是敲下了一行英文。
local rules force global structure
回车。
几秒钟后,页面上跳出了几个词:tiling(铺砌)、substitution(替代)、aperiodic(非周期)。
他顺着链接一路点进去。
Penrose 铺砌、Wang tiles(王氏砖)、准晶体。
最后,在一篇学术综述的边角处,他看见了那个如针尖般锐利的词。
notile(单一瓷砖)。
江临盯着这个词看了足足半分钟,眼神发亮。
随后在搜索框里重新输入:aperiodic tiling notile。
……
下午,江临去了江大图书馆,借了四本书。
一本有限自动机,一本组合优化,一本符号动力系统。
以及一本封皮都有些卷边的离散几何