2020华为软件精英挑战赛历程总结——决赛篇

本文作者回顾了2020年华为软件精英挑战赛决赛的经历,分享了他们在解决图论问题上的算法优化过程,包括减少计算节点、优化数据结构和利用特性压缩等技巧。尽管面临困难,团队最终取得了全国第五的好成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

决赛的过程颇为坎坷,深深的感受到了自身能力的不足,团队的力量有时要远胜个人。

开源地址:https://github.com/Chadriy/CodeCraft2020


放题

复赛结束,还没来得及感慨,第二天一大早就放题了。实在是不想做题目介绍了,简单说明一下,仍然是给定一个有向加权图,不过解题目标变更为计算网络中节点介数中间性,并返回top100的点与其精确值,对于概念及算法可以参考https://blog.csdn.net/betarun/article/details/51168259。基本上,大家参考的都是2001年brandes在论文《A faster algorithm for betweenness centrality》中提出的算法,一天之内算法就内卷了呢(无奈摊手.jpg)。
然后队友一天写好了base,然后造了份数据集(tql),之后几天就是debug和精度问题。

练习榜A

决赛后我们进入了分别solo的状态,蔡总写好base后被导师gank出差去了,于是交给我继续搞这base。第一版的最短路算法我们用的是优先队列的dijskra算法,配合brandes算法计算介数中间性。由于算法复杂度提高了非常多,之前对io的优化基本上没有作用了。因此优化思路被限制成三种:

  • 算法逻辑的优化
  • 数据结构优化
  • 针对数据集优化

线上开放测试,我们很快意识到针对底层的优化经过初赛复赛已经达到了瓶颈,因此一开始没有很好的方案。榜A第一天,官方公布了数据集的规模,并给了一个线上线下特性同步的数据集,根据其大小我们推测,完全随机图是根本跑不完的。之后测测数据集特性,主要是度特性、权值分布、scc这些,发现平均度为1。继续观测数据集,发现总点数约80w,而其中60w+为入度0出度1点,形状有些像刺猬。
于是根据公示的等价性,入度0点的 σ \sigma σ为其邻接表的 ∑ l   r σ \sum\limits_{l~r}\sigma

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值