校级“新生杯”编程竞赛的通知,像一颗石子投入计院新生的池塘,激起了有志者们(以及想混点经历者的)热情。竞赛允许1-3人组队,题目偏向算法和工程实践结合,奖励除了奖金,还有直接推荐进入各教授实验室或优先参与项目的机会。
陆星辰收到通知时,正和林筱筱在图书馆。他扫了一眼邮件,问林筱筱:“参加吗?”
林筱筱有点犹豫:“我……行吗?这种竞赛,都是高手吧?”她想起数据结构项目演示时那些虎视眈眈的同学。
“为什么不行?”陆星辰合上电脑,“项目我们做得很好。竞赛只是另一种形式的解题。而且,”他顿了顿,“我查过历年赛题,有不少需要前端交互和文档设计的部分,是你的强项。”
他总是能找到最恰当的理由鼓励她。林筱筱心动了:“那我们……组队?”
“嗯。”陆星辰点头,随即又补充,“把周子豪和姜楠也叫上。他们需要一个正经理由逼自己系统学习,而且,”他眼中闪过一丝几不可察的笑意,“有他们在,气氛不会太闷。”
林筱筱失笑,这倒是真的。
组队消息一出,周子豪立刻在群里撒花放鞭炮:“陆哥筱筱带我飞!我终于有机会体验抱大腿躺赢的快乐了吗?”
姜楠则发了个摩拳擦掌的表情:“我负责给你们买饭加油!以及物理清除一切干扰因素!(比如把说风凉话的周子豪扔出去)”
四人小队“星辰大海”(名字是林筱筱起的,周子豪吐槽太文艺,被姜楠镇压)正式成立。陆星辰担任队长和核心算法,林筱筱负责交互逻辑、界面和文档,周子豪负责部分模块编码和测试,姜楠则是后勤部长兼气氛组(以及物理威慑)。
秦朗也组了队,队员是上次数据结构课的同伴,还有一个大三的学长做指导。得知陆星辰组队,并且带了林筱筱和周子豪这两个在他眼里“实力不均”的队友后,秦朗在寝室里(特意当着陆星辰的面)对同伴说:“有些人啊,就是太自负,以为带两个拖油瓶也能赢。竞赛可不是过家家,要的是硬实力。”
陆星辰戴着耳机,仿佛没听见,手指在键盘上敲下一行行优雅的代码。李锐抬起头,推了推眼镜,对秦朗说:“你U盘里那个竞赛方案初步设计,第三部分的复杂度分析,好像有点问题。”他说话向来直接。
秦朗脸一僵,连忙低头检查。
竞赛在周末的机房举行,持续六个小时。题目果然不简单,是一个简化版的“智能物流路径规划系统”,需要处理实时订单、车辆调度、路径优化,还要有一个可视化的模拟演示界面。
拿到题目,陆星辰快速浏览一遍,便开始了分工:“周子豪,你负责车辆状态和订单队列的基础数据结构和接口,按照这个规范写。”他扔给周子豪一份简略的设计文档。
“筱筱,这是可视化部分的框架和需要展示的关键数据点,你先搭建基础界面,等核心算法出来再对接。”
“姜楠,后勤和提醒时间,顺便盯着周子豪别跑偏去优化界面特效。”
他自己,则开始攻克最核心的、带时间窗和容量约束的车辆路径规划算法。
机房里键盘声噼啪作响,气氛紧张。其他队伍大多眉头紧锁,讨论激烈。唯有“星辰大海”这边,陆星辰沉静指挥,林筱筱专注设计,周子豪虽然偶尔抓耳挠腮但还算规矩,姜楠则像监工一样在周子豪身后晃悠,手里还拿着个小本本记“周子豪开小差次数”。
秦朗那队似乎进展不错,他不时抬头看向陆星辰这边,看到林筱筱在认真画界面,周子豪对着屏幕愁眉苦脸,嘴角撇了撇。
比赛进行到第三个小时,陆星辰的核心算法遇到了一个棘手的边界情况,优化效果不理想。他眉头微蹙,陷入沉思。
林筱筱完成了基础界面搭建,见状凑过去,小声问:“遇到麻烦了?”
“嗯,这里的时间窗约束和容量约束同时收紧时,贪心策略的局部最优陷阱很明显。”陆星辰指着屏幕上的模型。
林筱筱看着那些复杂的公式和代码,她不太懂具体算法,但她想起了陆星辰给她讲过的、关于“跳出固定思维”的例子。她犹豫了一下,说:“我记得你以前说过,有时候换个数据结构或者拆解问题的方式……既然同时处理麻烦,能不能……分两步?先不管容量,快速筛出一个满足时间窗的路径集,再从这个集合里挑满足容量的?”
她只是凭着感觉和对他以往教导的理解,提出了一个非常外行的想法。
陆星辰却愣了一下,目光重新聚焦在问题上,手指在键盘上快速敲击了几下,调出另一个分析视图。他盯着屏幕,嘴里喃喃:“先筛时间窗可行解……缩小搜索空间……再匹配容量……对!可以先用拓扑排序思想预处理时间约束,将问题空间压缩!再套用改进的遗传算法进行容量匹配和全局优化!”
这章没有结束,请点击下一页继续阅读!