题目是:

给出200w行表示为资金流水的转账记录文件,求出其中存在循环转账路径长度为3-8且转账金额比例在1:5到3:1之间的记录,并有序输出。

解决方案大体流程:

读文件,构造图,dfs找环

读文件/输出文件:采用mmap

构造图:采用全局变量的二维数组,同时利用robin-map对输入结点加以映射

dfs:首先反向dfs三步,再正向dfs五步,如果条件符合则说明找到环

多线程:采用信号量加锁的线程抢占处理,每个线程处理某一个结点为起点的所有环

调优:

1.采用perf record和pref report工具查看程序耗时的语句,并优化

2.采用内建宏unlikely、likely优化分支预测,提高指令命中率

3.拆分循环,拆分递归函数,尽量减少条件语句判断,增加CPU利用率

4.采用线程抢占而非固定多线程,减少上下文切换

5.先hash映射再二维数组存储整张图,减少缺页中断带来的时间消耗

6.采用robin-map代替std::unordered_map加速映射

7.采用字节对齐编译原句,使结点结构内存对齐

robin-map在发生冲突的时候,移动的是距离应该在初始位置的更近的那个

codecraft2020总结相关推荐

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

    前言 最近在打腾讯广告算法大赛,所以一直在鸽0 0,再加上复赛印象不怎么深刻,所以就随便扯啦. 开源地址:https://github.com/Chadriy/CodeCraft2020 放题 一.规 ...

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

    前言 决赛的过程颇为坎坷,深深的感受到了自身能力的不足,团队的力量有时要远胜个人. 开源地址:https://github.com/Chadriy/CodeCraft2020 放题 复赛结束,还没来得 ...

  3. 2020华为软件精英挑战赛历程总结

    前言 历时两个月,终于结束了今年的华为软挑,这感觉就很爆肝.非常感谢队友们的强力输出.还有遇到的的大佬.成研所的小姐姐们,虽然成绩不佳,但还是分享一下我们每个阶段的成长. 首先简单自我介绍一下,我是I ...

  4. 计算机专业有哪些值得推荐的竞赛?

    如何在大学的时候,丰富自己的业余生活? 如何让自己的计算机知识以及技术越来越突出? 如何让自己的简历看起来更加丰富? 我想,有一条途径能帮助到你. 那就是参加比赛. 参加比赛不仅能锻炼你的专业能力,还 ...

  5. 哪些值得推荐的计算机专业竞赛?

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:大学生竞赛指南 话题描述: ...

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

    前言 去年懵懵懂懂,一个人从头自闭到尾,到最后也没对上判题器,复赛第十遗憾离场.今年的开端也是十分不顺,我们提交的第一发线上14s,这时候前排已经有0.x的成绩了,一度陷入深深的自我怀疑之中.好在队友 ...

最新文章

  1. 把本地mysql备份到服务器innodb_使用mysql备份工具innobackupex将本地数据 直接恢复 到远端服务器数据目录操作实例...
  2. 电脑断网也难逃黑客攻破!风扇在转,手机放桌上,数据就被隔空窃取了
  3. 计算机考试一级考试基础知识,2016计算机一级考试msoffice基础知识
  4. 博客会被搬去csdn
  5. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法
  6. mac mysql 重设密码_Mac下忘记mysql密码重新设置密码的图文教程
  7. Opencv级联分类器实现人脸识别
  8. 使用python将COCO格式的json文件转化为VOC格式的xml文件
  9. 昌吉学院2017年计算机招生,昌吉学院
  10. 解决datalist中单选按钮可以多选的问题(Asp.Net)
  11. VOJ1067 【矩阵经典7 构造矩阵】
  12. Python炸弹人小游戏源代码
  13. 实际利率 名义利率
  14. 操作系统实验三虚拟存储器管理之模拟页面置换算法(FIFOLRU)
  15. 七年级上册教材同步英语笔记
  16. 上海在职研究生计算机专业考什么,中国人民大学计算机专业在职研究生考试考什么?...
  17. 《软件测试常见面试题十二》
  18. 【windows】SCCM部署系统时遇到的错误
  19. js原型链(详细图解)
  20. js点击按钮向左侧滑动效果

热门文章

  1. 准备在App Store上发布您的应用程序
  2. 利用PLINK进行GWAS分析
  3. 1. 使用SimpleDateFormat类,把2018-03-04转换为2018年03月04日 2. 用程序判断2018年2月14日是星期几。 3. 键盘录入一个年份,判断这
  4. 教程篇(5.0) 05. 通信控制 ❀ FortiEDR ❀ Fortinet 网络安全专家 NSE 5
  5. Edge获取网页内置的pdf
  6. 【智能控制实验】基于MATLAB的BP神经网络实现非线性函数拟合设计
  7. Linux程序无法切换输入法,linux输入法切换不了
  8. ubuntu nginx创建多站点配制
  9. 怎么把多张照片合成一个pdf
  10. Linux 下Could not get lock /var/lib/dpkg/lock-frontend问题解决方法