2017华为软件精英挑战赛参赛过程回顾与心得

参赛队名:武长区 枪林弹雨
2017年4月26日,一波三折的复赛终于结束了,我们队最终没能进入决赛。虽然在意料之中,不过还是有些小失望。已经为这个比赛忙了一个月,突然之间不知道干什么好了,干脆写一写自己这次参加比赛的过程吧,算是对自己这一个月工作的总结。

这并不是一篇高级技术文,只是一个原先连Dijkstra都写得艰难的人在比赛中挣扎着一点一点取得微小进步的故事。

报名参赛

最开始看这道题应该是校园宣讲会那天,3月9号,不过那天也就是想想而已,因为看懂题目就花了我好多脑细胞。当时看到比赛的丰厚奖励,不禁怦然心动。不过,最让我心动的还是实习offer,毕竟对我这个非计算机专业而且没有什么项目经历的人来说,通过实习生面试的几率相当渺茫。那天之后也只是加了比赛群,并没有报名,因为当时还有自己的课题要做。那段时间,天天看着比赛群里的大佬讨论题目,看到自己觉得有用的讨论就截图,准备自己忙完手头的事情之后仔细看。

3月19号那天,终于把自己课题的阶段性成果发给导师,然后上官网注册报名,准备全身心投入比赛中。取队名的时候想了半天也没想到什么好名字,手边正好有一本华为的书,是之前参加学校的华为师兄师姐分享会的时候拿到的,叫枪林弹雨中成长,干脆就把队名取成了枪林弹雨。或许可以把这次比赛的赛场比作高手如云的战场,我希望自己在大佬们的枪林弹雨中收获成长。

正式初赛之前(3月19日-3月31日)

刚刚看完题目的时候真是一点思路都没有,就是自己在纸上瞎写瞎画,完全不知道如何入手。我一开始的想法是既然服务器位置不确定,消费节点位置确定,那么能不能从消费节点出发考虑,看一看从消费节点出发的路线在各点上的交叉情况,以次来确定服务器的位置,但是想了很久觉得根本行不通,即使不考虑效率的问题,消费节点之间也会相互干扰。

于是还是觉得应该先把服务器的位置定了,那么怎样选择初始服务器的位置呢?好的服务器指数应该离某些消费节点的距离比较近(cost小),那么我就先求一下所有点到所有消费节点的距离。然后怎么分析?显然不能求到所有消费节点的平均值,因为一个服务器不必距离所有消费节点都很近,那么就只看最小的一个或者最小的几个?我用Dijkstra算法写了一下,找了几个按照上述准则距离消费节点较近的节点,然后和最优解比较了一下,发现基本对不上QAQ 于是暂时放弃了这一思路。而且由于程序写的渣,我当时的速度也是比较慢,感觉浪费时间去找一个不怎么样的初始解,完全不值得。

断了思路的我就开始逛论坛,看知乎上大佬的评论,有人提到说最小费用最大流。我当时感觉没想明白为什么,这明明是一个最小费用流啊,为什么是最小费用最大流?搜了搜最小费用流算法,感觉都不适用啊,没法处理消费节点之间相互竞争的问题。可能大佬们在这里完全不会有我这样的困惑,但对一个没有接触过费用流问题,完全不懂残余网络,只听说过Dijkstra算法的人来说,一切都如此艰难。

转折点大概发生在netcan在知乎上发言那天吧(2017华为软件精英挑战赛参赛心得),看了他的发言,我突然对自己充满了信心,觉得自己应该也能做好。在他的知乎回复之下的讨论里,我看到有人也有和我一样的困惑——连续费用路会造成消费节点的相互竞争,不过netcan本人回答说不会。看了之后我想自己先写写看吧,于是用Dijkstra写了一个连续最短费用路(这是一个错误的思路,错误一在于我把用掉的费用路直接拿掉了,没加负权边,错误二在于我没加超级汇点,消费节点是一个一个算的,这样的话它们之间必然相互干扰)。写完之后我就拿netcan发的最优服务器位置来验证正确性,测前两个case的时候居然和他的费用一样,我一度很开心,不过后面几个就比他的高了。检查了半天发现代码没有错误之后,我终于还是意

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值