雷天君提着两大暖瓶的咖啡和一箱子面包,走了进来。他把食物重重地放在桌上,吼了一嗓子:“弟兄们,歇会儿,补充弹药!谁要是敢在决赛那天给老子掉链子,我把他绑在椅子上,让他看一百遍小张设计的那个‘爆炸红’按钮!”
众人发出一阵哄笑,紧绷的气氛为之一松。那个叫小张的程序员,脸红得像雷天君口中的按钮,不好意思地挠了挠头。
大家纷纷围过来,拿起面包狼吞虎咽,或者给自己灌上一大杯滚烫的咖啡。这一个多月,他们几乎是以办公室为家,在代码的海洋里搏命。虽然疲惫,但每个人的脸上,都洋溢着一种创造者独有的光彩。他们亲手缔造的“盘古”,即将迎来它的第一次实战检阅。
与这里的喧嚣不同,林秋的办公室里,一片寂静。
他独自一人,坐在巨大的办公桌后,审阅着“龙芯杯”决赛的最终题库。这些题目,大部分由命题组的专家拟定,但最后三道压轴题,是他亲手设计的。
第一道,是“迷宫寻路”的升级版,在一个三维空间中,布满了动态变化的障碍物,考验的是选手的空间想象能力和对广度优先搜索算法的灵活运用。
第二道,是“芯片布局”的简化模型,要求在一个固定大小的区域内,放置尽可能多的,不同形状的多边形,同时满足一系列复杂的间距规则。这道题,实际上就是EDA软件核心算法的微缩版,林秋想借此,在这些年轻人心中,埋下一颗软件工程的种子。
而最后一道,就是那道由张教授提议,经过他修改和确认的,关于“旅行商问题”(TSP)的变种。题目背景设定为,一个星际商人,需要访问N个星球,每个星球之间都有固定的航线和不同的“曲率航行”时间,要求找到一条访问所有星球一次且仅一次,并最终返回起点的,总时间最短的航线。
题目的N值,被设定为50。
这是一个魔鬼般的数字。TSP是一个经典的NP-Hard问题,当N等于50时,可能的路径数量是一个天文数字,远远超出了任何计算机在有限时间内进行暴力穷举的能力。即使是使用目前最先进的动态规划算法,其空间和时间复杂度也高得吓人。
林秋设计这道题的初衷,并非要求选手给出“最优解”。他想考察的,是他们在面对无法解决的难题时,所展现出的思维方式。是选择一个优秀的“近似算法”,比如“贪心法”或者“模拟退火”,在可接受的时间内,找到一个足够好的“近似解”?还是敢于挑战,尝试设计一种全新的启发式搜索,去冲击更优的结果?
这道题,考验的不是知识,而是智慧和勇气。林秋甚至已经在心里预设,最好的结果,也就是有队伍能利用巧妙的剪枝策略,找到一个比常规贪心算法好10%左右的解。至于最优解,那是不可能的。
他审阅完所有题目,确认无误后,签上了自己的名字。时钟,已经指向了午夜十二点。
他站起身,揉了揉有些发酸的脖子,准备去软件组看看情况。路过为参赛学生们开放的临时机房时,他下意识地朝里面望了一眼。
大部分学生已经回去休息,为明天的决战养精蓄锐。但还有几个“学霸”型的队伍,在做着最后的练习。
林秋的目光,无意间扫过一个角落。那里坐着一支队伍,三个人围着一台电脑,正在低声讨论着什么。他们的屏幕上,是一道图论的练习题。
这本是寻常的一幕,但其中一个学生的话,却像一根微不可察的针,刺入了林秋的耳朵。
“……如果把每个城市看作一个‘费米子’,路径看作‘玻色子’,那整个哈密顿回路的构建,不就是一个寻找系统基态能量的过程吗?”那个学生,正是燕京大学二队的队长,孙宏。
林秋的脚步,瞬间停住了。
费米子?玻色子?基态能量?
这些是量子物理学的概念,跟经典的计算机算法,风马牛不相及。一个普通的大学生,在讨论一个经典的图论问题时,为什么会用上如此生僻和前沿的物理学比喻?
这不合常理。
林秋没有声张,他只是像一个普通的路人,缓缓走过。但他的大脑,已经开始飞速运转。
“场论布局”,这是他自己提出的,用物理学思想解决EDA布局问题的核心理论,目前还处于绝对保密阶段。而孙宏口中的比喻,虽然不完全准确,但其内核思想,与“场论”异曲同工——将一个组合优化问题,转化为一个物理系统的能量最小化问题。
这绝不可能是巧合。
一个可怕的念头,在林秋的脑海中闪过。他立刻联想到了那道“旅行商问题”的压轴题。
难道……
他快步走回自己的办公室,锁上门,重新拿出那道题的题卷。他死死地盯着“N=50”这个数字,以及那些看似随机分布的星球坐标和航行时间。