2019华为软件精英挑战赛总结

2019华为软件精英挑战赛总结

一点点感想

华为软挑切切实实的做了两周,说实话这也是第一次打这种代码比赛,最终的成绩略显遗憾,西北赛区的58名,因为今年没有64强这一说法,所以没有任何奖励,希望明年有再来一次的决心勇气,毕竟竹篮打水一场空太让人不爽了。

成绩附图如下,第58名:我是起名废团队

在这里插入图片描述

赛题简介

今年的赛题首先让人窒息的就是长达29页的题目,光是读题我就读了一下午加一晚上。总结一下就是有几万辆车从不同的地点不同的时间出发,去往不同的地点。在这个过程中,有若干条道路供他们选择,这些道路长度不同、车道数不同、同时有的车道是单向道,有的车道是双向道。

在这里插入图片描述
如上图所示,某个路口上有5000,5001,5010,5018四条道路,目前状态时刻道路上的车辆如上所示,前面标有R代表右转,标有L代表左转,标有D则是直行,交通规则是:右转让左转,左转让直行。
最后题目要求调度时间最短。(调度时间指从系统开始调度车辆到最后一辆车辆到达目的地)

解题思路

抛开之外的各种复杂条件,这道题本质上就是一道求每个点到每个点之间的最短路径的问题,所以我们组就先写了一套floyd求最短路径的算法,实际测试时,因为发车时间过于频繁,所以报错结果总是显示在某个路口车辆锁死,锁死的原因主要是因为在路口对面的两个车辆互相等待。

为了避免锁死,先尝试了最基本的调参大法,让所有车辆的出发时间均匀起来,即系统中第i辆车/25,这样一来果然不锁死,我们就得到了 初步的结果:调度时间1367。稳稳占据了一天的排行榜top1。
在这里插入图片描述
为了进一步避免车辆的死锁现象,我们团队又脑洞大开,想从道路的角度入手,每条道路上目前在跑的车辆数不超过该条道路负载的1/2,如果有车辆超过,就让它的出发时间推迟一时间步,事实证明,这个想法可行,可这个结果是太不好了,跑下来两张图将近2600多秒。

没办法,我们只能尝试新的思路,比如每轮车辆开始走最短路径,但是对于走的道路多的车来说,我们给它加更长的距离,然后进入第二次道路选择,这样有的车就会换走别的稍微长一点的道路,依次循环5轮,同时在每一轮,都有一小部分车速快同时距离又短的车辆发车。这样结果就达到了962秒。

后面,又对这个结果做了细化,双向道路负载啊,之类的。结果并没有更成功(sad),962秒就是我们练习赛最好的成绩了。

至于判题器的问题,并没有写出来。。。。。

32强分享的思路

西北赛区靠调参进入32强的同学们分享了经验。非常非常非常简单…
当然我们知道这个思路也很无语,他们虽然没有避免死锁,但是他们每隔1000辆发一波车,然后休息20s,继续发车,,,,我们也用这个思路在初赛完试了试,果然调度时间要快很多。。。。

至于写了判题器还没有进复赛的同学,好像也有很多,说起来也是非常惨了。。。所以说比赛既要看实力也要看运气,今年有一位同学进了32强,也许是两张图用了不同的参数,导致成绩被取消了。。。这种小聪明也不可取。

最后,提醒自己和后来的人,一定要考虑数据规模的扩大性,练习赛3周的数据提供是10240辆车,最终初赛比赛数据是60440辆车。这导致了我们的算法相当于线性增加,比如962乘5.3约等于5098秒,但是实际上很多人大概只增加3倍。最终西北赛区的32强守门员成绩是3177秒。

很多和我们一样练习赛排名比较靠前的人,也掉的非常惨,甚至掉出了64强,就是因为数据规模的扩大,他们的算法线性增加。

所以说,练习赛成绩不是特别重要,保持在32强内即可,调参不是重点,关键还是要有一个好的思路,以及数据规模扩展式算法的实操性。这样才能初赛笑到最后。(华为也把这叫大浪淘金)

最后,感谢师兄师姐,邀请我参加比赛~!还是有很多收获 的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值