项目二:2020年华为软件精英挑战赛

2020年华为软件精英挑战赛总结

成绩:

  • 初赛成渝赛区排名第9 (共1034支队伍)
  • 复赛成渝赛区排名第3 (共32支队伍),进入决赛
    项目背景:通过金融风控的资金流水分析,可有效识别循环转账,辅助公安挖掘洗钱组织,帮助银行预防信用卡诈骗。基于给定的资金流水,检测并输出指定约束条件的所有循环转账。要求结果准确,用时最短。

2020年华为软件精英挑战赛面试

主要学习弄懂三个知识点 :dijkstra(基本算法流程与优化方法),计算bc算法(基本算法流程),代码优化技巧(记几个,加上原理)

向面试官介绍自己的比赛,四个方面来说:
比赛背景: 基于给定的资金流水,检测并输出指定约束条件的所有循环转账,可有效识别循环转账,帮助银行预防信用卡诈骗。要求结果准确,用时最短。分为初赛,复赛,决赛三个阶段,题目各不相同;
比赛负责内容: 主要负责三方面工作,第一负责解题算法研究,包括Dijkstra算法研究,位置关键中心性算法研究;第二参与代码优化,包括使用一些c++代码优化加速技巧;第三参与数据测试与分析工作,包括分析数据特点与服务器测试代码得分;
比赛成果: 初赛成渝赛区排名第9 (共1034支队伍);复赛成渝赛区排名第3 (共32支队伍);决赛全国总排名第9;

初赛

流程:读图预处理(去除特殊节点)->储存图(前向星)->dfs找环(正向3+反向4,bfs与dfs区别)->输出

优化:
1.使用局部变量,减少使用全局变量;
2.使用数组代替vector;
3.保持结构体字节对齐
4.将id和边尽可能的连续,提高cache的命中率
5.更改数据类型,减少计算时间
针对数据特点优化:
转账金额较小的这一点,可以使用动态的数据类型,如自动切换的uint_64,uint_32,uint_16(提升100+)
第一组:菊花图(无标度网络),存在大量入度为0,出度为1的结点
第二组:随机图,90%以上的点只有一个前驱,边权为100以内的正态分布,均匀度为20左右,且分布均匀,因此搜索四次邻接表即可完成全图搜索对任意一点,所有点均会入堆至少一次
第三组:第一组+第二组综合

决赛

流程:读图预处理->储存图->dijkstra计算最短路+优先队列->计算位置关键中心性->输出
基本思想:以每个点出发做dijstra,求出到个点的单源最短路径,并且按拓扑序反向递推计算中心性bc

优化:
1.使用局部变量,减少使用全局变量;
2.使用数组代替vector;
3.保持结构体的定义 保持字节对齐
4.将id和边尽可能的连续,提高cache的命中率
5.更改数据类型,减少计算时间

一、初赛

前向星资料1前向星资料2

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值