2019华为软件精英挑战赛心得

引言

一则关于2019华为软件精英挑战赛的心得总结,让我学到了很多新东西。


前言

今年第一次参加华为软挑,最终拿到了全国16强,也是很不容易,团队配合很重要,坚持不懈的态度也很重要,过程中也是受益匪浅,总体上来说,真的是收获多多~

赛题其实都不太重要,每年题目都不一样,也有很多人分享了他们自己的解题方法,Github上搜索2019codecraft可以搜到很多,我也就不再多说了,说说全局的注意点:

  1. 团队配合分工很重要。软件为主的比赛,还是得有软件功底。
  2. 语言选择很重要。我们今年用的是Python,19年的题目对速度有一定的要求,所以用C/C++/java会相对有时间优势一点,但是写起来会复杂很多,所以也是相对的,自己取舍,但还是建议用速度快的,速度优势比代码优势要划算得多。
  3. 一定不要在比赛前一天还在大幅改动代码。没有经过一段时间测试的代码,说崩就崩。
  4. 如果对速度有要求,一定要好好看看数据结构与算法。
  5. 多交流,不要局限于组员之间,组与组之间也是可以的。

通用的心得,其实也没有很多,也没说到很多重点,但是比赛中对Python有了很多新的认识。


内建函数VS自己写

Python真的自带了很多很多内建函数和标准库,可以完成各种各样的数据结构,特别是collection库,很好使,还有heapq。这次比赛中,要用到D算法D算法要用到二叉树优先队列,但是heapq里面的优先队列没有decrease key这个操作,我就使用了自己写的优先队列,但是后来经过对比发现,就算不用decrease key这个操作,使算法变复杂了一点,使用标准库,依然比自己写的快不知道到哪里去了,所以,标准库,你值得拥有。


类实例VS内存

这次赛题,会生成很多类实例,毕竟Python是动态分配,担心会占用太多内存,于是神奇的搜到了一个魔术方法__solt__,加上这个,可以减少属性占用的内存,还能加快读取,所以,还是得多多学习呀。


程序性能分析软件

程序性能分析软件真的真的很重要,特别是对时间有要求的时候。我用的是cProfile,很好使,可以知道每个函数块用时占比,进而可以有针对性的修改。