2022华为软件精英挑战赛

3.14-3.27,历经两个周,终于是落下帷幕了。最后成绩虽然还没出,但是最多也就是个谢谢参与奖了。整理一下比赛以来学到的新东西吧。

 

  • 3.14之前

先把C++ STL库的东西大概了解了一下,但是不深,也不怎么会应用。

​​​​​​概述 - C++ STL Tutorial (gitbook.io)

还根据目前的赛题简介稍微猜一猜是流量控制,还去看了相关的视频

陌陌直播智能CDN调度系统实践之路

  • 3.14初赛赛题公布

根据赛题整理了一下数据结构,分别是客户节点、边缘节点、服务质量。然后想到的最简单粗暴的方法就是遍历客户节点,遇到满足条件的边缘节点就分配。

但是就这版暴力写了有三五天orz因为不会读取csv文件和ini文件,也不会写入txt文件,都是一点一点百度查的

C/C++读写csv文件(用getline探测逗号分隔符) - findumars - 博客园 (cnblogs.com)

(23条消息) c++中 string 和 int 类型转换_凉冰难消一腔热血的博客-CSDN博客_c++ string转int

c++写入txt文件 - morein2008 - 博客园 (cnblogs.com)

(23条消息) 读取、写入和清空文本文件(C++)_yyyyygq的博客-CSDN博客_c++ ofstream清空文件内容

后来读取csv文件和写入txt文件都学会了,但还是不会读ini文件。搜了很多很多,大都是要写一个读取配置文件的类,但我看不懂orz,后来看群里有人说直接从文件流中搜索读取,我也就这么干了。

(23条消息) c++截取字符串_cary516843761的博客-CSDN博客_c++截取字符串

到这里终于能读取能写入了,线下数据集也跑的很流畅,但是线上一直分配不合法。没有办法,只好学习怎么在linux上调试C++。然后就发现了wsl,本来想安装clion,但是安装失败,后来又发现vscode可以在wsl上调试,所以后期一直用vscode进行调试

(23条消息) 史上最全的WSL安装教程_金士顿的博客-CSDN博客_wsl安装

Windows10自带Linux系统(WSL)安装过程 - 简书 (jianshu.com)

(23条消息) 使用vs code和wsl搭建C/C++开发环境_coxlong的博客-CSDN博客_wsl2和vscode

群里大佬说linux和windows中的换行符不同,在wsl上一调试,果然是的,后来是借鉴的大佬用字符串的erase()方法

这时候终于提交成功了

后来队友说按照边缘节点的剩余带宽的比例分配

当时我也想到说平均分,在实现完按比例之前我也尝试了一下平均分,后来发现不如按比例的成本低

 

因为题目中是以95%位带宽作为成本,所以我想应该是5%尽量大,95%平均分是最后要达到的目的。但是怎么跑满5%我是真的不知道。后来群里大佬也说尽量把5%分一分,于是我想把每个边缘节点的5%暴力跑满,跑满5%之后再按比例去分剩下的。

但实现之后效果很差,可能是没有把5%跑满的关系。当时上传的已经忘记是哪个了,但效果不好是记得的。

这个时候初赛时间已经快要截止了。

  • 3.25正式赛

正式赛我先把按比例分传了上去,结果一直分配方案不合法

看群里大佬说是因为正式赛的数据集中三个文件的节点顺序不一致(这里就要提一句,我在群里提问的时候问“依赖于数据节点顺序会不会导致编译错误”官方回答不会导致编译错误,我当时就觉得不对我应该问会不会导致失败,而且官方这么回答说明一定有问题,果然)

所以后来又去学了unordered_map,之前完全不会

然后写出了一版暴力

 然后是按比例

又再次尝试了拉满5%

应该是这个,跟按比例和暴力相比效果很差

后来想到说迭代,哪个结果好取哪个,但是实在不会写。其实我之前就想用遗传算法(在此感谢本科老师) 来求解,但是不知道该怎么去随机生成初始解,也不知道该怎么去变异。交叉运算倒是还好,只要交换两个解的某时刻的分配表就可以,但是变异实在不知道怎么变异。

最后一天去随机

然后去迭代,不过我的迭代也只是随机,而不是朝着最优解去迭代

迭代有很多次错误,有的是很小的那种(当时觉得就我这个马虎劲儿以后做后端的话可能会被Bug气死),浪费了很多次机会

但后来运行成功的两次跟之前的按比例几乎一样。

很不理解,明明在线下的时候效果是比按比例好的,而且也确实迭代了多次取了最优解。我现在非常怀疑他根本没有去随机,只做了第二步的按比例。但不知道到底是什么原因。难道是我没有引入time库?

  • 3.27 18:00

结束了,最后成绩就是按比例

大佬们太强了

85也许还会往下掉,但对于我们一开始的目标来说,还行吧。

这次比赛我最大的收获大概就是原来我可以。不要害怕失败,也不要害怕沉没成本,你一定能在其中有所收获的。

总结一下参加华为软挑需要学习的东西吧(C++)

  1. STL
  2. 各种优化算法(遗传模拟退火粒子群禁忌搜索等等)
  3. 贪心动态规划
  4. 刷leetcode应该是有点用的

留一个github的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值